在 hive 中使用 group by 和 distinct 得到错误的结果
Posted
技术标签:
【中文标题】在 hive 中使用 group by 和 distinct 得到错误的结果【英文标题】:Getting wrong result using group by and distinct in hive 【发布时间】:2021-03-23 17:43:12 【问题描述】:我正在创建一个聚合表,例如
create table1 as select
country ,
type_of_order,
count(distinct order_no) as total_orders
from table2
group by country , type_of_order;
现在当我获取查询时
select sum(total_orders) from table1 group by country;
我得到了不同的 total_orders 结果,但是当我创建聚合表而不放置 type_of_order 维度时,我得到了不同的结果。 我需要匹配我的数据集
我相信 groupby 正在创建组,并且我的数据在组的基础上变得不同。我需要维护 group by 子句
谁能帮我用不同的方式在蜂巢中做同样的事情
注意:-HIVE 不支持子查询
【问题讨论】:
但它实际上是 5 个不同的值:1.(单点)和 1-4。聚合后也应该有两行,因为你有两种不同的类型,你说的是输出中的单行??? 如果您要汇总与两行不同的计数,那么这是错误的。因为不同的计数不是累加的。 您不能只将两个计数相加。不可能的。只有像 HyperLogLog 这样的草图算法才能对不同计数求和,以便快速逼近大数据上的不同计数。 你是对的,你能建议我一种方法吗? 不清楚你在做什么。计数不同不是加法 - 把它当作一个公理。如果您想获得准确的结果以及一些聚合,请在最后一个聚合中计算不同的值。为了帮助您,我需要了解详细信息:描述所有场景,您想要和查询的确切结果,为什么要汇总不同的计数,也许可以重写。 【参考方案1】:首先,Hive 确实支持子查询。
其次,由于1.
和1
,您的数据有五个不同的值。但是,我怀疑.
是 Stack Overflow 的一个函数。
可能正在发生的事情是值 看起来 好像它们是相同的。但如果它们是字符串,它们可能有隐藏的字符——甚至是空格——使它们不同。
找到那些隐藏的字符很棘手。如果第一列只有数字,您可能希望将其表示为数字或整数。
【讨论】:
我已经更新了我的问题,你能看一下吗?以上是关于在 hive 中使用 group by 和 distinct 得到错误的结果的主要内容,如果未能解决你的问题,请参考以下文章
hive distribute by 和group by 的区别
如何使用 group by(基于一列)从表中选择多列,在 hive 查询中具有和计数
Hive Query:如何使用 group by 和 rank?