2014-02-14 61 views
0

我有一個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是不確定的,所以它不是活躍。

文本格式的同一查詢返回更少的行(約合270萬美元)

結果 COUNT(*)

:70643229結果COUNT(cookieID)

:70643229結果的

COUNT(DISTINCT cookieID):1440195

歡呼聲

+0

Hive 0.11或Hive 0.12?是否有可能共享一個數據文件來解決問題? –

+0

蜂巢0.12和數據不是我的分享,但它的總和不加起來。 7000萬條記錄,但是當我計算它時,我只得到800萬。 – darkownage

+0

你可以爲查詢發佈EXPLAIN嗎?你沒有任何機會啓用向量化('set hive.vectorized.execution.enabled = true;'),是嗎? –

回答

1

我有一個例子,可能對你有用。我想喲u「由格式分隔的字段終止」有一些問題。 我有一個文本,用「\ 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 

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

所以,我覺得你cookie包含一些特殊的列包括您定義的分隔符。 我希望這可以幫助你。 祝你好運!