【发布时间】: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