Impala 查询以获取计数聚合函数中使用的列的样本值
Posted
技术标签:
【中文标题】Impala 查询以获取计数聚合函数中使用的列的样本值【英文标题】:Impala query to get sample value of column used in count aggregate function 【发布时间】:2021-10-16 13:43:24 【问题描述】:我在 hive 表中有大量数据。 PFB 样本行。
表:
Clid,pid,lid
1 ,1 ,OJA
1 ,2 , KLM
1, 2 , MHK
1 ,2, DNY
我想编写 impala 查询来获取每个 clid、pid 组的盖子计数以及样本值。 我知道如何获取计数,但如何获取每个 clid、pid 组的 lid 的样本值。
Select clid, pid, count(lid) frim t group by clid,pid
我应该在 impala 查询中添加什么来获得如下结果所示的示例盖子。
预期结果:
Clid, pid, count, sample lid
1, 1, 1, OJA
1, 2,3,MHK
我尝试过使用带有 over 子句的 first_val 函数,但它给出了错误。
select clid,pid, count (lid), first_value(lid) over (partition by clid, pid) from t group by clid, pid
错误:
AnalysisException:选择列表表达式不是由聚合输出产生的(缺少 GROUP BY 子句?): first_value(lid) OVER (PARTITION BY clid,pid)
【问题讨论】:
您收到什么错误?请在 first_val 函数中包含您的尝试 @ggordon 我在上面的帖子中添加了我的 first_val 查询,但有错误 【参考方案1】:您收到此错误是因为first_value
,窗口函数将为每一行生成一个值,并且不包含在您的 group by 子句中作为分组字段。
由于没有明确的顺序说明如何使用 first_val 函数检索 sample_lid
(即在 over 子句中包含 ORDER BY some_field
),您可以在聚合中使用 MAX 函数来提取 sample_lid
,例如
select clid,pid, COUNT(lid), MAX(lid) as sample_lid
from t
group by clid, pid
如果您确实有兴趣通过某些排序来使用 first_value 函数,您可以修改查询以添加 ORDER BY to the over clause
和/或使用 row_number
根据第一行进行过滤。
让我知道这是否适合你。
【讨论】:
以上是关于Impala 查询以获取计数聚合函数中使用的列的样本值的主要内容,如果未能解决你的问题,请参考以下文章