2015-08-14 4 views
0

У меня есть несколько таблиц Hive, которые я привожу из РСУБД с помощью инкрементального импорта Sqoop каждый час и их постановки. Я присоединяюсь к этим таблицам и создаю новые таблицы измерений. Всякий раз, когда я ввожу новые строки из RDBMS в таблицы хранения Hive, я должен обновлять таблицы измерений. Если новых строк нет, обновление тусклых таблиц не должно быть сделано. Используемая мной версия улья не имеет функций ACID.Обновить один стол для улья из другого таблицы улья

Нужно дать совет, как это можно достичь в улье.

+0

Может ли вы показать некоторые примеры текущих заявлений HiveQL вас с помощью? – mattinbits

+0

попробуйте использовать 'parttion'? – luoluo

ответ

0

Вы можете ВСТАВИТЬ новые данные в существующие таблицы Hive, как и любую другую базу данных. И Hive также поддерживает предложение WHERE NOT EXISTS.

INSERT INTO TABLE MyDim 
SELECT Id, Blah1, Blah2 
FROM MySource s 
WHERE NOT EXISTS 
(SELECT 1 FROM MyDim z WHERE z.Id =s.Id) 

Но есть загвоздка: каждый ВСТАВИТЬ создаст новый файл HDFS, даже когда есть нулевые записи участвующих. Слишком много фрагментации снижают производительность с течением времени.

Еженедельная «уплотнению» работа будет полезной (например, переименовать фрагментарную таблицу, заново создать таблицу, INSERT перезапись с переименованной таблицы, капельным переименованной)