Вы можете использовать динамическое разбиение, задав следующие параметры.
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
Далее приведен пример кода, который работает:
create table temp.accounts (
first_name string
,last_name string
,zipcode string
)
partitioned by (areacode string)
stored as parquet location '/temp.db/accounts' tblproperties("parquet.compression=SNAPPY")
;
insert into temp.accounts partition(areacode='0') values
('David','David','00')
,('Ellen', 'Ellen','00')
,('David','David','00')
,('David', 'David','00');
create external table temp.accounts_nested (
first_name string
,last_name string
,zipcode string
)
partitioned by (areacode string)
stored as parquet location '/temp.db/accounts_nested' tblproperties("parquet.compression=SNAPPY")
;
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table temp.accounts_nested
partition(areacode)
select first_name, last_name, zipcode, areacode from temp.accounts;
Вывод:
select * from temp.accounts_nested;
+-----------------------------+----------------------------+--------------------------+---------------------------+--+
| accounts_nested.first_name | accounts_nested.last_name | accounts_nested.zipcode | accounts_nested.areacode |
+-----------------------------+----------------------------+--------------------------+---------------------------+--+
| David | David | 00 | 0 |
| Ellen | Ellen | 00 | 0 |
| David | David | 00 | 0 |
| David | David | 00 | 0 |
+-----------------------------+----------------------------+--------------------------+---------------------------+--+