Hive 分区表变更字段长度不生效

同事使用Alter语句变更了Hive分区表的字段长度,发现历史分区的字段长度没有被改变,查百度,问AI也没问出个所以然,问我是怎么回事。

这让我联想起了之前建表没有定义列分隔符,导入数据之后查询出来都是Null值,查看Hadoop的上存储的数据,发现数据都在,很显然hive根据建表时的定义去拆分数据,没有指定列分隔符hive就懵逼了。基于这个经验,猜想hive会根据存储的元数据去展示不同的分区下的数据。

基于这个猜想准备试验数据,创建日期表test01,只有一个字符串类型的字段,长度为2:

sql 复制代码
DROP TABLE IF EXISTS test01;

--创建表
CREATE TABLE IF NOT EXISTS test01(
  col1      VARCHAR(2)  COMMENT  '列1'
)COMMENT '测试用表'
PARTITIONED BY (BATCH_DATE VARCHAR(10))
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS textfile
;

导入数据:

sql 复制代码
 load data local inpath '/home/tim/test01.csv' into table test01 partition(batch_date='2025-10-08');

hive查询数据如下:

Hadoop文件内容:

可见Hive确实是依据DDL的定义截断并"展示"数据。

接下来使用Alter语句将字段扩增至4位长度并将同样的数据插入下一日分区,并查看数据

sql 复制代码
alter table test01 change col1 col1 varchar(4);

load data local inpath '/home/tim/test01.csv' into table test01 partition(batch_date='2025-10-09');

select * from test01;

到此已经复现了同事遇到的问题,重复上面操作,使用Alter语句将字段扩增至10位长度并将同样的数据插入下一日分区,并查看数据:

可以看到问题依旧。使用下列语句MySQL查询元数据库

sql 复制代码
/*查看分区,列名,类型名*/
select t1.SD_ID ,t1.CD_ID ,t1.LOCATION ,t2.COLUMN_NAME ,t2.TYPE_NAME  from hive.sds t1 join hive.columns_v2 t2 on t1.CD_ID =t2.CD_ID 
where COLUMN_NAME='col1'

可以看到:

分区表的每个分区和表自身都被记录了一个历史长度,hive根据元数据解释(展现)存储的数据,超过长度的就被截断了。

外网回答这个时候需要在Alter语句后面加cascade关键字,才能把分区的元数据一起改了。

sql 复制代码
alter table test01 change col1 col1 varchar(10) cascade;

然而执行了并没有什么用:元数据还是那样。经过实验发现,先扩增到比任何分区都长的精度,然后再调回来即可,可能是个Bug吧

先执行alter table test01 change col1 col1 varchar(200),表级的长度是200了,分区级的还是不变。

再执行alter table test01 change col1 col1 varchar(10) cascade,所有分区的字段长度就都统一了。

相关推荐
心疼你的一切1 小时前
解密CANN仓库:AIGC的算力底座、关键应用与API实战解析
数据仓库·深度学习·aigc·cann
qq_12498707533 小时前
基于Hadoop的信贷风险评估的数据可视化分析与预测系统的设计与实现(源码+论文+部署+安装)
大数据·人工智能·hadoop·分布式·信息可视化·毕业设计·计算机毕业设计
十月南城6 小时前
Hive与离线数仓方法论——分层建模、分区与桶的取舍与查询代价
数据仓库·hive·hadoop
鹏说大数据8 小时前
Spark 和 Hive 的关系与区别
大数据·hive·spark
B站计算机毕业设计超人8 小时前
计算机毕业设计Hadoop+Spark+Hive招聘推荐系统 招聘大数据分析 大数据毕业设计(源码+文档+PPT+ 讲解)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
B站计算机毕业设计超人8 小时前
计算机毕业设计hadoop+spark+hive交通拥堵预测 交通流量预测 智慧城市交通大数据 交通客流量分析(源码+LW文档+PPT+讲解视频)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
AI架构师小马8 小时前
Hive调优手册:从入门到精通的完整指南
数据仓库·hive·hadoop·ai
数据架构师的AI之路8 小时前
深入了解大数据领域Hive的HQL语言特性
大数据·hive·hadoop·ai
Gain_chance9 小时前
33-学习笔记尚硅谷数仓搭建-DWS层交易域用户粒度订单表分析及设计代码
数据库·数据仓库·hive·笔记·学习·datagrip
十月南城11 小时前
Hadoop基础认知——HDFS、YARN、MapReduce在现代体系中的位置与价值
hadoop·hdfs·mapreduce