我有以下mysql更新语句。我试图使用配置单元13将其转换为hql。(所以我在配置单元中没有任何更新语句)
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;
以下是我的询问:
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;
上述查询会引发解析错误。 我知道应该有2个查询,如果主键相等则为1,如果它们不相等则为1。
以上查询是针对相同的PK条件。 其中Id是PK。请帮忙。对此进行了长时间的研究。
答案 0 :(得分:0)
在版本.14之前的Hive中更新是INSERT OVERWRITE TABLE OR PARTITION。 您需要LEFT JOIN从STORE中选择所有行,包括已更新但未更新。 检查CASE语句中哪个表已加入。 使用以下查询作为模板:
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 ;
在CASE中也实现等于/不等于逻辑。
此外,您需要仔细检查连接是否不会创建重复项。