Impala:获取匹配分区的列表

时间:2020-04-23 12:19:07

标签: cloudera impala

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

现在,例如如果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工具,不允许对上述逻辑进行编程。

1 个答案:

答案 0 :(得分:1)

所以解决方案是-
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)

基本上,将年和月连接成一个字符串,然后将其转换为整数以在函数之间使用。这将适用于任何日期到任何日期范围的日期。由于您按月和年进行了分区,因此此过滤器将按照分区进行工作,并且效果很好。