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

Snowflake环境下产品数据复制及去重插入的SQL需求

Snowflake 下实现Table_P表的两类数据插入(新增Product_Y+去重补充Product_W)

一、新增Product_Y,完整复制Product_X对应数据

该操作是新增全新产品条目,无需去重,直接复制Product_X的所有记录并替换Product字段即可:

INSERT INTO Table_P
    (PRODUCT, REGION, SALESPERSON, PROD_DATE, END_DATE)
SELECT 'PRODUCT_Y', REGION, SALESPERSON, PROD_DATE, END_DATE
FROM Table_P
WHERE PRODUCT = 'PRODUCT_X';

如果需要和Product_W的日期逻辑一致(用当前时间+固定结束日期),可将PROD_DATE和END_DATE替换为SYSDATE()和TO_DATE('31-12-9999', 'DD-MM-YYYY'),按需调整即可。

二、为Product_W去重补充数据

原INSERT语句产生重复的核心原因是未过滤已存在的Product_W记录。以下提供两种适配Snowflake的去重方案,默认以(PRODUCT, REGION, SALESPERSON)作为重复判定组合,可根据业务需求调整匹配字段。

方案1:WHERE NOT EXISTS过滤重复

INSERT INTO Table_P
    (PRODUCT, REGION, SALESPERSON, PROD_DATE, END_DATE)
SELECT 'PRODUCT_W', t.REGION, t.SALESPERSON, SYSDATE(), TO_DATE('31-12-9999', 'DD-MM-YYYY')
FROM Table_P t
WHERE t.PRODUCT = 'PRODUCT_X'
AND NOT EXISTS (
    SELECT 1
    FROM Table_P
    WHERE PRODUCT = 'PRODUCT_W'
    AND REGION = t.REGION
    AND SALESPERSON = t.SALESPERSON
);

逻辑说明:先提取Product_X的所有记录,再检查Table_P中是否已存在相同区域、销售的Product_W记录,仅插入不存在的条目。

方案2:MERGE语句(Snowflake推荐)

MERGE可灵活实现“存在则跳过、不存在则插入”的批量逻辑:

MERGE INTO Table_P AS target
USING (
    SELECT 'PRODUCT_W' AS PRODUCT, REGION, SALESPERSON, SYSDATE() AS PROD_DATE, TO_DATE('31-12-9999', 'DD-MM-YYYY') AS END_DATE
    FROM Table_P
    WHERE PRODUCT = 'PRODUCT_X'
) AS source
ON target.PRODUCT = source.PRODUCT
AND target.REGION = source.REGION
AND target.SALESPERSON = source.SALESPERSON
WHEN NOT MATCHED THEN
    INSERT (PRODUCT, REGION, SALESPERSON, PROD_DATE, END_DATE)
    VALUES (source.PRODUCT, source.REGION, source.SALESPERSON, source.PROD_DATE, source.END_DATE);

注意事项

  • 若需要调整重复判定规则,修改ON子句中的匹配字段即可。
  • Snowflake中SYSDATE()返回当前会话时间,如需UTC时间可替换为CURRENT_TIMESTAMP()。
  • 执行写入操作前,可将INSERT/MERGE替换为SELECT语句预览数据,确认无误后再执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:52:43