Разделение на физическом уровне - это местоположение (отдельное расположение для каждого значения, обычно выглядит как key=value
) с файлами данных.Если у вас уже есть структура каталогов разделов с файлами, все, что вам нужно, это создать разделы в метастафе Hive, затем вы можете указать свою таблицу на корневой каталог с помощью ALTER TABLE SET LOCATION
, а затем использовать команду MSCK REPAIR TABLE
.Эквивалентная команда в версии Hive для Amazon Elastic MapReduce (EMR): ALTER TABLE table_name RECOVER PARTITIONS
.Это добавит метаданные разделов Hive.См. Руководство здесь: RECOVER PARTITIONS
Если у вас есть только однораздельная таблица с данными в ее расположении, то добавление разделов не будет работать, поскольку данные должны быть перезагружены, вам необходимо:
Создайте еще одну многораздельную таблицу и используйте insert overwrite
для загрузки данных раздела, используя динамическую загрузку раздела:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table2 partition(cityid)
select col1, ... colN,
cityid
from table1; --partitions columns should be last in the select
Это довольно эффективный способ реорганизации данных.
Последля этого вы можете удалить исходную таблицу и переименовать вашу целевую таблицу.