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

如何修改Snowflake MERGE脚本以从S3 Parquet文件执行Upsert

Parquet文件MERGE插入Null问题的修复方案

你的Parquet脚本出现全Null插入的核心原因是字段引用方式错误:子查询中未为解析的Parquet字段定义别名,后续在关联、更新、插入操作中仍直接使用$1:字段名的写法,导致Snowflake无法正确映射字段值。

具体修改步骤

  1. 为子查询字段添加别名:在SELECT语句中给每个$1:xxx字段指定明确别名,建议和目标表字段名保持一致。
  2. 统一引用别名:在MERGE的ON条件、UPDATE和INSERT语句中,全部使用子查询定义的别名,不再使用$1:字段名。

修改后的完整脚本

MERGE INTO data_architecture_stage.test ex 
USING ( 
    SELECT 
        $1:device_attr_hk AS device_attr_hk, 
        $1:applicationruntime_raw AS applicationruntime_raw 
    FROM @dss_prod.test.subscriber_data_solutions/rollup_parquet_expor2t/ 
        (file_format => 'my_parquet_format', PATTERN => '.*\\.parquet') 
) ne 
ON ex.device_attr_hk = ne.device_attr_hk 
WHEN MATCHED THEN 
    UPDATE SET 
        device_attr_hk = ne.device_attr_hk, 
        applicationruntime_raw = ne.applicationruntime_raw 
WHEN NOT MATCHED THEN 
    INSERT (device_attr_hk, applicationruntime_raw) 
    VALUES (ne.device_attr_hk, ne.applicationruntime_raw);

额外验证建议

先单独执行子查询部分,确认能读取到非Null的有效数据:

SELECT 
    $1:device_attr_hk AS device_attr_hk, 
    $1:applicationruntime_raw AS applicationruntime_raw 
FROM @dss_prod.test.subscriber_data_solutions/rollup_parquet_expor2t/ 
    (file_format => 'my_parquet_format', PATTERN => '.*\\.parquet');

如果这一步返回Null,需要检查Parquet文件格式my_parquet_format的配置是否匹配文件实际结构(比如压缩方式、字段大小写匹配等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:23:12