2014-02-14 2 views
0

하이브에 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); 

그러나 결과가 올바르지 않습니다. 나는 약 7 천만 개의 항목을 가지고 있습니다. 노출 수의 합계를 계산할 때만 8 백만이됩니다. 그래서 고유 한 항목이 너무 많은 열을 차지한다고 생각합니다.

그래서 어떻게 수정하여 정확한 노출 수를 얻을 수 있습니까? 가 활성화되지 않도록

** 추가 정보는 **

hive.vectorized.execution.enabled가 정의되어 있지 않습니다. COUNT(DISTINCT cookieID) 70643229

결과의 : 70,643,229

결과 COUNT(cookieID)의 : 1,440,195

TEXT 형식의 동일한 쿼리 (약 270 만)

결과 COUNT(*)의 더 적은 행을 반환 건배

+0

하이브 0.11 또는 하이브 0.12? 문제를 재현하는 데이터 파일을 공유 할 수 있습니까? –

+0

하이브 0.12 및 데이터 공유 할 광산 아니지만 모든 합계가 합계되지 않습니다. 7 천만 기록하지만 내가 그것을 셀 때 나는 단지 800 만 얻을. – darkownage

+0

쿼리에 대해 EXPLAIN을 게시 할 수 있습니까? 언제든지 벡터 라이 제이션을 활성화하지 않았습니다 ('set hive.vectorized.execution.enabled = true;')? –

답변

1

나는 예를 들어, 당신을 위해 유용 할 수 있습니다. 내가 생각하는 요 u "로 끝나는 행 형식으로 구분 된 필드"에는 몇 가지 문제점이 있습니다. 2 열이

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 

하지만 난 단지 테이블을 만들려면 다음과 같은 : 당신의 결과를 어떻게 생각

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; 

아래와 같이 나는, "\의 t"에 의해 별도의 텍스트가 "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 

그래서, 난 당신이 어떤 특별한 열이 정의 된 구분자를 포함 포함의 쿠키를 생각합니다. 도움이되기를 바랍니다. 행운을 빈다!