2014-02-26 2 views
1

У меня есть следующий код, который производит необъяснимые значения:Как я могу получить ничего, кроме NULL/0/1, из if (..., 1,0)?

select keyword, 
     count(distinct foo) as foos, 
     count(distinct bar) as bars, 
     count(*) as events, 
     length(keyword) as kwd_len, 
     if(keyword rlike '[A-Z]', 1, 0) as has_uc, 
     if(keyword rlike '[a-z]', 1, 0) as has_lc, 
     if(keyword rlike '[\\W ]', 1, 0) as has_nw 
from all_my_data 
group by keyword 
where has_uc > 1 or has_lc > 1 or has_nw > 1; 

Отпечаток (перенаправлен в файл) выглядит следующим образом:

keyword foos bars events kwd_len has_uc has_lc has_nw 
O Exterminador do Futuro - A S�rie Machinima� NULL NULL 1 1 14 81 1 
     NULL 1 1 3 21 0 1 
credit offers NULL 1 1 1 77 0 1 
muzikály NULL 1 3 3 9 0 1 
     NULL NULL 1 1 1 20 1 
show NULL 1 1 3 5 0 1 
(brooks , NULL 1 1 1 31 0 1 
opera NULL 1 1 1 6 0 1 
��ͯ NULL 1 1 1 7 0 0 
l NULL NULL 1 1 1 5 0 
methyl- NULL 1 1 2 24 0 1 
Apartamento Planta baja престиж NULL 1 1 1 32 1 1 
festivaly NULL 1 1 1 10 0 1 
fiAEBEECACACACACACACACACACACAAA  NULL 1 1 1 64 1 1 
,B NULL 1 1 1 3 1 0 
O Exterminador do Futuro - A S�rie Machinima� NULL NULL 1 1 7 87 1 
concerts NULL 1 1 1 9 0 1 
tanec NULL 1 3 5 6 0 1 
Weekend Waiting Staff/Team Member ?€“ Central London ? NULL 1 1 1 77 1 1 
ìùuL NULL 1 1 2 37 1 1 
O Exterminador do Futuro - A S�rie Machinima� NULL NULL NULL NULL 1 1 2 
MZ� �� � @ NULL NULL 1 1 2 59 1 
error http://www.‰¼ NULL 1 1 1 50 0 1 
[email protected] NULL 1 2 2 11 1 0 
smc  NULL NULL 1 1 2 18 0 
[■ ▶ ▮▮] ® Mike Candys feat. David Deen - People Hold On (500K Exclusive Rework) ★ EXCLUSIVE! for club5485048 ★ [track at NULL 1 1 2 141 1 1 
     NULL 1 2 2 9 0 0 
acting on a decision to buy marijuana illegally falls under the  NULL 1 1 1 165 0 1 
O Exterminador do Futuro - A S�rie Machinima� NULL NULL NULL 1 1 1 99 
X NULL 1 1 2 65 1 1 
�͠ NULL 1 1 1 5 0 0 
     NULL NULL 1 1 1 31 0 
da???? �? NULL NULL 1 1 2 75 1 
koncerty NULL 1 2 4 9 0 1 
�͍ NULL NULL 1 1 1 15 1 
O Exterminador do Futuro - A S�rie Machinima� NULL NULL NULL NULL 1 1 4 
awk '{printf " NULL 1 1 1 38 0 1 
ΒETA: NULL 1 1 2 93 1 0 
�m NULL NULL 1 1 1 8 0 
lsɬLjLj- Yahoo NULL 1 1 2 16 1 1 
brave frontier %H2'2 NULL 1 1 1 23 1 1 
smc  NULL NULL 1 1 2 18 0 
O Exterminador do Futuro - A S�rie Machinima DVDRip Rm� NULL 1 1 14 72 1 1 
O Exterminador do Futuro - A S�rie Machinima� NULL NULL NULL 1 1 2 91 
$A. ?8G .> NULL NULL 1 1 1 30 1 
�͠ NULL 1 1 1 5 0 0 
     NULL 1 1 4 2 0 1 
sport NULL 1 2 3 6 0 1 
http://www.‰¼ NULL 1 1 1 44 0 1 
ŠUN NULL 1 1 2 4 1 0 
     NULL 1 2 2 28 0 0 
činohra NULL 1 3 7 8 0 1 
Motorcraft MERCON NULL 1 1 6 21 1 1 
O Exterminador do Futuro - A S�rie Machinima DVDRip Rm� NULL 1 1 7 76 1 1 
     NULL 1 1 1 8 1 1 
� NULL 1 1 2 45 0 1 
juegos frip  NULL 1 1 1 13 0 1 
     NULL 1 1 1 11 0 1 

Мои вопросы:

  1. Где значения [01] для has_uc и has_lc?
  2. Почему я повторяю keyword поля (пустые, Exterminador do Futuro & c, подтвержденные путем прямой экспертизы /misc/hdfs/user/hive/warehouse/bad_keywords/000000_0), несмотря на group by keyword?
  3. Почему у меня есть NULL значения для bars и foos (как может возвращение NULL)?
+0

ли странные значения в вашей таблице t1 или они появляются только после GROUP BY? –

+0

@CarterShanklin: они уже присутствуют в 't1'! – sds

ответ

0

Я не знаю HiveQL, но из общей перспективы SQL это похоже на то, что ваша «группа по ключевому слову» в первом запросе неявно суммирует все флаги has_XX для каждого ключевого слова, когда то, что вы хотите, просто отличный список ключевых слов и их свойств.

Try ликвидации «группы по ключевому слову» статьи в первом запросе, а вместо этого сделать:

create table t1 as 
select distinct keyword, 
     length(keyword) as kwd_len, 
     if(keyword rlike '[A-Z]', 1, 0) as has_uc, 
     if(keyword rlike '[a-z]', 1, 0) as has_lc, 
     if(keyword rlike '[\\W ]', 1, 0) as has_nw 
from all_my_data 
+0

Почему это суммирование has_ ​​*, а не kwd_len? Я не могу избежать «group by» по другим причинам. – sds

+0

«Почему?» Я не знаю, потому что я не использую HQL. Но вы можете попытаться переместить запрос флага в коррелированный подзапрос, если для основного запроса требуется группа. –

+0

Странная область значений уже присутствует в 't1', поэтому я не думаю, что ваши объяснения верны. Сожалею. – sds