HIVE UNION ALL 带子句

Posted

技术标签:

【中文标题】HIVE UNION ALL 带子句【英文标题】:HIVE UNION ALL with clause 【发布时间】:2016-07-28 19:45:20 【问题描述】:

我有下面的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。请提供任何帮助。对此进行了相当长的研究。

【问题讨论】:

您遇到的具体错误是什么? 【参考方案1】:

.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 中实现你的相等/不相等逻辑。

您还需要仔细检查连接不会创建重复项。

【讨论】:

以上是关于HIVE UNION ALL 带子句的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE 11G 中的 WITH 子句使用 UNION ALL

Mysql Unknown column in where 子句 union all

使用 UNION ALL 查询在 FROM 子句中出现语法错误

hive UNION和子查询

UNION ALL、UNION与ORDER BY

在 Toad for Sql Server 2016 中使用带有 Union All 的 Order By 子句时出现奇怪的语法错误