在现有分区上有数据的hive表新增字段,一定要加上cascade,
不加上cascade的话,已经有旧的分区的字段将为空且无法更新,即便insert overwrite该分区也不会生效。如果只要新分区有新字段数据内容也可以不加cascade,
因为加cascade取决于历史分区的数量,会很久,需衡量。
添加表字段
alter table 'table_name' add columns ('filed_name_1' string) cascade ;
更改字段顺序
alter table 'table_name' add columns ('filed_name_1' string comment 'desc') cascade; 添加在最后
alter table 'table_name' change 'filed_name_1' 'filed_name_1' string after 'filed_name_0' ; 移动到指定位置,filed_name_0 字段的后面
如果已经使用了错误的语句,
0.ALTER TABLE table_name drop IF EXISTS PARTITION (日期分区字段>="2024-01-01") ; 删除一段时间分区,然后重新统计
1.如果数据表数量较小,采用了重建表的做法。
2.创建一个包含必需列的新表。从旧表插入新表。将旧表重命名为其他表。将新表重命名为旧表。
3.替换字段的方法(replace column,column....)
REPLACE COLUMNS 删除所有现有的字段列表并替换为新的字段列表。
这只能用于具有本地的序列化 SerDe(DynamicSerDe、MetadataTypedColumnsetSerDe、LazySimpleSerDe 和 ColumnarSerDe)的表。
表操作请多加留意,如重要表请先备份,记录执行语句与操作日志。
参考链接:
Hive新增字段(column)后,旧分区无法更新数据问题
https://zhuanlan.zhihu.com/p/111212450
hive-replace orc表中的列
https://www.saoniuhuo.com/question/detail-1941907.html
HIVE 增加修改删除字段
https://blog.csdn.net/hell_oword/article/details/123600004
hive的serde解析与应用
https://www.jianshu.com/p/afee9acba686
HiveQL DDL—表
https://blog.csdn.net/CPP_MAYIBO/article/details/102055562
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。