是否可以将数据从 ADLS 加载到 DBX 中的 SQL DW?

Posted

技术标签:

【中文标题】是否可以将数据从 ADLS 加载到 DBX 中的 SQL DW?【英文标题】:Is it possible to load data from ADLS to SQL DW in DBX? 【发布时间】:2021-12-08 15:57:01 【问题描述】:

是否可以使用数据块将数据从 ADLS gen2 加载到 SQL DW? 我在 ADLS Gen2 中保存了表,我想将表从那里传输到 SQL DW。 如果可以,我该怎么做?

谢谢

【问题讨论】:

SQL DW 是指 Synapse 吗?是的。但使用 Azure 数据工厂可能会更容易。我认为您可以挂载 ADLS 并将文件作为数据框打开吗?如果没有,请先这样做。然后您可以使用此示例将数据帧写入 SQL Server docs.microsoft.com/en-us/sql/connect/spark/… 【参考方案1】:

首先在数据块上安装 ADLS。为此,请遵循以下代码 sn-p

configs = "fs.azure.account.auth.type": "OAuth",
          "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
          "fs.azure.account.oauth2.client.id": "<application-id>",
          "fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
          "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)

你可以关注这个link

现在将存储在 ADLS 中的表转换为数据框。在这里您可以使用数据进行转换。

最后一步是将dataframe中的数据存储到SQL DW。

使用以下代码建立连接。

jdbcHostname = "xxxxxxxxxxxx.database.windows.net"
jdbcPort = "1433"
jdbcDatabase = "xxxxxxxxdb"
properties = 
"user" : "xxxxxxxx",
"password" : "******" 

下面我展示了如何将数据加载到 sql。

from pyspark.sql import *
import pandas as pd
df = DataFrameWriter(mydf)
df.jdbc(url=url, table= "Table_Name", mode ="overwrite", properties = properties)

有关更多信息,您可以参考 Gauri Mahajan 的 article

【讨论】:

以上是关于是否可以将数据从 ADLS 加载到 DBX 中的 SQL DW?的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 ADLS Gen2 加载到 Azure Synapse 时出错

使用 Python 或 Java 从本地将数据上传到 Azure ADLS Gen2

Azure 数据湖:将数据从 Blob 移动到 ADLS 时面临问题

DataBricks - 将更改保存回 DataLake (ADLS Gen2)

我们如何修复 ADLS Gen 2 中的增量位置文件

在 ADLS2 中合并通过 DataBricks 准备的 CSV 文件