Hive分区表表结构发生变动可能带来的问题?

2021-04-22 15:46:20 浏览数 (1)

  首先,由于业务场景的需求调整可能会需要修改一些已经存在的表结构,比如增加字段、修改字段类型等,所以可能会有一些隐藏因素导致后续查询和插入数据报错;

原始数据表结构

代码语言:javascript复制
create external table ordercount
(
	channel string,
	platform string,
	whetherornotbuy int,
	headcount int,
	order_count int,
	order_time string
)
partitioned by (dt string comment '分区')
ROW FORMAT SERDE
	'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
	'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
	'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
location 
	'hdfs://path/ordercount';
代码语言:javascript复制
alter table ordercount change cloumns order_count order_count string cascade

  后期由于业务需求变更需要将表结构进行变更,此时如果为空表可以直接删除该表,清除HDFS相应数据,并重新创建,避免各种未知问题;如果该表已经存有数据,则需要使用cascade指令强制新的分区元数据和旧的分区元数据保持一致,具体查看cascade的使用,否则会导致后续查数据或者插数据出现问题;

  还有可能遇到的问题的业务场景是:直接用hadoop命令复制删除hive存储数据后,需要add partition或alter来同步源数据信息,否则drop表等操作时会查询元数据metastore,查到metastore信息和hdfs信息不一致,会报错。这个也可算是hive的bug,尚未修复,但也可以理解为初衷不建议直接操作hdfs数据。,具体解决方案查看使用MSCK命令修复Hive表分区;

0 人点赞