你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

从 Azure SQL 数据库和 Azure Synapse Analytics 共享和接收数据

适用于: Azure SQL 数据库 Azure Synapse Analytics(以前称为 Azure SQL DW) Azure Synapse Analytics(工作区)SQL 池

通过 Azure Data Share 可以安全地将 Azure SQL 数据库和 Azure Synapse Analytics 资源中的数据快照分享到其他 Azure 订阅。 包括租户外部的 Azure 订阅。

本文介绍如何从 Azure SQL 数据库Azure Synapse Analytics 共享数据。

本文将指导你完成以下操作:

你可以使用目录跳到所需部分,或者继续阅读本文以从头至尾按步骤了解。

Image showing the data flow between data owners and data consumers.

支持内容

共享数据

Azure Data Share 支持从 Azure 中的多个 SQL 资源共享完整的数据快照。 对于这些资源,目前不支持增量快照。

资源类型 共享表 共享视图
Azure SQL 数据库
Azure Synapse Analytics(以前称为 Azure SQL DW)
Synapse Analytics(工作区)专用 SQL 池

注意

目前,Azure Data Share 不支持从这些资源进行共享:

  • Azure Synapse Analytics(工作区)无服务器 SQL 池
  • 已配置 Always Encrypted 的 Azure SQL 数据库

接收数据

数据使用者可以选择接受共享数据到多个 Azure 资源:

  • Azure Data Lake Storage Gen2
  • Azure Blob 存储
  • Azure SQL 数据库
  • Azure Synapse Analytics

Azure Data Lake Storage Gen 2 或 Azure Blob 存储中的共享数据可以存储为 csv 或 arquet 文件。 完整的数据快照将覆盖目标文件的内容(如果已存在)。

Azure SQL 数据库和 Azure Synapse Analytics 中的共享数据存储在表中。 如果目标表尚不存在,Azure Data Share 将创建包含源架构的 SQL 表。 如果已存在名称相同的目标表,会将其删除并使用最新的完整快照进行覆盖。

注意

对于包含动态数据掩码的源 SQL 表,数据在收件人端会显示为掩码。

支持的数据类型

从 SQL 源共享数据时,将在快照过程中使用以下从 SQL Server 数据类型映射到 Azure Data Share 临时数据类型的映射。

注意

  1. 对于映射到十进制临时类型的数据类型,目前快照支持的最大精度为 28。 如果数据需要的精度大于 28,请考虑将其转换为字符串。
  2. 在将数据从 Azure SQL 数据库共享到 Azure Synapse Analytics 时,并非所有数据类型都受支持。 有关详细信息,请参阅专用 SQL 池中的表数据类型
SQL Server 数据类型 Azure Data Share 临时数据类型
bigint Int64
binary Byte[]
bit Boolean
char String, Char[]
date DateTime
datetime DateTime
datetime2 DateTime
Datetimeoffset DateTimeOffset
Decimal Decimal
FILESTREAM attribute (varbinary(max)) Byte[]
Float Double
image Byte[]
int Int32
money Decimal
nchar String, Char[]
ntext String, Char[]
numeric Decimal
nvarchar String, Char[]
real Single
rowversion Byte[]
smalldatetime DateTime
smallint Int16
smallmoney 小数
sql_variant Object
text String, Char[]
time TimeSpan
timestamp Byte[]
tinyint Int16
uniqueidentifier Guid
varbinary Byte[]
varchar String, Char[]
xml 字符串

共享数据的先决条件

若要从 Azure SQL 资源共享数据快照,首先需要准备环境。 需要:

特定于源的先决条件

还有根据数据的来源进行共享的先决条件。 选择数据共享源,并执行以下步骤:

从 Azure SQL 数据库或 Azure Synapse Analytics(以前称为 Azure SQL DW)共享的先决条件

你可以使用其中一种方法来通过 Azure SQL 数据库或 Azure Synapse Analytics(以前称为 Azure SQL DW)进行身份验证:

Microsoft Entra 身份验证

