如何摆脱 Hive/Impala 中的重复计数
Posted
技术标签:
【中文标题】如何摆脱 Hive/Impala 中的重复计数【英文标题】:How to Get Rid of Duplicate Counts in Hive/Impala 【发布时间】:2021-03-02 19:02:12 【问题描述】:我正在尝试计算 Impala/Hive 中三个表的特定列的总值,但我似乎只能获得每个表的总值。例如,我收到的是每张桌子的波兰计数,而不是所有三张桌子组合的波兰计数。我曾尝试将这些表合并在一起,但没有成功。下面列出的是我使用的编码。
SELECT table1.country, COUNT(*)
FROM table1
GROUP BY table1.country
UNION
SELECT table2.country, COUNT(*)
FROM table2
GROUP BY table2.country
UNION
SELECT table3.country, COUNT(*)
FROM table3
GROUP BY table3.country
ORDER BY COUNT(country) DESC;
【问题讨论】:
【参考方案1】:使用UNION ALL
代替UNION
:
SELECT table1.country, COUNT(*)
FROM table1
GROUP BY table1.country
UNION ALL
SELECT table2.country, COUNT(*)
FROM table2
GROUP BY table2.country
UNION ALL
SELECT table3.country, COUNT(*)
FROM table3
GROUP BY table3.country
ORDER BY COUNT(country) DESC;
UNION
删除重复项,因此如果两个表在一个国家/地区的计数相同,则删除重复项。
编辑:
如果您希望每个国家/地区有一行,请使用子查询并重新聚合:
SELECT country, SUM(cnt)
FROM (SELECT table1.country, COUNT(*) as cnt
FROM table1
GROUP BY table1.country
UNION ALL
SELECT table2.country, COUNT(*)
FROM table2
GROUP BY table2.country
UNION ALL
SELECT table3.country, COUNT(*)
FROM table3
GROUP BY table3.country
) t
GROUP BY country;
【讨论】:
不幸的是,我收到了同样的结果。 @KarlYujeck 。 . .如果波兰不在所有表格中,也会发生这种情况。 我遇到的最大问题是重复计数。我需要帮助删除重复项。 它通常更透明地优化到UNION ALL
所有表然后在所有数据集上执行COUNT
而不是总结单个计数(如我所见,例如,对于 Oracle 和 Postgres,但不能讲述黑斑羚)
@astentx 。 . .实际上,在大多数数据库中,我认为这不是真的,原因有两个。首先,对较小数据的多次聚合可能比对较大数据的一次聚合更快(由于聚合算法的 O(n log n) 特性)。其次,个人分组更有可能使用索引(这对 Hive 来说不是问题)。 Oracle 有一个非常聪明的优化器,所以它可以在那里工作。但我一般不会说 union all
后跟聚合会有更好的性能。以上是关于如何摆脱 Hive/Impala 中的重复计数的主要内容,如果未能解决你的问题,请参考以下文章
使用python如何摆脱从网站上抓取的文本中的尾随空格[重复]
我该如何摆脱 - 警告:列表中的每个孩子都应该有一个唯一的“关键”道具[重复]