假设下一个表:
sch_test.test_cascade
a b c
-----------
6 10 1
6 10 1
6 10 2
6 10 2
a、 b和c是整数,表由c划分。当我在带有cascade的配置单元中添加列时:
ALTER TABLE sch_test.test_cascade ADD COLUMNS (d int, e int) CASCADE;
它返回下一个表:
sch_test.test_cascade
a b d e c
-------------------------
6 10 1 NULL 1
6 10 1 NULL 1
6 10 2 NULL 2
6 10 2 NULL 2
也就是说,第一个插入的列(在本例中是d)采用分区列的值(注意,我添加了两列以显示第二列为null)。但是,如果我添加一个没有层叠的列:
ALTER TABLE sch_test.test_cascade ADD COLUMNS (d int, e int);
它返回下一个表:
sch_test.test_cascade
a b d e c
----------------------------
6 10 NULL NULL 1
6 10 NULL NULL 1
6 10 NULL NULL 2
6 10 NULL NULL 2
也就是说,两个插入的列都是空的。
我不太明白在配置单元文档中,添加带有层叠或限制的列之间的区别:
cascade | restrict子句在hive1.1.0中可用。alter table add | replace columns with cascade命令更改表元数据的列,并将相同的更改级联到所有分区元数据。restrict是默认值,仅将列更改限制为表元数据。
但我不清楚“将相同的更改级联到所有分区元数据”和“仅将列更改限制到表元数据”之间的区别(限制是否只应用于一个分区并级联到所有分区?上一个例子正好相反)。如果这就是为什么插入的第一列(在级联模式下)取分区列的值的原因。
1条答案
按热度按时间vjhs03f71#
如果在add column期间不添加cascade,现有分区将具有相同的定义。即使在用新字段覆盖分区之后,这个新列在它们中也是空的。您可以删除并重新创建分区来修复此问题。