【问题标题】:deleting null or __HIVE_DEFAULT_PARTITION__ in from hive external table and also from HDFS directory从 hive 外部表和 HDFS 目录中删除 null 或 __HIVE_DEFAULT_PARTITION__
【发布时间】:2023-03-09 09:08:01
【问题描述】:

我正在尝试从 hive 外部表和 HDFS 目录中删除 null/HIVE_DEFAULT_PARTITION,但我无法删除它.. 我去过一些关于同一问题的其他帖子,我尝试了那些即使它没有显示任何错误分区没有被删除。

process_date=20160208
process_date=__HIVE_DEFAULT_PARTITION__

这些是我现在表中的分区。我只想删除配置单元默认分区。 (这是外部表,所以我也需要从 HDFS 中删除它)

我试过了

ALTER TABLE Table_Name DROP IF EXISTS PARTITION(process_date='__HIVE_DEFAULT_PARTITION__');

我遇到了错误

错误:编译语句时出错:FAILED: SemanticException Unexpected unknown partitions for (process_date = null) (state=42000,code=40000)

我试过下面的

ALTER TABLE table_name DROP PARTITION(process_date

没有错误,但配置单元默认分区仍然存在。

请帮我解决这个问题。

【问题讨论】:

  • 您可以尝试使用 hadoop fs -rm 直接删除 hdfs 文件夹,然后在 hive 中使用 msck 修复表刷新 Metastore。
  • 我同意它是这样工作的,但问题仍然是如果我想自动化该过程我应该怎么做?实时当我运行 ETL 负载并且出现故障并且我需要删除分区时,那么最好的方法是什么?
  • 在生产场景中。当您的数据具有分区值 NULL 时,默认配置单元分区或 NULL 出现,我认为这是不需要的。
  • 在某些情况下,即使存在某些分区,我也会得到分区值 null。出现问题是因为使用数据加载到使用 ETL 工具(如 informatica)的配置单元表中。所以如果发生某些事情,那么我会遇到这个问题。为了刷新视图,我只使用最新的分区。所以在这种情况下,当我获得配置单元默认分区时,我无法刷新视图,因为它指向最新的分区。我必须删除它........我现在检查了HDFS路径,配置单元默认分区没有显示在那里..我可以在HSFS路径中看到的另一个分区..
  • 如果你有空数据作为分区值,那么唯一的方法就是从 hdfs 本身中删除它。Hive 有时无法识别空分区。

标签: hive hiveql external-tables bigdata


【解决方案1】:

这样做的方法是将分区列的类型更改为字符串,

那么这个语法就会起作用:

ALTER TABLE Table_Name DROP IF EXISTS PARTITION(process_date='__HIVE_DEFAULT_PARTITION__')

然后将分区列的类型改回原来的类型。

然后 见

https://www.ericlin.me/2015/07/how-to-drop-hives-default-partition-hive_default_partition-with-int-partition-column/

【讨论】:

    【解决方案2】:

    这个答案是为了帮助其他可能面临相同/类似问题的人。

    当您遇到错误时,以下查询应该会有所帮助 - SemanticException Unexpected unknown partitions for (part_column = null)

    使用 '!='(不等于)并给出支持的值

    ALTER TABLE <table_name> DROP IF EXISTS PARTITION(report_year!='2018');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 2020-06-30
      相关资源
      最近更新 更多