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

从AWS Glue的PySpark作业写入Databricks时JDBC报错求助

解决AWS Glue PySpark写入Databricks JDBC的列名引号问题

问题出在Spark JDBC writer默认会用双引号包裹列名,但Databricks的SQL解析器不认这种格式(它用反引号来处理特殊标识符)。给你三个可行的解决办法:

方法1:直接禁用标识符引号包裹

如果你的列名没有特殊字符(比如空格、SQL保留字),最简单的办法就是在JDBC写入选项里加quoteIdentifier并设为false,这样Spark就不会给列名加引号了:

spark_df.write.format("jdbc") \
  .option("url", jdbc_url) \
  .option("dbtable", table_name) \
  .option("password", pwd) \
  .option("quoteIdentifier", "false") \
  .mode("overwrite") \
  .save()

方法2:指定Databricks支持的引号字符

如果列名有特殊字符必须保留引号,那就把Spark默认的引号字符改成反引号,让生成的SQL符合Databricks规则。可以在创建SparkSession的时候配置:

spark = SparkSession.builder \
  .appName("GlueToDatabricks") \
  .config("spark.sql.identifier.quoteChar", "`") \
  .getOrCreate()

# 之后正常执行写入
spark_df.write.format("jdbc") \
  .option("url", jdbc_url) \
  .option("dbtable", table_name) \
  .option("password", pwd) \
  .mode("overwrite") \
  .save()

方法3:改用Delta Lake直接写入(推荐)

如果你的Databricks集群用了Delta Lake,直接用Delta格式写入比JDBC高效得多,还能彻底避开这类SQL解析问题:

# 写入DBFS上的Delta表路径
spark_df.write.format("delta") \
  .mode("overwrite") \
  .save("dbfs:/path/to/your/delta/table")

# 或者直接写入已注册的Delta表
spark_df.write.format("delta") \
  .mode("overwrite") \
  .saveAsTable("MYDATABASE.MYTABLE")

这种方式不需要依赖JDBC驱动,还能用到Delta的ACID、版本控制等特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:10:44