HIVE实战处理(七) hive 新增字段 联级(cascade)和json格式的hive表

一、问题描述:
实际应用中,常常存在修改数据表结构的需求,比如:增加一个新字段。
如果使用一般的add columns(col1 string)的语句增加字段的话,对于旧分区中的col1将为空且无法更新,即便insert overwrite该分区也不会生效。

1、准备一个分区表test_partition
在这里插入图片描述

2、测试数据新增字段

alter table temp.test_partition add columns (hour string);

在这里插入图片描述
3、插入数据
在这里插入图片描述
插入失败,所以原来的插入方式对以前分分区是不生效的,这个在生产中刷数据是没有意义的。

4、Hive的联级(cascade)正确的增加分区方式。

alter table temp.test_partition add columns(
hour    string
) cascade;

字段已经添加成功。
在这里插入图片描述
新增加的字段hour1以及之前的没有级联的字段hour的数据也能一并插入成功
在这里插入图片描述
二、创建自带解析json格式的hive表
1、创建json格式解析的hive表

create table temp.tmp_hxr_test_json_ex 
(udid string)
row format serde 'org.openx.data.jsonserde.JsonSerDe'
stored as textfile;

查询表结构:
在这里插入图片描述
准备样例数据:
在这里插入图片描述
加载数据到hive表
在这里插入图片描述
查询对应的hive表数据,确认数据加载成功。
在这里插入图片描述

2、修改表的序列化方式
注意:如果是这种第三方的序列化的方式的表,需要更新表结构的话,需要先变更serde方式为原始自带的方式。

alter table temp.tmp_hxr_test_json_ex 
 SET FILEFORMAT INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe';

3、 添加新的column

alter table temp.tmp_hxr_test_json_ex
add columns(
visit_time  string
);
 

4、本来想保留原始自带的serde方式进行查询,这样的话就不用来回更新SERDE了。但是实际查询数据有异常。

执行完上面2段命令后查询表结构,新增字段已经更新,但是查询数据还是会有错位失败。
在这里插入图片描述

5、重新修改回原来的serde方式,再查询数据,数据完美呈现。

alter table temp.tmp_hxr_test_json_ex
 SET FILEFORMAT INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
SERDE 'org.openx.data.jsonserde.JsonSerDe';

在这里插入图片描述

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Hive中,如果要修改历史分区的字段名,可以使用ALTER TABLE语句结合CASCADE选项来实现。默认情况下,新增字段时,只会修改元数据,不会对历史分区生效。为了对历史分区生效,需要增加CASCADE选项。这样只会对历史分区的字段名进行修改,而对新建分区没有影响。具体操作可以参考以下示例: ``` ALTER TABLE table_name REPLACE COLUMNS (col_name data_type \[COMMENT col_comment\], ...) CASCADE; ``` 其中,table_name是要修改的名,col_name是要修改的字段名,data_type是字段的数据类型,col_comment是字段的注释。通过使用CASCADE选项,可以确保修改字段名对历史分区生效。\[1\] 另外,如果只是修改字段名或注释,也可以使用ALTER TABLE语句结合CHANGE关键字来实现。例如,将table1的字段useid修改为user,可以使用以下语句: ``` ALTER TABLE table1 CHANGE useid user string COMMENT '用户ID'; ``` 这样就将字段名修改为user,并添加了注释。\[2\] 总结起来,要在Hive中修改历史分区的字段名,可以使用ALTER TABLE语句结合CASCADE选项,或者使用ALTER TABLE语句结合CHANGE关键字。具体选择哪种方式取决于具体的需求。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [HIVE 增加修改删除字段](https://blog.csdn.net/m0_67266585/article/details/125176774)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [hive常见的对操作语句-修改/字段名、增字段、删分区、复制等](https://blog.csdn.net/weixin_43631296/article/details/112794457)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值