在 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?

SQL (Hive):在使用 GROUP BY 进行聚合时使用窗口函数

Hive之GROUP BY详解

为啥在 hive 中执行 group by 时出现错误?