这些先决条件包含你将需要的身份验证,以便 Azure Data Share 可以与 Azure SQL 数据库进行连接:

  • 你将需要权限来向 SQL Server 上的数据库进行写入:Microsoft.Sql/servers/databases/write。 “参与者”角色有此权限。
  • SQL Server Microsoft Entra 管理员权限。
  • SQL Server 防火墙访问:
    1. Azure 门户中,导航到 SQL Server。 从左侧导航栏中选择“防火墙和虚拟网络”。
    2. 对于“允许 Azure 服务和资源访问此服务器”,选择“是”。
    3. 单击“+ 添加客户端 IP”。 客户端 IP 地址可能会更改,因此,下次从门户共享数据时,可能需要再次添加客户端 IP。
    4. 选择“保存”。

SQL 身份验证

可以按照分步演示视频来配置身份验证,或完成以下每个先决条件:

  • 向 SQL Server 上的数据库进行写入的权限:Microsoft.Sql/servers/databases/write。 “参与者”角色有此权限。

  • Azure Data Share 资源托管标识访问数据库的权限:

    1. Azure 门户中,导航到 SQL Server 并将自己设置为 Microsoft Entra 管理员

    2. 使用 查询编辑器 或 SQL Server Management Studio 和 Microsoft Entra 身份验证连接Azure SQL 数据库/数据仓库。

    3. 执行以下脚本,以将 Data Share 资源托管标识添加为 db_datareader。 使用 Active Directory 而非 SQL Server 身份验证进行连接。

      create user "<share_acct_name>" from external provider;     
      exec sp_addrolemember db_datareader, "<share_acct_name>"; 
      

      注意

      请注意,<share_acc_name> 是 Data Share 资源的名称。

  • 具有“db_datareader”访问权限的 Azure SQL 数据库用户,可以浏览和选择要共享的表或视图

  • SQL Server 防火墙访问权限:

    1. Azure 门户中,导航到 SQL Server。 从左侧导航栏中选择“防火墙和虚拟网络”。
    2. 对于“允许 Azure 服务和资源访问此服务器”,选择“是”。
    3. 单击“+ 添加客户端 IP”。 客户端 IP 地址可能会更改,因此,下次从门户共享数据时,可能需要再次添加客户端 IP。
    4. 选择“保存”。

从 Azure Synapse Analytics(工作区)SQL 池共享的先决条件

  • 在 Synapse 工作区中写入 SQL 池的权限:Microsoft.Synapse/workspaces/sqlPools/write。 “参与者”角色有此权限。

  • Data Share 资源托管标识访问 Synapse 工作区 SQL 池的权限:

    1. Azure 门户中,导航到 Synapse 工作区。 从左侧导航中选择 SQL Active Directory 管理员 ,并将自己设置为 Microsoft Entra 管理员

    2. 打开 Synapse Studio,从左侧导航栏中选择“管理”。 在“安全性”下选择“访问控制”。 为自己分配“SQL 管理员”或“工作区管理员”角色

    3. 在 Synapse Studio 中,从左侧导航栏中选择“开发”。 在 SQL 池中执行以下脚本,以将 Data Share 资源托管标识添加为 db_datareader。

      create user "<share_acct_name>" from external provider;     
      exec sp_addrolemember db_datareader, "<share_acct_name>"; 
      

      注意

      请注意,<share_acc_name> 是 Data Share 资源的名称。

  • Synapse 工作区防火墙访问权限:

    1. Azure 门户中,导航到 Synapse 工作区。 从左侧导航栏中选择“防火墙”。
    2. 对于“允许 Azure 服务和资源访问此工作区”,选择“启用”。
    3. 单击“+ 添加客户端 IP”。 客户端 IP 地址可能会更改,因此,下次从门户共享数据时,可能需要再次添加客户端 IP。
    4. 选择“保存”。

