Impala - 在多个日期上运行相同的查询

Posted

技术标签:

【中文标题】Impala - 在多个日期上运行相同的查询【英文标题】:Impala - Running Same Query Over Multiple Dates 【发布时间】:2020-03-20 22:27:45 【问题描述】:

我有下面的 Impala 查询,它设置为计算数据集中某一天而不是前一天的设备数量。我想在多个日期(过去一年中的每一天)运行此查询。

在 Impala 中有没有办法做到这一点?我知道没有循环功能,但不确定是否有某种方法可以将日期数组传递给变量,以便查询在连续日期上运行。谢谢!

SELECT COUNT(DISTINCT devices) 
FROM request
WHERE devices NOT IN (
    SELECT devices
    FROM request
    WHERE forwarded_dt =  CAST((CAST('2020-03-17' as timestamp)) as BIGINT)*1000
    )  
AND forwarded_dt =  CAST((CAST('2020-03-18' as timestamp)) as BIGINT)*1000;

【问题讨论】:

【参考方案1】:

您可以使用lag()。我认为:

select day,
       count(*) as num_devices_on_day,
       sum(case when prev_day = day - interval '1' day then 0 else 1 end) as new_devices_on_day
from (select device, date_trunc('day', timestamp) as day,
             lag(date_trunc('day', timestamp)) over (order by min(timestamp)) as prev_day
      from requests
     ) r
group by day;

【讨论】:

以上是关于Impala - 在多个日期上运行相同的查询的主要内容,如果未能解决你的问题,请参考以下文章

在 Impala 中将 YYYYMMDD 字符串转换为日期

Impala 查询结果中的数值变化

如何在 Hadoop 上运行的 Cloudera Impala 的 python impyla 查询中转义字符

Impala 通过 JDBC 流式传输真的很慢

以可使用 Impala 查询的方式在包含复杂类型的配置单元表上创建日期限制视图?

是否可以/支持使用 Java 进行 Impala 查询?