我在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
干杯
答案 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包含一些特殊的列,包括你定义的分隔符。 我希望这可以帮到你。 祝好运!