创建共享

  1. 导航到 Data Share 概览页。

    Screenshot showing the data share overview.

  2. 选择“开始共享数据” 。

  3. 选择“创建” 。

  4. 填写共享的详细信息。 指定名称、共享类型、共享内容说明以及使用条款(可选)。

    Screenshot of the share creation page in Azure Data Share, showing the share name, type, description, and terms of used filled out.

  5. 选择“继续”。

  6. 若要向共享添加数据集,请选择“添加数据集”。

    Screenshot of the datasets page in share creation, the add datasets button is highlighted.

  7. 选择要添加的数据集类型。 将会看到一个不同的数据集类型列表,具体取决于你在上一步中选择的共享类型(快照或就地)。

    Screenshot showing the available dataset types.

  8. 选择 SQL 服务器或 Synapse 工作区。 如果使用 Microsoft Entra 身份验证,检查框允许 Data Share 代表我运行上述“创建用户”SQL 脚本,检查检查框。 如果正在使用 SQL 身份验证,请提供凭据,并确保你已遵循先决条件,以确保你具有权限。

    选择“下一步”导航到要共享的对象,然后选择“添加数据集”。 可以从 Azure SQL 数据库和 Azure Synapse Analytics(以前的 Azure SQL DW)中选择表和视图,或从 Azure Synapse Analytics(工作区)专用 SQL 池中选择表。

    Screenshot showing the Azure SQL Database dataset window with a SQL server selected.

  9. 在“接收者”选项卡中,选择“+ 添加接收者”,输入数据使用者的电子邮件地址。 电子邮件地址需为收件人的 Azure 登录电子邮件。

    Screenshot of the recipients page, showing a recipient added.

  10. 选择“继续”。

  11. 如果已选择了快照共享类型,则可以配置快照计划来向数据使用者提供数据更新。

    Screenshot of the settings page, showing the snapshot toggle enabled.

  12. 选择开始时间和重复周期间隔。

  13. 选择“继续”。

  14. 在“查看 + 创建”选项卡中查看包内容、设置、接收者和同步设置。 选择创建

你的 Azure Data Share 现已创建,Data Share 的接收者现已可以接受你的邀请。

接收数据的先决条件

在可以接受数据共享邀请之前,需要准备环境。

在接受数据共享邀请之前,确认所有先决条件已完成:

此外,对于将在其中存储已接收数据的资源,还必须具备先决条件。 选择你的资源类型,然后执行以下步骤:

目标存储帐户的先决条件

如果选择将数据接收到 Azure 存储,请在接受数据共享之前完成这些先决条件:

  • Azure 存储帐户
  • 向存储帐户进行写入的权限:Microsoft.Storage/storageAccounts/write。 “参与者”角色有此权限。
  • 将数据共享资源托管标识的角色分配添加到存储帐户所需的权限:此权限位于 Microsoft.Authorization/role assignments/write 中。 “所有者”角色有此权限。

将数据接收到 Azure SQL 数据库或 Azure Synapse Analytics(以前称为 Azure SQL DW)的先决条件

对于作为 SQL Server 的 Microsoft Entra 管理员的 SQL Server,请在接受数据共享之前完成以下先决条件:

  • Azure SQL 数据库Azure Synapse Analytics(以前称为 Azure SQL DW)
  • 向 SQL Server 上的数据库进行写入的权限:Microsoft.Sql/servers/databases/write。 “参与者”角色有此权限。
  • SQL Server 防火墙访问:
    1. Azure 门户中,导航到 SQL Server。 从左侧导航栏中选择“防火墙和虚拟网络”。
    2. 对于“允许 Azure 服务和资源访问此服务器”,选择“是”。
    3. 单击“+ 添加客户端 IP”。 客户端 IP 地址可能会更改,因此,下次从门户共享数据时,可能需要再次添加客户端 IP。
    4. 选择“保存”。

对于不是 Microsoft Entra 管理员SQL Server,请在接受数据共享之前完成以下先决条件:

