首页 > 解决方案 > 使用 MERGE INTO 和 sql/spark 用另一个表更新一个表

问题描述

在此处跟进有关获取列的唯一行 ID 的问题/答案。所以现在我想将我的查询保存为一个表,并用我更改了列 ID 的行更新现有表。

我的数据如下所示:

原始表,命名分类

level_4         level_5    level_6    level_7       system_id   node_id
American League West       null       null           4          633
American League East       null       null           4          634
National League West       Dodgers    bellinger      3          635
National League Central    Cardinals  null           null       null
American League Central    null       null           null       null

我要更新的新表,名为 taxonomies_update

level_4         level_5    level_6    level_7       system_id   node_id
American League West       null       null           4          633
American League East       null       null           4          634
National League West       Dodgers    bellinger      3          635
National League Central    Cardinals  null           null       636
American League Central    null       null           null       637

所以这是我到目前为止得到的:

CREATE TABLE taxonomies_update AS
SELECT 
    system_id, 
    t2.min_node-1+row_number() OVER (ORDER BY -tn.node_id desc) node_id, `level_4`, `level_5`, `level_6`, `level_7` 
FROM 
    taxonomies tn 
cross join 
    (SELECT min(node_id) as min_node FROM taxonomies) as t2;

MERGE INTO taxonomies
USING taxonomies_update
ON taxonomies.node_id = taxonomies_update.node_id
WHEN MATCHED THEN
  UPDATE SET taxonomies.node_id = taxonomies_update.node_id
WHEN NOT MATCHED
  THEN INSERT (node_id) VALUES (node_id);

这运行没有错误,但我原来的分类表有新的行,但他们没有新的 node_id 连同它。我已经尝试了改变ON行,摆脱WHEN MATCHED行和THEN INSERT行的各种组合。

提前致谢!

标签: sqlapache-sparkapache-spark-sql

解决方案


推荐阅读