HIVE/Impala 查询:计算满足特定条件的行之间的行数
Posted
技术标签:
【中文标题】HIVE/Impala 查询:计算满足特定条件的行之间的行数【英文标题】:HIVE/Impala query: Count the number of rows between rows fulfilling certain conditions 【发布时间】:2017-11-13 10:41:06 【问题描述】:我需要计算满足某些条件的行数,这些条件包含在满足其他条件的其他行定义的间隔中。示例:满足条件 'Other_condition' = b 且具有值 1 和 4 的 'Reference' 之间的行数 N 为 N=1,具有值 2 和 5 且满足条件 'Other_condition 的'Reference' 之间的行数 N ' = b 是 N=2 等等。
Date Reference Other_condition
20171111 1 a
20171112 2 a
20171113 3 b
20171114 4 b
20171115 5 b
我正在通过 Hive/Impala SQL 查询访问数据库,不幸的是我不知道从哪里开始实现这样的窗口函数。我想要的半伪代码版本是这样的:
SELECT COUNT (DISTINCT database.Date) AS counter, Other_condition, reference
FROM database
WHERE database.Other_condition = a AND database.Reference BETWEEN
(window function condition 1: database.Reference = 2) AND
(window function condition 2: database.Reference = 5)
GROUP BY counter
【问题讨论】:
你能发布这两个查询的预期输出吗?尤其是我不明白the condition 'Other_condition' = b is one
的部分
@RadimBača 我已经编辑了这个问题,希望现在更清楚一点。一位同事向我展示了如何解决问题,但我需要一些时间才能理解代码,然后才能在这里提供明确的答案。
所以您正在寻找每个组满足条件的组数,即您在参考列中有一个 b
值行介于 1 和 4 之间?
@RadimBača 准确地说。
【参考方案1】:
您的问题很难理解。我得到第一个条件,即“1”和“4”之间的行数。
这是一种很容易概括的方法:
select (max(case when reference = 4 then seqnum end) -
max(case when reference = 1 then seqnum end)
) as num_rows_1_4
from (select t.*,
row_number() over (order by date) as seqnum
from t
) t;
【讨论】:
以上是关于HIVE/Impala 查询:计算满足特定条件的行之间的行数的主要内容,如果未能解决你的问题,请参考以下文章