#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, отслеживает диапазон идентификаторов в каждом файле, в результате чего такие запросы выполняются быстрее.