【问题标题】:Getting wrong result using group by and distinct in hive在 hive 中使用 group by 和 distinct 得到错误的结果
【发布时间】: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 这样的草图算法才能对不同计数求和,以便快速逼近大数据上的不同计数。
  • 你是对的,你能建议我一种方法吗?
  • 不清楚你在做什么。计数不同不是加法 - 把它当作一个公理。如果您想获得准确的结果以及一些聚合,请在最后一个聚合中计算不同的值。为了帮助您,我需要了解详细信息:描述所有场景,您想要和查询的确切结果,为什么要汇总不同的计数,也许可以重写。

标签: sql hive bigdata hiveql


【解决方案1】:

首先,Hive 确实支持子查询。

其次,由于1.1,您的数据有五个不同的值。但是,我怀疑. 是 Stack Overflow 的一个函数。

可能正在发生的事情是值 看起来 好像它们是相同的。但如果它们是字符串,它们可能有隐藏的字符——甚至是空格——使它们不同。

找到那些隐藏的字符很棘手。如果第一列只有数字,您可能希望将其表示为数字或整数。

【讨论】:

  • 我已经更新了我的问题,你能看一下吗?
猜你喜欢
  • 2021-03-19
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多