我无法从数据砖中的Spark数据帧创建数据加载到Azure SynapseDWH

问题描述

我是该领域的新手,目前正在与Azure&Databricks一起玩。我将一个Json文件从blob导入到数据块,进行了一些转换,现在希望将其加载到Azure中的原始DWH(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()

解决方法

如果encrypt property is set to truetrustServerCertificate 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;")

enter image description here

encrypt property is set to truetrustServerCertificate property is set to true,时,SQL Server的Microsoft JDBC驱动程序将不验证SQL Server TLS证书。通常,这是允许在测试环境中进行连接所必需的,例如在SQL Server实例仅具有自签名证书的情况下。

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

enter image description here

有关更多详细信息,请参见Connecting with encryption