我在配置单元中遇到了配置单元默认分区(空分区)的问题。我将在这里简要说明情况。。我有一个Hive主表和数据摄取发生在该表每天。但不知何故,当数据被摄取到配置单元表中时,出现了一些问题,分区显示为\u配置单元\u默认\u分区\u或在我的理解中是空分区。
我需要从配置单元表中删除分区(它是外部表)。。。
我正在使用hive版本1.1和cdh版本5.4.8。。
我尝试了下面的语法,但它对我不起作用。。
alter table "tablename" drop partition(partn='_hive_default_partition_);
alter table "tablename" drop partition(partn<'1');
alter table "tablename" drop partition(partn = 1);
alter table "tablename" drop partition(partn='0');
我试了以上所有的步骤,但都没用。。
希望有人能帮我。
提前谢谢,
4条答案
按热度按时间wkyowqbh1#
我分三步实现了这一点
使用hadoopfs-rm-r-skiptrash从hdfs中删除分区数据。
hadoop fs -rm -r -skipTrash /apps/hive/warehouse/<db-name>/<table-name>/<partition-name>=__HIVE_DEFAULT_PARTITION__
打开配置单元客户端并运行set hive.msck.path.validation=ignore;
在配置单元客户端中运行此MSCK REPAIR TABLE <db-name>.<table-name>;
ubbxdtey2#
只需从hdfs中删除目录并运行msck repair table。
来自壳牌:
hadoop fs -rm -r ..../partn=__HIVE_DEFAULT_PARTITION__
从Hive壳:msck repair table table_name;
vyswwuz23#
我的工作方式是更改分区列的数据类型,删除分区并将其更改回来。
考虑到您正在将分区与问题中的int进行比较,我假设这是要开始的列数据类型,但是不管您开始的数据类型是什么,这都应该是有效的。
-- Change the column type to string ALTER TABLE tablename PARTITION COLUMN (partn STRING);
-- Drop the offending partitions ALTER TABLE tablename DROP PARTITION (partn='HIVE_DEFAULT_PARTITION');-- Change the column type back to int ALTER TABLE tablename PARTITION COLUMN (partn INT);
gmxoilav4#
试试这个: