You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Glue中用SparkSQL实现表的更新与新增合并?

解决方案:合并Customer与UpdatedCustomer表(更新+新增)

需求核心:将UpdatedCustomer中的记录合并到Customer,实现已有记录更新、新记录插入,最终得到FinalCustomer表。以下是两种适配SparkSQL(AWS Glue支持)的实现方式:


方法1:使用MERGE INTO语句(推荐,Spark 2.4+支持)

这是最直接的更新+插入合并逻辑,符合业务语义:

MERGE INTO Customer target
USING UpdatedCustomer source
ON target.CustomerID = source.CustomerID
WHEN MATCHED THEN
  UPDATE SET
    target.CustomerName = source.CustomerName,
    target.ContactName = source.ContactName
WHEN NOT MATCHED THEN
  INSERT (CustomerID, CustomerName, ContactName)
  VALUES (source.CustomerID, source.CustomerName, source.ContactName);

如果需要保留原Customer表数据,可先复制到临时表再执行合并:

-- 备份原表到临时视图
CREATE OR REPLACE TEMP VIEW OriginalCustomer AS SELECT * FROM Customer;

-- 执行合并更新
MERGE INTO Customer target
USING UpdatedCustomer source
ON target.CustomerID = source.CustomerID
WHEN MATCHED THEN
  UPDATE SET
    target.CustomerName = source.CustomerName,
    target.ContactName = source.ContactName
WHEN NOT MATCHED THEN
  INSERT (CustomerID, CustomerName, ContactName)
  VALUES (source.CustomerID, source.CustomerName, source.ContactName);

方法2:UNION ALL + 窗口函数(兼容低版本Spark)

若你的Spark版本不支持MERGE INTO,可通过优先级排序实现合并:

CREATE OR REPLACE VIEW FinalCustomer AS
WITH CombinedData AS (
  -- 给更新表标记高优先级(1),原表标记低优先级(2)
  SELECT *, 1 AS priority FROM UpdatedCustomer
  UNION ALL
  SELECT *, 2 AS priority FROM Customer
),
RankedData AS (
  -- 按CustomerID分组,取优先级最高的记录
  SELECT 
    CustomerID,
    CustomerName,
    ContactName,
    ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY priority) AS rn
  FROM CombinedData
)
-- 筛选每个CustomerID的第一条记录(即更新表的记录优先)
SELECT CustomerID, CustomerName, ContactName
FROM RankedData
WHERE rn = 1;

示例数据参考

原Customer表

CustomerIDCustomerNameContactName
1Alfreds FutterkisteMaria Anders
2Ana Trujillo Emparedados y heladosAna Trujillo
3Antonio Moreno TaqueríaAntonio Moreno

UpdatedCustomer表

CustomerIDCustomerNameContactName
1Mariand IncMaria Anders
4Artic IceLeon Idas

目标FinalCustomer表

CustomerIDCustomerNameContactName
1Mariand IncMaria Anders
2Ana Trujillo Emparedados y heladosAna Trujillo
3Antonio Moreno TaqueríaAntonio Moreno
4Artic IceLeon Idas

内容的提问来源于stack exchange,提问作者uzluisf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:03:27