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

AWS Glue迁移S3到Snowflake时pyWriteDynamicFrame列不存在报错排查

问题排查与解决方案

1 核心根因:列名大小写不匹配

报错信息中已经明确提示:Spark侧的Schema列名为全大写的SERIAL_NUMBER,但JDBC写入Sink尝试匹配的是小写的serial_number,二者不一致触发报错。
Snowflake默认对未加双引号的标识符自动转为全大写存储,而AWS Glue从S3读取CSV/JSON等格式数据时,默认保留原始文件的小写列名,两边大小写规则冲突是该类问题的高发原因。
解决方法:

  • 写入前统一转换DynamicFrame列名为全大写,参考PySpark代码:
from awsglue.dynamicframe import DynamicFrame

# 转换为Spark DataFrame处理列名
df = original_dynamic_frame.toDF()
df_uppercase_cols = df.toDF(*[c.upper() for c in df.columns])
# 转回DynamicFrame用于后续写入
processed_dynamic_frame = DynamicFrame.fromDF(df_uppercase_cols, glueContext, "processed_dyf")
  • 也可在Snowflake连接器的额外配置项中添加quoted_identifiers_ignore_case=true,关闭大小写校验规则。

2 版本兼容性确认

你当前使用的连接器与JDBC驱动版本组合无兼容性问题,但需要确认Glue作业版本匹配:
你使用的Snowflake Spark连接器适配Spark 2.3版本,因此Glue作业版本需选择Glue 2.0(对应Spark 2.4.x,向下兼容Spark 2.3),不可选择Glue 3.0及以上版本(对应Spark 3.x,不兼容2.x系列连接器)。

3 其他遗漏配置排查

  • 确认Snowflake目标表的SERIAL_NUMBER列真实存在,且列数据类型与Spark Schema中的DoubleType匹配,若表中该列为字符串类型也会触发匹配失败
  • 确认连接器配置中指定的Snowflake Schema、Database名称正确,避免误操作到其他库表导致列不存在
  • 若开启了自动建表功能,需确认目标库中没有提前创建过列名为小写serial_number的同名表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 07:54:02