如何使 hive 查询中的 max 函数忽略 _HIVE_DEFAULT_PARTITION__

问题描述

我有一个视图,它使用 max 来显示最新的分区(格式为 2021-012021-022021-032021-04)。 hive 表也有 _HIVE_DEFAULT_PARTITION__

当我们在 Impala 中运行查询时,max on partitions 给出了正确的 2021-04 值,忽略 _HIVE_DEFAULT_PARTITION__ 但是当我们在 Hive 中运行查询时同样不起作用,因为它返回 {{1} }

有没有办法让 Hive 查询忽略认分区(如果存在),同时在该列上返回最大值?

解决方法

你可以过滤它:

select max(partition_col) from your_table where partition_col != "__HIVE_DEFAULT_PARTITION__"

如果您不需要 __HIVE_DEFAULT_PARTITION__ 中的数据,可以将其删除:

ALTER TABLE your_table  DROP PARTITION (partition_col='__HIVE_DEFAULT_PARTITION__');

__HIVE_DEFAULT_PARTITION__ 转换为 NULL 可以是一个解决方案,如果您想使用 max(partition_col) 聚合其他内容并且不想排除 __HIVE_DEFAULT_PARTITION__ 分区:

select max(case when partition_col = "__HIVE_DEFAULT_PARTITION__" then NULL else partition_col end) as max_partition_col,--aggregate something else including HIVE_DEFAULT_PARTITION
  from your_table