Impala:获取匹配分区列表
Impala: Get the list of matching partitions
我们有一个 impala table 被划分为 year=yyyy/month=mm/day=dd/hour=hh
。其中一个客户端应用程序可以使用 from
和 to
日期 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)
基本上,将年和月连接起来形成一个字符串,然后将其转换为整数以在函数之间使用。这适用于任何日期到任何日期范围。由于您对月份和年份进行了分区,因此此过滤器将跟随分区并正常工作。
我们有一个 impala table 被划分为 year=yyyy/month=mm/day=dd/hour=hh
。其中一个客户端应用程序可以使用 from
和 to
日期 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)
基本上,将年和月连接起来形成一个字符串,然后将其转换为整数以在函数之间使用。这适用于任何日期到任何日期范围。由于您对月份和年份进行了分区,因此此过滤器将跟随分区并正常工作。