如何通过在配置单元中选择相同的分区表来覆盖列值。
我已经通过执行下面的查询创建了表
CREATE TABLE user (fname string,lname string) partitioned By (day int);
在表中插入数据之后,我插入数据。我执行了如下所示的选择查询:
AA AA 20170201
BB BB 20170201
CC CC 20170201
DD DD 20170202
EE EE 20170203
根据我的要求,我想在我的表(user)中再添加一列,借助下面我添加的查询。
ALTER TABLE user ADD COLUMNS ( day2 int);
添加列后,我的表如下所示
AA AA NULL 20170201
BB BB NULL 20170201
CC CC NULL 20170201
DD DD NULL 20170202
EE EE NULL 20170203
但我想要餐桌式的。
AA AA 20170201 20170202
BB BB 20170201 20170202
CC CC 20170201 20170202
DD DD 20170202 20170202
EE EE 20170203 20170203
所以我执行了下面的查询
insert overwrite table user partition (day)
select
fname,
lname,
day as day2,
case
when day <= 20170202 then 20170202
when day > 20170202 then day
end as day
from user;
然后我执行了如下的select查询
select * from user;
结果是:
AA AA NULL 20170201
BB BB NULL 20170201
CC CC NULL 20170201
AA AA NULL 20170202
BB BB NULL 20170202
CC CC NULL 20170202
DD DD NULL 20170202
EE EE NULL 20170203
为什么我得到空值。请让我知道我错过了什么,让我如何实现这一点
AA AA 20170201 20170202
BB BB 20170201 20170202
CC CC 20170201 20170202
DD DD 20170202 20170202
EE EE 20170203 20170203
1条答案
按热度按时间ttcibm8c1#
遵循分区配置单元表的行为,配置单元的架构定义在分区级别进行维护。因此旧分区可能没有收到架构更新。
详细查询
此时,请注意分区表的模式是在分区级别维护的,应该是分区模式而不是表模式。
请注意下面各列的区别。alter没有更改现有分区的列定义。
已经调整了上面的查询,以创建新的分区,这样架构将从表复制到新创建的分区。
希望这是清楚的。!如果要更改所有现有分区的架构,请尝试下面的命令,然后尝试插入。