将数据写入 Azure 专用 SQL 池中的特定分区

Posted

技术标签:

【中文标题】将数据写入 Azure 专用 SQL 池中的特定分区【英文标题】:Write data to specific partitions in Azure Dedicated SQL pool 【发布时间】:2021-11-15 05:06:00 【问题描述】:

目前,我们正在使用下面文章中的步骤从我们的一个 Spark 数据源(delta Lake 表)中完整加载数据,并将它们写入 SQL DW 上的表中。

https://docs.microsoft.com/en-us/azure/databricks/data/data-sources/azure/synapse-analytics 具体来说,写入是使用,

df.write \
  .format("com.databricks.spark.sqldw") \
  .option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>") \
  .option("forwardSparkAzureStorageCredentials", "true") \
  .option("dbTable", "<your-table-name>") \
  .option("tempDir", "wasbs://<your-container-name>@<your-storage-account-name>.blob.core.windows.net/<your-directory-name>") \
  .option("maxStrLength",4000).mode("overwrite").save()

现在,我们的源数据,由于它是一个三角洲湖,是根据 countryid 进行分区的。我们将只加载/刷新 SQL DWH 的某些分区,而不是现在正在发生的完整删除表和加载(因为我们指定“覆盖”)。我尝试添加一个添加附加选项(partitionBy,countryid)到上面的脚本,但这似乎不起作用。

另外上面的文章也没有提到分区。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

可能有更好的方法来做到这一点,但这就是我实现它的方式。如果目标 Synapse 表是分区的,那么我们可以利用 Synapse 连接器提供的“preActions”选项来删除该分区中的现有数据。然后我们追加与该分区相关的新数据(从源中作为数据帧读取),而不是覆盖整个数据。

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于将数据写入 Azure 专用 SQL 池中的特定分区的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure Synapse 专用/无服务器 SQL 池中使用增量表

如何通过 Synapse 的 Spark 池将数据帧数据附加到专用的 SQL 池中?

从 Azure Synapse 中的 Apache Spark 将数据写入 SQL DW

Azure 数据工厂问题将数据从本地 sql Server 写入 Azure SQL 数据库

Azure Synapse 专用 sql 池未在 Synapse Studio 中显示数据对象

使用 Synapse Analytics 将数据帧写入 SQL 专用数据库