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

从S3存储的Parquet文件MERGE/UPSERT Snowflake时插入全空值问题排查

问题原因及修复方案

你的MERGE脚本执行后全字段为空的核心问题是子查询未给解析的Parquet字段分配别名,导致后续列引用失效,最终取不到有效数据。具体问题和修复步骤如下:

关键错误点

  • 在USING子查询中,你直接选取$1:device_attr_hk和$1:applicationruntime_raw但未设置别名,此时子查询返回的列名是$1:device_attr_hk这类特殊格式,后续ne.$1:device_attr_hk的引用方式无法正确指向这些列,自然返回空值。
  • ON匹配条件里ex.device_attr_hk = ne.$1:device_attr_hk同样因列名引用错误,无法正确匹配数据,导致更新/插入逻辑都无法获取有效值。

修复后的脚本

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);

额外验证项

  1. 确认my_parquet_format文件格式配置正确,需包含TYPE = PARQUET,且压缩、解析等参数适配目标文件,避免Parquet文件本身解析失败。
  2. 单独运行子查询验证数据是否正常返回,确认外部阶段的Parquet文件确实包含目标字段:
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');

内容的提问来源于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 12:22:24