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); 

Но результаты не являются правильными. У меня около 70 миллионов записей, и когда я делаю сумму показов, я получаю только 8 миллионов, так что я подозреваю, что отчет занимает слишком много столбцов.

Итак, как я могу исправить это, чтобы получить правильное количество показов?

** Дополнительная информация **

hive.vectorized.execution.enabled не определен, так что не является активным.

тот же запрос в текстовом формате возвращает еще меньше строк (около 2,7 млн)

результат COUNT(*): 70643229

результат COUNT(cookieID): 70643229

Результат COUNT(DISTINCT cookieID): 1440195

Приветствия

+0

Улей 0,11 или улей 0,12? Возможно ли обмен файлом данных, который воспроизводит проблему? –

+0

Улей 0.12, и данные не мои, чтобы поделиться, но сумма всего этого не складывается. 70 миллионов записей, но когда я считаю, я получаю только 8 миллионов. – darkownage

+0

Можете ли вы разместить EXPLAIN для запроса? Вы не разрешили векторизации случайно ('set hive.vectorized.execution.enabled = true;'), не так ли? –

ответ

1

У меня есть пример, может быть вам полезен. Думаю, лет У «разделителей строк с разделителями строк, заканчивающихся» есть некоторые проблемы. У меня есть текст, индивидуальный на «\ т», как показано ниже:

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; 

Как вы думаете, результат msgstr "выбрать td из 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 содержит некоторые специальные колонки включают ваш определенный Seperator. Надеюсь, это может вам помочь. удачи!

Смежные вопросы