一、问题描述
踩坑:数仓的分区表,由于需求需要,要把int类型的字段改为bigint,我直接执行的以下语句:
alter table table_name change column 字段 字段 bigint;
出现的问题:之后的分区数据可以正常的显示,历史数据查出来的数据为0,无论insert overwrite重新导数据、把有问题的分区数据删掉都不能正常显示。
尝试了在原来基础上执行:alter table table_name change column 字段 字段 bigint cascade; 也不行
二、问题解决
方法:把修改过类型的表drop掉,然后将hdfs上的分区目录文件删掉。
执行命令: drop table table_name;
hadoop fs -rm -r + hdfs文件路径
最后所有的历史数据重新加载,
Tips:由于我的分区个数少,且历史数据量少,所以我这么做了。
三、最佳问题解决
在我们执行更改字段类型、增加字段时,在语句末尾加上cascade就ok了,要不然很麻烦
alter table table_name change column 字段 字段 bigint cascade;
四、cascade知识
1.cascade的中文翻译为“级联”,也就是不仅变更新分区的表结构(metadata),同时也变更旧分区的表结构。
2.对于删除操作也是,级联删除表中的信息,当表A中的字段引用了表B中的字段时,一旦删除B中该字段的信息,表A的信息也自动删除。(当父表的信息删除,子表的信息也自动删除)
3.标准语法如下: