问题描述
我有一个视图,它使用 max 来显示最新的分区(格式为 2021-01
、2021-02
、2021-03
、2021-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