2017-02-06 10 views
0

У меня есть существующая таблица в квадратных скобках, которая содержит YEAR, MONTH, DAY, но я хочу добавить дополнительное разбиение на , столбец, который не существует в существующей таблице. Это должно учитывать будущие табличные вставки, так что я не должен составлять OVERWRITE раздел YEAR, MONTH, DAY каждый раз, когда я беру данные за эту дату; Я могу просто сделать простой INSERT INTO и создать новый раздел INGESTION_KEY.Копирование таблицы управления улей путем копирования каталогов разделов на склад

Для начала мне нужна годовая стоимость данных в моей новой таблице, поэтому я хочу скопировать год разделов из существующей таблицы в новую таблицу. Вместо того, чтобы делать Hive INSERT для каждого раздела, я подумал, что было бы быстрее использовать distcp для копирования файлов в каталоги разделов новой таблицы в каталоге хранилища Hive в HDFS, затем ADD PARTITION в новую таблицу.

Итак, это все, что я делаю:

hadoop distcp /apps/hive/warehouse/src_db.db/src_tbl/year=2017/month=02/day=06 /apps/hive/warehouse/dest_db.db/dest_tbl/year=2017/month=02/day=06/ingestion_key=123 

hive -e "ALTER TABLE dest_tbl ADD PARTITION (year=2017,month=02,day=06,ingestion_key='123')" 

Оба управляемые столы, новая таблица dest_tbl сгруппирована по той же колонке в такое же количество ведер как src_tbl, и единственное различие в схеме добавляется INGESTION_KEY.

Пока что мой SELECT * FROM dest_tbl показывает все в новом столе, выглядящим нормально. Поэтому мой вопрос: что-то не так с этим подходом? Неужели это плохо для INSERT для управляемой таблицы в виде таблицы, или это приемлемая альтернатива INSERT, если никакие преобразования не выполняются на скопированных данных?

Спасибо!

+0

Вы не должны думать в терминах 'INSERT', а скорее в отношении операций резервного копирования/восстановления. Метастор Hive не отслеживает файлы данных, а только структуру каталогов; так как файловая структура соответствует метаданным, это справедливо. –

+0

BTW это также удобный способ отбора данных о производстве и отправки их в тестовый или кластер QA ... –

ответ

2

Хотя я предпочитаю копирование с помощью улья запроса только, чтобы сделать все это в улье, но это нормально, чтобы скопировать файлы данных с помощью других инструментов, но ..

  • Существует специальная команда, которая добавляет новые разделы метаданные, вы можете использовать его вместо alter table add partition.., и он может добавить много разделов сразу:

    MSCK REPAIR TABLE dest_tbl; 
    
  • Keep используя улей формат разделов по умолчанию: partionKey=partitionValue