Impala:获取匹配分区列表

Impala: Get the list of matching partitions

我们有一个 impala table 被划分为 year=yyyy/month=mm/day=dd/hour=hh。其中一个客户端应用程序可以使用 fromto 日期 dd/mm/yyyy 格式向其发送 select 查询。

现在,例如。如果 from 日期设置为 01/11/2019 并且 to 日期设置为 29/02/2020,为了使用分区,imapla SQL 应该是喜欢:

select * from table where (year = 2019 AND month in (11, 12)) OR (year = 2020 AND month in (1,2))

impala SQL 中有没有办法将日期转换为上面的正确分区?

不幸的是,有问题的客户端是不允许对上述逻辑进行编程的 BI 工具。

所以,解决方案是 -
WHERE CAST( concat (CAST(table_year AS string), CAST(table_month AS string)) AS BIGINT) BETWEEN CAST( concat (CAST(YEAR(from_dt) AS string), CAST(MONTH(from_dt) AS string)) AS BIGINT) AND CAST( concat (CAST(YEAR(to_dt) AS string), CAST(MONTH(to_dt) AS string)) AS BIGINT)

基本上,将年和月连接起来形成一个字符串,然后将其转换为整数以在函数之间使用。这适用于任何日期到任何日期范围。由于您对月份和年份进行了分区,因此此过滤器将跟随分区并正常工作。