Hive 配置单元分区-如何删除空分区或配置单元默认分区

Hive 配置单元分区-如何删除空分区或配置单元默认分区,hive,hdfs,hiveql,Hive,Hdfs,Hiveql,我在配置单元中面临配置单元默认分区(空分区)的问题。 我将在这里简要说明情况。。我有一个hive主表,数据摄取每天都发生在该表上。但不知何故,当数据被摄取到配置单元表中时,出现了一些错误,分区显示为_hive_default_partition u,或者在我的理解中,它是空分区 我需要从配置单元表中删除分区。(这是外桌) 我使用的是hive 1.1版和CDH 5.4.8版 我尝试了下面的语法,但它对我不起作用 alter table "tablename" drop partition(part

我在配置单元中面临配置单元默认分区(空分区)的问题。 我将在这里简要说明情况。。我有一个hive主表,数据摄取每天都发生在该表上。但不知何故,当数据被摄取到配置单元表中时,出现了一些错误,分区显示为_hive_default_partition 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');
alter table“tablename”删除分区(partn=''配置单元\默认\分区\);

alter table“tablename”drop partition(partn只需从hdfs中删除目录并运行msck repair table

来自shell:
hadoop fs-rm-r../partn=\uu配置单元\u默认\u分区\uu


从配置单元外壳:
msck repair table\u name;

我的工作方式是更改分区列的数据类型,删除分区并将其更改回来

考虑到您正在将分区与问题中的int进行比较,我假设这是要开始的列数据类型,但是无论您开始的数据类型是什么,这都应该可以工作

--将列类型更改为字符串
ALTER tablename分区列(partn字符串);

——删除有问题的分区
ALTER TABLE tablename DROP PARTITION(partn=''单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元单元;

--将列类型更改回int
ALTER tablename分区列(partn INT);

我通过三个步骤实现了这一点

  • 使用从HDFS中删除分区数据 hadoop fs-rm-r-skipTrash例如
  • hadoop fs-rm-r-skipTrash/apps/hive/warehouse/=\uuuu-hive\u-DEFAULT\uu-PARTITION\uuuu

  • 打开配置单元客户端并运行

    设置hive.msck.path.validation=ignore;

  • 在配置单元客户端中运行此命令

    MSCK修复表。

  • 试试这个:

    alter table `tablename` drop if exists partition (partn<>'');
    
    alter table`tablename`drop(如果存在分区(partn');
    
    这仅在分区列数据类型已经是字符串的情况下有效。是的,你是对的。最近注意到该表是外部的。我相应地调整了答案。好的,MSCK REPAIR会添加分区,但不会删除现有分区。