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

ram*_*ram 4 hive hiveql partition hive-partitions

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

INSERT INTO TABLE student_partition PARTITION(course , year = 3) SELECT name, id, course FROM student1 WHERE year = 3;

请说明原因。。

lef*_*oin 5

此异常的原因是因为分区是分层文件夹。course文件夹是上层,year是每年嵌套的文件夹。

动态创建分区时,应首先创建上层文件夹(当然),然后是嵌套year=3文件夹。

year=3提前(静态)提供分区,甚至在course已知之前。

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

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;
Run Code Online (Sandbox Code Playgroud)

在 HDFS 分区文件夹是这样的:

/student_partition/course=chemistry/year=3
/student_partition/course=chemistry/year=4
/student_partition/course=philosophy/year=3
Run Code Online (Sandbox Code Playgroud)

静态分区应该存在。但是如果尚未定义 parent 则它不能存在。

或者,您可以使year分区动态以及课程:

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