Копирование управляемой таблицы Hive путем копирования каталогов разделов в хранилище

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

Для начала мне нужны данные за год в моей новой таблице, поэтому я хочу скопировать разделы за год из моей существующей таблицы в новую таблицу. Я подумал, что вместо того, чтобы делать INSERT Hive для каждого раздела, было бы быстрее использовать 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, если никакие преобразования не выполняются с копируемыми данными?

Спасибо!!


person ktmq    schedule 06.02.2017    source источник
comment
Вам следует думать не о INSERT, а о операциях резервного копирования / восстановления. Хранилище метаданных Hive отслеживает не файлы данных, а только структуру каталогов; так что пока структура файла соответствует метаданным, это честно.   -  person Samson Scharfrichter    schedule 06.02.2017
comment
Кстати, это также удобный способ пробовать производственные данные и отправлять их в тестовый кластер или кластер QA ...   -  person Samson Scharfrichter    schedule 06.02.2017


Ответы (1)


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

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

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

person 54l3d    schedule 06.02.2017