静态分区static partition:手动输入数据分区名称。
动态分区dynamic partition:通过数据来判断数据分区名称。
开启动态分区:set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nostrict;
set hive.exec.max.dynamic.partitions.pernode=1000;
hive先获取select的最后两个位置的se.cnty和se.st参数值,然后将这两个值填写到Insert语句partition中的两
个country和state变量中,即动态分区是通过位置来对应分区值的。原始表select出来的值和输出partition的值
的关系仅仅是通过位置来确定的,和名字并没有关系,比如这里se.cnty和county的名称完全没有关系。
INSERT OVERWRITE TABLE employees
PARTITION (country, state)
SELECT ..., se.cnty, se.st
FROM staged_employees se;
只要位置正确,你可以混用动态分区和静态分区值设定。
INSERT OVERWRITE TABLE employees
PARTITION (country = 'china', state)
SELECT ..., se.cnty, se.st FROM staged_employees se
WHERE se.cnty = 'china';