使用Synapse Analytics将Dataframe写入SQL专用数据库问题咨询
问题根因
com.databricks.spark.sqldw是Databricks平台专属的连接器,Azure Synapse自带的Spark池未内置该依赖,因此运行时报类不存在错误。- 直接调用
saveAsTable默认写入的是Synapse Spark内置的Hive元数据库,而非你创建的专用SQL池实例。
解决方案
优先使用Azure Synapse Spark原生内置的synapsesql连接器实现写入,该方式底层通过批量导入能力实现,性能远高于普通JDBC写入:
# 读取ADLS Gen2的Delta表 df = spark.read.format("delta").load(BronzePath) # 写入专用SQL池,替换尖括号内的内容为你的实际资源名 df.write \ .format("synapsesql") \ .mode("overwrite") \ .option("table", "<专用SQL池名称>.<目标数据库名>.<目标表名>") \ # 可选配置:指定表分布方式 .option("distribution", "ROUND_ROBIN") \ # 可选配置:指定索引类型 .option("index", "CLUSTERED COLUMNSTORE INDEX") \ .save()
如果需要使用JDBC方式写入小批量数据,可使用如下代码:
# 替换连接字符串中占位符为你的实际配置 jdbc_url = "jdbc:sqlserver://<Synapse工作区名>.sql.azuresynapse.net:1433;database=<专用SQL池数据库名>;user=<登录用户名>;password=<登录密码>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.sql.azuresynapse.net;loginTimeout=30;" df.write \ .mode("overwrite") \ .jdbc( url=jdbc_url, table="<目标表名>", properties={"driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"} )
内容的提问来源于stack exchange,提问作者Haha
相关产品推荐
相关产品推荐