可按照分步演示视频或以下步骤配置先决条件。

  • Azure SQL 数据库Azure Synapse Analytics(以前称为 Azure SQL DW)

  • 向 SQL Server 上的数据库进行写入的权限:Microsoft.Sql/servers/databases/write。 “参与者”角色有此权限。

  • Data Share 资源托管标识用于访问 Azure SQL 数据库或 Azure Synapse Analytics 的权限:

    1. Azure 门户中,导航到 SQL Server 并将自己设置为 Microsoft Entra 管理员

    2. 使用 查询编辑器 或 SQL Server Management Studio 和 Microsoft Entra 身份验证连接Azure SQL 数据库/数据仓库。

    3. 执行以下脚本,以将 Data Share 托管标识添加为“db_datareader, db_datawriter, db_ddladmin”。

      create user "<share_acc_name>" from external provider; 
      exec sp_addrolemember db_datareader, "<share_acc_name>"; 
      exec sp_addrolemember db_datawriter, "<share_acc_name>"; 
      exec sp_addrolemember db_ddladmin, "<share_acc_name>";
      

      注意

      请注意,<share_acc_name> 是 Data Share 资源的名称。

  • SQL Server 防火墙访问权限:

    1. Azure 门户中,导航到 SQL Server 并选择“防火墙和虚拟网络”
    2. 对于“允许 Azure 服务和资源访问此服务器”,选择“是”。
    3. 单击“+ 添加客户端 IP”。 客户端 IP 地址可能会更改,因此,下次从门户共享数据时,可能需要再次添加客户端 IP。
    4. 选择“保存”。

将数据接收到 Azure Synapse Analytics(工作区)SQL 池的先决条件

  • Azure Synapse Analytics(工作区)专用 SQL 池。 目前不支持将数据接收到无服务器 SQL 池中。

  • 在 Synapse 工作区中写入 SQL 池的权限:Microsoft.Synapse/workspaces/sqlPools/write。 “参与者”角色有此权限。

  • Data Share 资源的托管标识用于访问 Synapse 工作区 SQL 池的权限:

    1. Azure 门户中,导航到 Synapse 工作区。

    2. 从左侧导航栏中选择“SQL Active Directory 管理员”,将你自己设置为“Microsoft Entra 管理员”

    3. 打开 Synapse Studio,从左侧导航栏中选择“管理”。 在“安全性”下选择“访问控制”。 为自己分配“SQL 管理员”或“工作区管理员”角色

    4. 在 Synapse Studio 中,从左侧导航栏中选择“开发”。 在 SQL 池中执行以下脚本,以将 Data Share 资源托管标识添加为“db_datareader, db_datawriter, db_ddladmin”。

      create user "<share_acc_name>" from external provider; 
      exec sp_addrolemember db_datareader, "<share_acc_name>"; 
      exec sp_addrolemember db_datawriter, "<share_acc_name>"; 
      exec sp_addrolemember db_ddladmin, "<share_acc_name>";
      

      注意

      请注意,<share_acc_name> 是 Data Share 资源的名称。

  • Synapse 工作区防火墙访问权限:

    1. Azure 门户中,导航到 Synapse 工作区。 从左侧导航栏中选择“防火墙”。
    2. 对于“允许 Azure 服务和资源访问此工作区”,选择“启用”。
    3. 单击“+ 添加客户端 IP”。 客户端 IP 地址可能会更改。 下次从 Azure 门户共享 SQL 数据时,可能需要重复此过程。
    4. 选择“保存”。

接收共享数据

打开邀请

可以从电子邮件或直接从 Azure 门户打开邀请。

若要从电子邮件打开邀请,请检查收件箱中是否有来自数据提供程序的邀请。 邀请来自 Microsoft Azure,标题为“来自 yourdataprovider@domain.com 的 Azure Data Share 邀请”。 选择“查看邀请”,在 Azure 中查看邀请。

若要直接从 Azure 门户打开邀请,请在 Azure 门户中搜索“Data Share 邀请”,这样便可以查看 Data Share 邀请列表。

如果你是租户的来宾用户,则在首次查看 Data Share 邀请之前,系统将需要你验证租户的电子邮件地址。 验证后,电子邮件的有效期为 12 个月。

Screenshot of the invitations page, showing a pending invitation.

然后,选择要查看的共享。

