Hive 动态分区不能是静态分区“3”的父级

Hive 动态分区不能是静态分区“3”的父级,hive,hiveql,partition,hive-partitions,Hive,Hiveql,Partition,Hive Partitions,将数据插入表配置单元时抛出错误:使用下面的查询,动态分区不能是静态分区“3”的父分区 插入表student_partition PARTITIONcourse,年份=3 从student1中选择姓名、id、课程,其中年份=3 请解释原因。此异常的原因是分区是分层文件夹。课程文件夹是上层文件夹,年份是每年的嵌套文件夹 动态创建分区时,应首先创建上层文件夹,然后创建嵌套的year=3文件夹 您正在静态地提前提供year=3分区,甚至在知道课程之前 反之亦然:静态父分区和动态子分区: INSERT I

将数据插入表配置单元时抛出错误:使用下面的查询,动态分区不能是静态分区“3”的父分区

插入表student_partition PARTITIONcourse,年份=3 从student1中选择姓名、id、课程,其中年份=3


请解释原因。

此异常的原因是分区是分层文件夹。课程文件夹是上层文件夹,年份是每年的嵌套文件夹

动态创建分区时,应首先创建上层文件夹,然后创建嵌套的year=3文件夹

您正在静态地提前提供year=3分区,甚至在知道课程之前

反之亦然:静态父分区和动态子分区:

INSERT INTO TABLE student_partition PARTITION(course='chemistry' , year)  --static course partition
SELECT name, id, 3 as year --or just simply year 
  FROM student1 WHERE year = 3;
在HDFS分区中,文件夹如下所示:

/student_partition/course=chemistry/year=3
/student_partition/course=chemistry/year=4
/student_partition/course=philosophy/year=3
静态分区应该存在。但如果尚未定义父项,则它不可能存在

或者,您可以使年度划分动态化,也可以使课程动态化:

INSERT INTO TABLE student_partition PARTITION(course , year) 
SELECT name, id, course, 3 as year --or just simply year 
  FROM student1 WHERE year = 3;