我无法创建从databricks中的spark dataframe到azure synapse(dwh)的加载数据

wmtdaxz3  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(582)

我是这个领域的新手,目前正在使用azure&databricks。我从blob接收了一个json文件到databricks,做了一些转换,现在希望将它加载到azure中的一个virgindwh(synapse)中。
代码执行在:.mode(“overwrite”)处显示错误,并给出以下错误:com.databricks.spark.sqldw.sqldwsideexception:azure synapse analytics无法执行连接器生成的jdbc查询。
单元格包含以下代码:

dwTable= "mytable001"
dwDatabase = "*****"
dwServer = "****.database.windows.net" 
dwUser = "****"
dwPass = "****"
dwJdbcPort =  "1433"
dwJdbcExtraOptions = "encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
sqlDwUrl = "jdbc:sqlserver://" + dwServer + ".database.windows.net:" + dwJdbcPort + ";database=" + dwDatabase + ";user=" + dwUser+";password=" + dwPass + ";$dwJdbcExtraOptions"
sqlDwUrlSmall = "jdbc:sqlserver://" + dwServer + ".database.windows.net:" + dwJdbcPort + ";database=" + dwDatabase + ";user=" + dwUser+";password=" + dwPass

tempDir = "wasbs://****@*****.blob.core.windows.net/tempDirs"

acntInfo = "fs.azure.account.key.databrickstrainingst.blob.core.windows.net"
sc._jsc.hadoopConfiguration().set(
  acntInfo, 
  "key****")

spark.conf.set("spark.sql.parquet.writeLegacyFormat","true")

renamedColumnsDF.write \
  .format("com.databricks.spark.sqldw") \
  .option("url", sqlDwUrlSmall) \
  .option("dbtable", dwTable) \
  .option( "forward_spark_azure_storage_credentials","true") \
  .option("tempdir", tempDir) \
  .mode("overwrite") \
  .save()
cyej8jka

cyej8jka1#

如果 encrypt property is set to true 以及 trustServerCertificate property is set to false 如果连接字符串中的服务器名称与tls证书中的服务器名称不匹配,则会发生以下错误。从7.2版开始,驱动程序支持tls证书中服务器名称最左侧标签中的通配符模式匹配。

("url", "jdbc:sqlserver://cheprasynapse.sql.azuresynapse.net:1433;database=chepra;user={Your_username};password={Your_Password};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.sql.azuresynapse.net;loginTimeout=30;")


encrypt property is set to true 以及 trustServerCertificate property is set to true, 用于sql server的microsoft jdbc驱动程序不会验证sql server tls证书。这通常是在测试环境中允许连接所必需的,例如在sqlserver示例只有自签名证书的情况下。

("url", "jdbc:sqlserver://cheprasynapse.sql.azuresynapse.net:1433;database=chepra;user={Your_username};password={Your_Password};encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.sql.azuresynapse.net;loginTimeout=30;")


有关更多详细信息,请参阅连接加密。

相关问题