蜂巢计数和计数不同不正确
Posted
技术标签:
【中文标题】蜂巢计数和计数不同不正确【英文标题】:hive count and count distinct not correct 【发布时间】:2014-02-14 11:27:23 【问题描述】:我在 Hive 中有一个有 20 列的表,我想计算唯一记录和每小时的所有记录。
表格如下:
CREATE EXTERNAL TABLE test1(
log_date string,
advertiser_creatives_id string,
cookieID string,
)
STORED AS ORC
LOCATION "/day1orc"
tblproperties ("orc.compress"="ZLIB");
我的查询是这样的:
SELECT Hour(log_date),
Count(DISTINCT cookieid) AS UNIQUE,
Count(1) AS impressions
FROM test1
GROUP BY Hour(log_date);
但结果不正确。我有大约 7000 万个条目,当我进行总印象数时,我只得到大约 800 万个,所以我怀疑 distinct 占用了太多列。
那么我该如何解决这个问题,以便获得正确的展示次数?
** 额外信息**
hive.vectorized.execution.enabled
未定义,因此未激活。
TEXT 格式的相同查询返回的行数更少(约 270 万)
COUNT(*)
的结果:70643229
COUNT(cookieID)
的结果:70643229
COUNT(DISTINCT cookieID)
的结果:1440195
干杯
【问题讨论】:
Hive 0.11 还是 Hive 0.12 ?是否可以共享重现问题的数据文件? Hive 0.12 和数据不是我要分享的,但所有的总和并没有加起来。 7000 万条记录,但当我算上它时,我只得到 800 万条记录。 你能发布查询的解释吗?您没有启用矢量化 (set hive.vectorized.execution.enabled=true;
),是吗?
另外,你能张贴检查COUNT(*)
和COUNT(cookieID)
。另外,如果可能的话,您能否尝试使用任何其他格式(不是 ORC)的相同数据,并回发差异(如果有)?
在我的帖子中添加了额外的信息 :)
【参考方案1】:
我有一个例子,可能对你有用。我认为你的“行格式分隔字段终止”有一些问题。 我有一个文本,用“\t”分隔,如下所示:
id date value
1 01-01-2014 10
1 03-01-2014 05
1 07-01-2014 40
1 05-01-2014 20
2 05-01-2014 10
但我只创建了一个有 2 列的表,如下所示:
use tmp ;
create table sw_test(id string,td string) row format delimited fields terminated by '\t' ;
LOAD DATA LOCAL INPATH '/home/hadoop/b.txt' INTO TABLE sw_test;
你觉得“select td from sw_test;”的结果如何
不是
td
01-01-2014 10
03-01-2014 05
07-01-2014 40
05-01-2014 20
05-01-2014 10
但是
td
01-01-2014
03-01-2014
07-01-2014
05-01-2014
05-01-2014
所以,我认为你的 cookie 包含一些特殊的列,包括你定义的分隔符。 我希望这可以帮助你。 祝你好运!
【讨论】:
以上是关于蜂巢计数和计数不同不正确的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Mongo Spark 连接器为查询返回不同且不正确的计数?
为啥在使用“.count”返回 Swift 下标计数时收到不正确的数组计数?