首先,由于业务场景的需求调整可能会需要修改一些已经存在的表结构,比如增加字段、修改字段类型等,所以可能会有一些隐藏因素导致后续查询和插入数据报错;
原始数据表结构
代码语言: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表分区;