Оптимизированный способ проверить, присутствует ли запись в таблице 1. Если нет, то проверьте таблицу 2, иначе верните значение по умолчанию

#sql #hive #hql #hive-query

#sql #улей #hql #куст-запрос

Вопрос:

Заданный в интервью: у меня есть 2 таблицы, в одной таблице есть записи, подобные ID, Name, address . id(pk) от 1 до 10000000.

В другой таблице есть записи от 10000001 до 20000000.

Я должен проверить, присутствует ли определенный идентификатор в таблице 1 или таблице 2, и вернуть соответствующий результат.

Поскольку размер таблицы большой, нужно придумать оптимизированный способ сделать это.

Комментарии:

1. пожалуйста, предоставьте более подробную информацию. Это таблица mysql или куст? Вы должны сделать это с помощью кода или запроса?

2. @shaileshgupta Это было в улье. и мне был задан запрос на это. Спасибо за ответ

Ответ №1:

 declare @ID BIGINT
SET @ID=10000000
IF EXIST(SELECT ID FROM TABLE1 WHERE ID=@ID)
    SELECT ID,NAME,ADDRESS FROM TABLE1 WHERE ID=@ID 
ELSE IF EXIST(SELECT ID FROM TABLE2 WHERE ID=@ID)
    SELECT ID,NAME,ADDRESS FROM TABLE2 WHERE ID=@ID 
ELSE
    SELECT @ID
  

Ответ №2:

Несколько идей на мой взгляд.

  • В улье вы можете использовать соединение на стороне карты, которое намного быстрее обычного соединения, когда 1 таблица большая, а другая маленькая. (здесь 2-я таблица — это идентификатор, который вы ищете)
  • Вы можете оптимизировать способ хранения данных. Сохранение данных, отсортированных по столбцу id, если такие запросы часты. Столбчатый формат, такой как orc, отслеживает диапазон идентификаторов в каждом файле, в результате чего такие запросы выполняются быстрее.