我们有一个以year=yyyy/month=mm/day=dd/hour=hh
分区的impala表。客户端应用程序之一可以使用select
格式的from
和to
日期向其发送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工具,不允许对上述逻辑进行编程。
答案 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)
基本上,将年和月连接成一个字符串,然后将其转换为整数以在函数之间使用。这将适用于任何日期到任何日期范围的日期。由于您按月和年进行了分区,因此此过滤器将按照分区进行工作,并且效果很好。