【问题标题】:Spark to Synapse "truncate" not working as expectedSpark to Synapse \"truncate\" 未按预期工作
【发布时间】:2022-12-19 14:50:24
【问题描述】:

我有一个简单的要求,就是将数据帧从 spark (databricks) 写入突触专用池表,并每天保持刷新(截断)它而不丢弃它。

Documentation 建议将truncateoverwrite 模式一起使用,但这似乎并没有像我预期的那样工作。当我继续看到表创建日期更新时

我在用

df.write \
      .format("com.databricks.spark.sqldw") \
      .option("url", synapse_jdbc) \
      .option("tempDir", tempDir) \
      .option("useAzureMSI", "true") \
      .option("dbTable", table_name) \
      .mode("overwrite") \
      .option("truncate","true") \
      .save()

但是我是否使用truncate似乎没有任何区别。每次我从数据块执行上述操作时,突触中表的创建日期/时间都会更新。谁能帮忙解决这个问题,我错过了什么?

我已经有一个可行的解决方法,但看起来更像是一个解决方法

.option("preActions", "truncate table "+table_name) \
.mode("append") \

【问题讨论】:

    标签: pyspark databricks truncate azure-synapse overwrite


    【解决方案1】:

    我试图在我的环境中重现您的场景,但截断不适用于突触连接器。

    在研究这个问题时,我发现并非所有选项都支持突触连接器在官方 Microsoft document 中提供了支持的选项列表,如 dbTablequeryuserpasswordurl、@ 987654331@、jdbcDrivertempDirtempCompressionforwardSparkAzureStorageCredentialsuseAzureMSIenableServicePrincipalAuth等。

    jdbc 格式的 nots 突触连接器支持截断选项。

    当我将格式表单 com.databricks.spark.sqldw 更改为 jdbc 时,它现在工作正常。

    我的代码:

    df.write.format("jdbc")
        .option("url",synapse_jdbc)
        .option("forwardSparkAzureStorageCredentials", "true")
        .option("dbTable", table_name)
        .option("tempDir", tempdir)
        .option("truncate","true")
        .mode("overwrite")
        .save()
    

    第一次执行:

    第二次执行:

    结论:对于执行代码的时间表创建时间相同意味着覆盖不是删除表而是截断表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 2019-01-16
      • 2021-04-25
      • 2022-10-24
      • 2020-07-02
      • 2019-06-03
      • 1970-01-01
      相关资源
      最近更新 更多