蜂巢计数和计数明显不正确

时间:2014-02-14 11:27:23

标签: sql hadoop hive

我在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万,所以我怀疑不同的列需要太多的帐户。

那么我该如何解决这个问题,以便获得正确的展示次数?

**额外信息**

hive.vectorized.execution.enabled未定义,因此无效。

TEXT格式的相同查询返回更少的行(约270万)

COUNT(*)的结果:70643229

COUNT(cookieID)的结果:70643229

COUNT(DISTINCT cookieID)的结果:1440195

干杯

1 个答案:

答案 0 :(得分: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;

您如何看待“从sw_test中选择td”的结果

不是

td
01-01-2014  10
03-01-2014  05
07-01-2014  40
05-01-2014  20
05-01-2014  10

BUT

td
01-01-2014
03-01-2014
07-01-2014
05-01-2014
05-01-2014

所以,我认为你的cookie包含一些特殊的列,包括你定义的分隔符。 我希望这可以帮到你。 祝好运!