1、往hive分区表插入分区的值为中文,hive中显示乱码,在解决该问题前,需删除新增分区及数据。
2、尝试删除分区
1)尝试一:清空表数据,insert overwrite table t_tomorrow select * from t_tomorrow where 1=0;不适用分区表,提示命令不对。
2)尝试二:直接删分区,alter table t_tomorrow drop partition(nation='汉族');分区??仍存在。
3)尝试三:先进hdfs删除分区目录及数据内容,此时hive查询不到分区数据内容,但show partition t_tomorrow;仍有分区??信息;再进hive元数据库,查找分区??相关表信息,删除相关记录,最后进hive查看分区,再无分区??信息。参考https://blog.csdn.net/fg654748861/article/details/46123887
3、删除hdfs分区及内容
1)hadoop fs -rm -R /apps/hive/warehouse/t_tomorrow/nation=汉族
2)hadoop fs -ls -R /apps/hive/warehouse/t_tomorrow
3)select *from t_tomorrow;--查不到分区汉族的数据;
4)show partitions t_tomorrow; --分区仍在,进hive元数据库删除;
4、元数据库删除分区信息步骤
1)SELECT * FROM TBLS WHERE TBL_NAME='t_tomorrow'; --得到tbl_id字段值为3
2)select * from PARTITIONS t where t.tbl_id=3; --得到乱码分区对应part_id字段值为4
3)select * from PARTITION_KEY_VALS where part_id=4; --得到分区??信息
4)select * from PARTITION_PARAMS where part_id=4; --得到分区??参数信息
5)删除表PARTITION_KEY_VALS、PARTITION_PARAMS、PARTITIONS包含分区??信息,进hive查看表的分区??不显示。
delete from PARTITION_KEY_VALS where part_id=4;
delete from PARTITION_PARAMS where part_id=4;
delete from PARTITIONS where tbl_id=3 and part_id=4;