接受邀请

  1. 确保查看所有字段,包括“使用条款”。 如果同意使用条款,则必须勾选表示同意的框。

    Screenshot of the invitation acceptance page, showing the terms of use highlighted and the agreement selected.

  2. 在“目标 Data Share 帐户”下选择要在其中部署 Data Share 的订阅和资源组。

  3. 对于“Data Share 帐户”字段,如果没有现有的 Data Share 帐户,请选择“新建”。 否则,请选择一个现有的 Data Share 帐户来接受数据共享。

  4. 对于“接收的共享名称”字段,可以保留数据提供的默认名称,或为接收的共享指定新名称。

  5. 同意使用条款并指定用于管理已接收共享的数据共享帐户以后,请选择“接受并配置”。 将创建共享订阅。

    Screenshot of the acceptance page, showing the target data share account information filled out.

如果不想接受邀请,请选择“拒绝”。

配置已接收共享

按照以下步骤配置要接收数据的位置。

  1. 选择“数据集”选项卡。选中要为其分配目标位置的数据集旁边的复选框。 选择“+ 映射到目标”以选择目标数据存储。

    Screenshot of the received shares page with the map to target button highlighted.

  2. 选择用于存储共享数据的目标资源。 目标数据存储中具有相同路径和名称的任何数据文件或表将被覆盖。 若要将数据接收到 SQL 存储,并且屏幕上显示“允许‘Data Share’以我的名义运行上述‘创建用户’SQL 脚本”复选框,请选中该复选框。 否则,请按照先决条件中的说明运行屏幕上显示的脚本。 这为 Data Share 资源提供了写入目标 SQL DB 的权限。

    Screenshot of the map datasets to target window, showing available targets in the dropdown.

  3. 对于基于快照的共享,如果数据提供程序已创建定期更新数据的快照计划,你还可以通过选择“快照计划”选项卡来启用快照计划。选中快照计划旁边的框,然后选择“+ 启用”。

    注意

    第一个计划快照将在计划时间的一分钟内启动,后续快照将在计划时间的几秒内启动。

    Screenshot showing the snapshot schedule tab with the enable button selected.

触发快照

这些步骤仅适用于基于快照的共享。

  1. 可以通过依次选择“详细信息”选项卡、“触发快照”来触发快照 。 在这里,可以触发数据的完整快照。 如果是首次从数据提供者处接收数据,请选择完整副本。 正在执行快照时,在上一个快照完成之前,后续快照无法启动。

    Screenshot of the received shares page, showing the trigger snapshot dropdown selected and the full copy option highlighted.

  2. 如果上次运行状态为“成功”,请转到目标数据存储来查看接收的数据。 选择“数据集”,然后选择“目标路径”中的链接。

    Screenshot of the datasets tab showing a successful dataset selected.

查看历史记录

此步骤仅适用于基于快照的共享。 若要查看快照历史记录,请选择“历史记录”选项卡。在这里可以找到包含过去 30 天生成的所有快照的历史记录。

快照性能

SQL 快照性能受多种因素的影响。 始终建议执行你自己的性能测试。 下面是影响性能的一些示例因素。

  • 源或目标数据存储每秒输入/输出操作数 (IOPS) 和带宽。
  • 源和目标 SQL 数据存储的硬件配置(例如:vCore、内存、DWU)。
  • 并行访问源数据存储和目标数据存储。 如果要从同一个 SQL 数据存储共享多个表和视图,或者将多个表和视图接收到同一个 SQL 数据存储中,则性能会受到影响。
  • 源数据存储和目标数据存储之间的网络带宽,以及源数据存储和目标数据存储的位置。
  • 要共享的表和视图的大小。 SQL 快照共享会完整复制整个表。 如果表的大小随着时间的推移而增长,则快照会耗用更长时间。

对于需要增量更新的大型表,可以将更新导出到存储帐户,并使用存储帐户的增量共享功能来提高性能。

排查快照失败问题

快照失败的最常见原因是 Data Share 对源或目标数据存储的权限不够。 若要向源或目标授予 Data Share 权限Azure SQL 数据库或 Azure Synapse Analytics(以前为 Azure SQL DW),必须使用 Microsoft Entra 身份验证连接到 SQL 数据库时运行提供的 SQL 脚本。 若要排查其他 SQL 快照故障,请参阅排查快照故障

后续步骤

你已了解如何使用 Azure Data Share 服务从 SQL 源共享和接收数据。 若要详细了解如何从其他数据源共享,请阅读支持的数据存储