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

本文介绍Hive中正确增加分区字段的方法,解决旧分区字段无法更新的问题,并演示如何创建和修改自带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
Hive新增字段有以下几种情况及对应的方法: ### 普通新增字段 官方给出的普通新增字段的语法结构如下: ```sql ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) [CASCADE|RESTRICT] ``` 其中,`table_name` 是要操作的名;`ADD` 示添加新列,`REPLACE` 示替换现有列;`col_name` 是新增列的名称,`data_type` 是列的数据类型,`COMMENT col_comment` 是可选的列注释;`CASCADE|RESTRICT` 是可选参数,`RESTRICT` 是默认值,即不修改元数据,`CASCADE` 修改,会同时修改历史分区的字段信息(对于分区有意义) [^1]。 ### 分区新增字段 #### 新增字段后重跑历史数据新增字段值为Null的问题解决方法 如果在Hive分区新增字段后重跑历史数据,新增字段值为Null,原因是在添加字段时只更新了结构元数据信息,而分区结构元数据信息未进行更新,导致新增字段没有写进去。解决方法是添加 `CASCADE` 关键字,它能在修改字段的同时修改历史分区的字段信息。示例如下: ```sql alter table my_table add columns(new_column string) CASCADE; ``` #### 新增字段并指定位置 对于Hive分区新增字段并指定位置,新增字段的语法为: ```sql ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], ...) [CASCADE|RESTRICT]; ``` 例如,要增加一列并指定增加到原始的两列中间,先添加一列时必须添加 `cascade` 关键字,不然不会刷新旧分区数据,关键字 `cascade` 能修改元数据,示例如下: ```sql alter table sqltest.table_add_column_test add columns (added_column string comment '新添加的列') cascade; ``` [^2][^3][^4]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值