Hive分区 - 如何删除null或hive_default_partition

时间:2016-03-01 19:43:05

标签: hive hdfs hiveql

我在hive中遇到hive默认分区(空分区)的问题。 我将在这里简要解释一下情况。我有一个配置单元主表,每天都会在该表中发生数据摄取。但不知何故,当数据被摄入到hive表中时出现问题并且分区显示_hive_default_partition_或者在我的理解中它是空分区。

我需要从hive表中删除分区。 (这是外部表)......

我正在使用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 个答案:

答案 0 :(得分:4)

对我有用的方法是更改​​分区列的数据类型,删除分区并将其更改回来。

考虑到您正在将分区与问题中的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);

答案 1 :(得分:0)

只需从hdfs中删除目录并运行msck修复表。

来自shell:hadoop fs -rm -r ..../partn=__HIVE_DEFAULT_PARTITION__

来自hive shell:msck repair table table_name;

答案 2 :(得分:0)

我分三步实现了

  1. 使用以下命令从HDFS中删除分区数据 hadoop fs -rm -r -skipTrash例如。

hadoop fs -rm -r -skipTrash /apps/hive/warehouse/<db-name>/<table-name>/<partition-name>=__HIVE_DEFAULT_PARTITION__

  1. 打开hive客户端并运行

    set hive.msck.path.validation=ignore;

  2. 在配置单元客户端中运行

    MSCK REPAIR TABLE <db-name>.<table-name>;

答案 3 :(得分:0)

尝试一下:

alter table `tablename` drop if exists partition (partn<>'');