gpt4 book ai didi

mysql - HIVE UNION ALL with 子句

转载 作者:行者123 更新时间:2023-11-29 20:40:51 25 4
gpt4 key购买 nike

我有下面的 mysql 更新语句。我正在尝试使用 hive 13 将其转换为 hql。(所以我在 hive 中没有任何更新语句)

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 个查询,如果主键不相等则应有其他查询。

以上查询是针对相等的 PK 条件。其中 Id 是 PK。请提供任何帮助。对此已经研究了很久了。

最佳答案

版本 .14 之前的 Hive 中的更新是插入覆盖表或分区。您需要 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 中实现等于/不等于逻辑。

此外,您还需要仔细检查连接是否不会创建重复项。

关于mysql - HIVE UNION ALL with 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38645422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com