2016-07-28 9 views
0

Ich habe die folgende mysql Update-Anweisung. Ich versuche, dies in hql 13. mit Bienenstock zu konvertieren (so lese ich habe keine Update-Anweisung in hive)HIVE UNION ALL mit Klausel

UPDATE MY_TABLE.STORE SET 
    ADDRESS1 = b.addr_line_1 
    ,ADDRESS3 = b.city + ', ' + b.state + ' ' + b.postal_cde 
FROM 
    MY_TABLE.STORE a INNER JOIN 
    CUST b ON 
    a.REGION = b.LOC_NUM 
    AND a.STORENUMBER = b.cust_num; 


UPDATE MY_TABLE.STORE SET 
    STORETYPE = b.abc_num 
FROM 
    MY_TABLE.STORE a INNER JOIN 
    RLT b ON 
    a.REGION = b.LOC_NUM 
    AND a.STORENUMBER = b.CUST_NUM; 

Unten ist meine Frage:

insert into table X 
select b.addr_line_1,CONCAT(B.CITY, ', ', B.STATE, ' ', B.POSTAL_CDE),STORETYPE 
from MY_TABLE.STORE A JOIN CUST b ON a.REGION = b.LOC_NUM 
    AND a.STORENUMBER = b.cust_num t1 

UNION ALL 
select ADDRESS1 ,ADDRESS3 ,b.abc_num from MY_TABLE.STORE a INNER JOIN 
    RLT b ON 
    a.REGION = b.LOC_NUM 
    AND a.STORENUMBER = b.CUST_NUM t2 on t1.id <> t2.id; 

Die obige Abfrage wirft einen Fehler für Parsing. Ich weiß, dass es 2 Abfragen geben sollte, 1 wenn Primärschlüssel gleich sind und andere, wenn sie nicht gleich sind.

Die obige Abfrage bezieht sich auf den gleichen PK-Zustand. wo ID ist die PK. Irgendwelche Hilfe bitte. Habe lange darüber geforscht.

+0

Was ist der spezifische Fehler, den Sie bekommen? – gobrewers14

Antwort

0

UPDATE in Hive vor Version .14 ist INSERT OVERWRITE TABLE oder PARTITION. Sie müssen LEFT JOIN verwenden, um alle Zeilen aus STORE auszuwählen, einschließlich aktualisierter und nicht aktualisierter Zeilen. In CASE-Anweisung prüfen, welche Tabelle verbunden ist. Verwenden Query als Vorlage Folowing:

INSERT OVERWRITE TABLE STORE 
SELECT 
-- fields should be in the same order like in target table (STORE) 
--update all joined records, leave as is if not joined: 

case when c.LOC_NUM is not null then c.addr_line_1 --first table joined 
    when r.LOC_NUM is not null then r.addr_line_1 --second table joined 
    else s.address1        --not joined 
end                 as address1, 

    ... 

FROM STORE s 
    LEFT JOIN CUST c ON s.REGION = c.LOC_NUM 
        AND s.STORENUMBER = c.cust_num 
    LEFT JOIN RLT r ON s.REGION = r.LOC_NUM 
        AND s.STORENUMBER = r.CUST_NUM ; 

Implementieren Sie gleich/ungleich Logik auch in den Fällen.

Sie müssen auch überprüfen, dass Joins keine Duplikate erstellen.