hive 外部表 内部表 添加新字段忘了加cascade 导致 旧分区的新字段数据为null问题解决
-- 外部表的情况:
--不管有没有加cascade字段,新写的分区数据中都会显示新加字段的值。
--针对于旧分区,如果加了cascade,那么覆写旧分区的数据后,新字段可以直接select出来。
-- 如果不加cascade,覆写旧分区的数据后,新字段仍然是null,
-- 解决办法1:需要对以前的旧分区执行drop分区然后“add分区或者msck repair”后,才可以select出来。(推荐这种)
-- 解决办法2:需要对以前的旧分区执行alter table tb_name partition (dt=...) add columns(new_field string)后,才可以select出来。(不推荐这种,因为,如果添加多个字段且都没有指定cascade,那么必须将所有字段都add columns操作,才能看到正确的数据。如果只添加某一个字段(比如最后一个字段),那么实际select出来后,显示出来的是按照desc table顺序的第一个新字段,这里比较迷惑人。所以还是不如第一种解决办法一步到位)
-- 内部表的情况:
--不管有没有加cascade字段,新写的分区数据中都会显示新加字段的值。
--针对于旧分区,如果加了cascade,那么覆写旧分区的数据后,新字段可以直接select出来。
-- 如果不加cascade,覆写旧分区的数据后,新字段仍然是null,
-- 解决办法:需要对以前的旧分区执行alter table tb_name partition (dt=...) add columns(new_field string)后,才可以select出来。千万不能drop partition,因为是内部表,会直接删除数据的。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步