HIVE 查询中 MERGE 的等价物
Equivalent of MERGE in HIVE query
我有以下 SQL 查询:
MERGE INTO member_staging x
USING (SELECT member_id, first_name, last_name, rank FROM members) y
ON (x.member_id = y.member_id)
WHEN MATCHED THEN
UPDATE SET x.first_name = y.first_name,
x.last_name = y.last_name,
x.rank = y.rank
WHERE x.first_name <> y.first_name OR
x.last_name <> y.last_name OR
x.rank <> y.rank
WHEN NOT MATCHED THEN
INSERT(x.member_id, x.first_name, x.last_name, x.rank)
VALUES(y.member_id, y.first_name, y.last_name, y.rank);
我想在 Hive 查询中实现它,在 HIVE 中是否有 MERGE JOIN 的等效项?
手动输入:
示例语法:
MERGE INTO <target table> AS T USING <source expression/table> AS S
ON <boolean expression1>
WHEN MATCHED [AND <boolean expression2>] THEN UPDATE SET <set clause list>
WHEN MATCHED [AND <boolean expression3>] THEN DELETE
WHEN NOT MATCHED [AND <boolean expression4>] THEN INSERT VALUES<value list>
您的具体情况:
MERGE INTO member_staging AS x
USING (SELECT member_id, first_name, last_name, rank FROM members) y
ON (x.member_id = y.member_id)
WHEN MATCHED AND (
x.first_name <> y.first_name OR
x.last_name <> y.last_name OR
x.rank <> y.rank
)
THEN
UPDATE SET x.first_name = y.first_name,
x.last_name = y.last_name,
x.rank = y.rank
WHEN NOT MATCHED THEN
INSERT VALUES (y.member_id, y.first_name, y.last_name, y.rank);
MERGE 语句基于 ANSI 标准 SQL,因此查询非常相同。
只需在 AND 子句中切换 WHERE 条件,如下所示:
MERGE INTO member_staging AS x
using (SELECT member_id,
first_name,
last_name,
rank
FROM members) y
ON ( x.member_id = y.member_id )
WHEN matched AND ( x.first_name <> y.first_name OR x.last_name <> y.last_name OR
x.rank <> y.rank ) THEN
UPDATE SET x.first_name = y.first_name,
x.last_name = y.last_name,
x.rank = y.rank
WHEN NOT matched THEN
INSERT
VALUES(y.member_id,
y.first_name,
y.last_name,
y.rank);
我有以下 SQL 查询:
MERGE INTO member_staging x
USING (SELECT member_id, first_name, last_name, rank FROM members) y
ON (x.member_id = y.member_id)
WHEN MATCHED THEN
UPDATE SET x.first_name = y.first_name,
x.last_name = y.last_name,
x.rank = y.rank
WHERE x.first_name <> y.first_name OR
x.last_name <> y.last_name OR
x.rank <> y.rank
WHEN NOT MATCHED THEN
INSERT(x.member_id, x.first_name, x.last_name, x.rank)
VALUES(y.member_id, y.first_name, y.last_name, y.rank);
我想在 Hive 查询中实现它,在 HIVE 中是否有 MERGE JOIN 的等效项?
手动输入:
示例语法:
MERGE INTO <target table> AS T USING <source expression/table> AS S
ON <boolean expression1>
WHEN MATCHED [AND <boolean expression2>] THEN UPDATE SET <set clause list>
WHEN MATCHED [AND <boolean expression3>] THEN DELETE
WHEN NOT MATCHED [AND <boolean expression4>] THEN INSERT VALUES<value list>
您的具体情况:
MERGE INTO member_staging AS x
USING (SELECT member_id, first_name, last_name, rank FROM members) y
ON (x.member_id = y.member_id)
WHEN MATCHED AND (
x.first_name <> y.first_name OR
x.last_name <> y.last_name OR
x.rank <> y.rank
)
THEN
UPDATE SET x.first_name = y.first_name,
x.last_name = y.last_name,
x.rank = y.rank
WHEN NOT MATCHED THEN
INSERT VALUES (y.member_id, y.first_name, y.last_name, y.rank);
MERGE 语句基于 ANSI 标准 SQL,因此查询非常相同。 只需在 AND 子句中切换 WHERE 条件,如下所示:
MERGE INTO member_staging AS x
using (SELECT member_id,
first_name,
last_name,
rank
FROM members) y
ON ( x.member_id = y.member_id )
WHEN matched AND ( x.first_name <> y.first_name OR x.last_name <> y.last_name OR
x.rank <> y.rank ) THEN
UPDATE SET x.first_name = y.first_name,
x.last_name = y.last_name,
x.rank = y.rank
WHEN NOT matched THEN
INSERT
VALUES(y.member_id,
y.first_name,
y.last_name,
y.rank);