2016-07-28 38 views
0

以下のmysql update文があります。HIVE UNION ALL with節

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; 

上記のクエリがために、エラーがスローされます。私は私のクエリでハイブ13.(私はハイブのいずれかの更新ステートメントを持っていない)以下

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; 

を使用してHQLにこれを変換しようとしています解析する。 2つのクエリーがあることがわかります。プライマリキーが等しい場合は1、それ以外の場合はその他のクエリーがあります。

上記のクエリは等しいPK条件のクエリです。 ここでIdはPKです。助けてください。これについてかなり長い間研究してきました。

+0

具体的なエラーは何ですか? – gobrewers14

答えて

0

バージョン14より前のHiveのUPDATEは、INSERT OVERWRITE TABLE OR PARTITIONです。 更新されたものと更新されていないものを含むSTOREからすべての行を選択するにはLEFT JOINが必要です。 テーブルが結合されているCASE文を確認します。テンプレートとして 使用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 ; 

のケースでも、あなたの等しい/等しくないロジックを実装します。

また、結合が重複を作成しないことを再度確認する必要があります。

関連する問題