Hive 从配置单元外部表和HDFS目录中删除null或_配置单元u默认分区_uu

Hive 从配置单元外部表和HDFS目录中删除null或_配置单元u默认分区_uu,hive,hiveql,external-tables,bigdata,Hive,Hiveql,External Tables,Bigdata,我正在尝试从配置单元外部表和HDFS目录中删除配置单元中的空分区/配置单元默认分区,但无法将其删除。。我已经到过一些其他的帖子,关于同一个问题,我尝试了这些,即使它没有显示任何错误,分区没有被删除 处理日期=20160208 进程\u日期=\uuuu配置单元\u默认分区\uuuu 这些是我表中的分区。我只想删除配置单元的默认分区。(这是外部表,因此我也需要从HDFS中删除该表) 我试过这个 如果存在分区,则更改表格名称(进程\u日期=“”\u配置单元\u默认\u分区) 我正在犯错误 错误:编译语

我正在尝试从配置单元外部表和HDFS目录中删除配置单元中的空分区/配置单元默认分区,但无法将其删除。。我已经到过一些其他的帖子,关于同一个问题,我尝试了这些,即使它没有显示任何错误,分区没有被删除

处理日期=20160208
进程\u日期=\uuuu配置单元\u默认分区\uuuu

这些是我表中的分区。我只想删除配置单元的默认分区。(这是外部表,因此我也需要从HDFS中删除该表)

我试过这个

如果存在分区,则更改表格名称(进程\u日期=“”\u配置单元\u默认\u分区)

我正在犯错误

错误:编译语句时出错:失败:SemanticException意外的未知分区(process_date=null)(state=42000,code=40000)

我试过下面的方法


ALTER TABLE\u name DROP PARTITION(process\u date这个答案是为了帮助可能面临相同/类似问题的其他人

当您遇到错误时,下面的查询应该会有所帮助-SemanticException意外的未知分区(part_column=null)

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

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

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

然后此语法将起作用:

ALTER TABLE Table_Name DROP IF EXISTS PARTITION(process_date='__HIVE_DEFAULT_PARTITION__')
然后将分区列的类型改回原来的类型

然后 看


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