Databricks 有一个很棒的 Synapse 连接器,可以承担批量上传的负担。在后台,连接器正在 Blob 存储中创建一个临时文件夹,并使用 Polybase 外部表非常快速地加载到 Synapse。
目前,我让 ETL 每天对 Synapse 进行批量加载(写入或覆盖单个日期分区)。
从 Databricks 加载到 Synapse 时,是否有任何选项可以确保一致性?
我的意思是分区切换或至少任何事务支持。我是否应该为 Databricks 工作落在中间的情况编写自定义数据库清理逻辑,所以我已经删除了以前的数据并只编写了数据集的一半?
UPD
官方文档说“使用数据源 API”。除了使更新分区不一致的风险之外,是否有任何原因不将数据加载到主表中?
对数据应用一些转换,然后使用数据源 API 将数据写回 Azure Synapse 中的另一个表。
df.write
.format("com.databricks.spark.sqldw")
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>")
.option("forwardSparkAzureStorageCredentials", "true")
.option("dbTable", "my_table_in_dw_copy")
.option("tempDir", "wasbs://...")
.save()