2016-04-12 20 views
0
tarafından grup için soruyor

Temel bir sorgum var (belirsiz isimlerle yeniden yazılıyor), neden kovanın gruba eklenmesi için case ifadesindeki t2.description sütununu sorduğunu anlamıyorum. Onları teşvik ettim ve onu yerleştirdim ama tabiki her satır için bu sütun için boş değer elde ediyorum ... Eğer durum beyanını çıkarırsam ve ham verileri sorguladığımda tüm güzel açıklamaları alırım. Sadece durum bildirimi ile bir mantık eklemek istediğimde başarısız olur. Ben Hive için anlıyorum ve ANSI sql değil anlıyorum ama bu fantastik olmak hayal etmedim.kovan ag

select 
t1.columnid    as column_id, 
(case when t2.description in ('description1','description2','description3') then t2.description else null end) as label_description 

from table1 t1 
left outer join table2 t2 on (t1.inresult = t2.inresult) 

group by 
t1.columnid 

cevap

0

Hive'ın sql ayrıştırıcısı tarafından gösterilen hata günlüklerine dayanan asıl sorunu anlamak çoğu zaman zordur. Sorun şu ki, 2 sütun seçiyorsunuz ama sadece GROUP BY'yi bir sütuna uyguluyorsunuz. bu sorgu aşağıdakilerden birini yapmanız gerekir çalıştırılabilir yapmak için: Her iki sütuna 1 ve sütuna göre

  1. Grup 2

COLUMN_ID, (vaka olarak t1.columnid seçtiğinizde t2.description içinde ('description1', 'description2', 'description3') sonra t2.description else null end) tablo1 'den etiket_description olarak t1 sol dıştaki birleşim table2 t2 on (t1.inresult = t2.inresult) GROUP BY t1.columnid, ( t2.description öğesinde ('description1', 'description2', 'description3') sonra t2.description else null end;);

  1. COLUMN_ID, (vaka olarak t1.columnid seçmek açıklamada

GROUP BY kullanmayın zaman ('Description1' in t2.description, table1 t1 LABEL_DESCRIPTION olarak 'description2', 'description3') daha sonra t2.description başka boş ucu) dış

  1. , min (bir durum, daha sonra ('Açıklama1', 'Açıklama2', 'description3') 'de t2.description t2.description 2

column_id olarak t1.columnid seçmek kolona bir toplama işlevi uygulama table1 t1 LABEL_DESCRIPTION olarak başka boş uç) bir grup kullanarak eğer dış sonra iLE, kovan için t1.columnid

göre (t1.inresult = t2.inresult) grubuna tablo2 t2 katılması kalan tüm Seçtiğiniz sütunların GROUP BY ifadesinde olması veya wrappe olması gerekir MAX, MIN veya SUM gibi bir toplu ifadede d.

+0

1. Her satır için 'label_description' için null değerini verir; 2. Bir grup için sorar; 3. “min (t2.description)” ifadesini kullanarak gruba “t2.description” diye sorar ve “min()' t1.columnid ”'i her girişte sadece min.) ... Aslında sadece bir RDBMS için her çalışmayı belirttiniz ve ayrıştırıcı günlüklerinin anlaşılmasının zor olduğu bir şeyden başka bir şekilde Hive'a ışık tutmadınız. –

İlgili konular