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

使用 Azure Data Share 与 Azure 数据资源管理器共享数据

有许多传统的共享数据的方法,例如通过文件共享、FTP、电子邮件和 API。 这些方法要求双方构建和维护在团队和组织之间移动数据的数据管道。 借助 Azure 数据资源管理器,你可以轻松且安全地与公司内部人员或外部合作伙伴共享数据。 共享是近乎实时的,无需构建或维护数据管道。 提供程序端的所有数据库更改(包括架构和数据)在使用者端立即可用。

Azure Friday 视频。

Azure 数据资源管理器分离存储和计算,使客户能够在同一基础存储上运行多个计算(只读)实例。 你可以将数据库附加为关注者数据库,这是远程群集上的只读数据库。

配置数据共享

使用 Azure Data Share 发送和管理邀请,并在公司内部或与外部合作伙伴和客户共享。 Azure Data Share 使用关注者数据库在提供程序和使用者的 Azure 数据资源管理器群集之间创建符号链接。 此选项提供一个窗格,用于跨 Azure 数据管理器群集和其他数据服务查看和管理所有数据共享。 借助 Azure Data Share,还可以在不同的Microsoft Entra 租户中跨组织共享数据。

注意

若在两个群集中均为管理员,则该管理员可以使用各种 API 直接配置关注者数据库。 这对于需要额外计算来横向扩展以进行报告的情况很有用。

你可以为以下内容配置数据共享:

  • 整个数据库(默认)。
  • 特定表 - 表级共享

注意

建立共享关系时,Azure Data Share 会在提供者和使用者的 Azure 数据资源管理器群集之间创建符号链接。 如果数据提供者撤销访问,符号链接将被删除,并且共享数据库不再可供数据使用者使用。

Azure 数据资源管理器数据共享。

数据提供者可以在数据库级别或群集级别共享数据。 共享数据库的群集是领导者群集,接收共享的群集是追随者群集。 追随者群集可以跟随一个或多个领导者群集数据库。 追随者群集定期同步以检查更改。 领导者群集与追随者群集之间的滞后时间从几秒钟到几分钟,具体取决于元数据和数据的总体大小。 数据缓存在使用者群集中,并且仅适用于读取或查询操作,但替代热缓存策略和数据库权限除外。 在追随者群集上运行的查询使用本地缓存,不使用领导者群集的资源。

先决条件

数据共享流

  1. 提供者使用其 Azure Data Share 资源来共享完整的数据库或特定表,然后指定接收者的电子邮件地址。
  2. Azure Data Share 向接收者发送电子邮件邀请。
  3. 接收者打开电子邮件邀请并选择其 Azure Data Share 资源。
  4. 接收者使用 Azure Data Share 将共享数据库或表映射到相应群集。

数据提供者 - 共享数据

数据提供者可以与接收者共享完整的数据库或特定的表。

共享完整数据库

按照视频中的说明创建 Azure Data Share 帐户、添加数据集并发送邀请。 数据提供者 - 共享数据。

共享表

可以使用 Azure 资源管理器模板通过 Azure Data Share 共享一个或多个表。

使用以下步骤共享表:

  1. 创建模板并对数据集设置适当的参数,将限制列成表格,然后指定邀请收件人。 使用下表中的信息来帮助配置模板。

    参数 说明 示例
    accountName 提供者的 Azure Data Share 帐户的名称。
    location 所有资源的位置。 先导和后继数据库必须位于同一位置。
    shareName 将在数据共享帐户上创建的共享的名称。
    recipientEmail Azure Data Share 接收者的电子邮件。
    databaseName 提供者数据库的名称。
    databaseResourceId 提供者数据库的资源 ID。
    externalTablesToExclude 要排除的外部表的列表。 若要排除所有外部表,使用 ["*"]。 ["ExternalTable1ToExclude", "ExternalTable2ToExclude"]
    externalTablesToInclude 要包含的外部表的列表。 若要包含以“Logs”开头的外部表,请使用 ["Logs*"]。 ["ExternalTable1ToInclude", "ExternalTable2ToInclude"]
    materializedViewsToExclude 要排除的具体化视图的列表。 若要排除所有具体化视图,请使用 ["*"]。 ["Mv11ToExclude", "Mv22ToExclude"]
    materializedViewsToInclude 要包括的具体化视图的列表。 若要包括以“Logs”开头的所有具体化视图,请使用 ["Logs*"]。 ["Mv1ToInclude", "Mv2ToInclude"]
    tablesToExclude 要排除的表的列表。 若要排除所有表,请使用 ["*"]。 ["table1ToExclude", "table2ToExclude"]
    tablesToInclude 要包括的表的列表。 若要包含所有表,请使用 ["*"]。 ["table1ToInclude", "table2ToInclude"]
    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "accountName": { "type": "String" },
        "location": { "defaultValue": "[resourceGroup().location]", "type": "String" },
        "shareName": { "type": "String" },
        "recipientEmail": { "type": "String" },
        "databaseName": { "type": "String" },
        "databaseResourceId": { "type": "String" },
        "externalTablesToExclude": { "type": "Array" },
        "externalTablesToInclude": { "type": "Array" },
        "materializedViewsToExclude": { "type": "Array" },
        "materializedViewsToInclude": { "type": "Array" },
        "tablesToExclude": { "type": "Array" },
        "tablesToInclude": { "type": "Array" }
      },
      "variables": {
        "invitationSuffix": "[replace(replace(parameters('recipientEmail'),'@', '_'), '.', '_')]"
      },
      "resources": [
        {
          "type": "Microsoft.DataShare/accounts",
          "apiVersion": "2021-08-01",
          "name": "[parameters('accountName')]",
          "location": "[parameters('location')]",
          "identity": {
            "type": "SystemAssigned"
          },
          "properties": {}
        },
        {
          "type": "Microsoft.DataShare/accounts/shares",
          "apiVersion": "2021-08-01",
          "name": "[concat(parameters('accountName'), '/' , parameters('shareName'))]",
          "dependsOn": [
            "[resourceId('Microsoft.DataShare/accounts', parameters('accountName'))]"
          ],
          "properties": {
            "shareKind": "InPlace"
          }
        },
        {
          "type": "Microsoft.DataShare/accounts/shares/invitations",
          "apiVersion": "2021-08-01",
          "name": "[concat(parameters('accountName'), '/',  parameters('shareName'), '/', concat(parameters('shareName'), variables('invitationSuffix')))]",
          "dependsOn": [
            "[resourceId('Microsoft.DataShare/accounts/shares', parameters('accountName'), parameters('shareName'))]",
            "[resourceId('Microsoft.DataShare/accounts', parameters('accountName'))]"
          ],
          "properties": {
            "targetEmail": "[parameters('recipientEmail')]"
          }
        },
        {
          "type": "Microsoft.DataShare/accounts/shares/dataSets",
          "apiVersion": "2021-08-01",
          "name": "[concat(parameters('accountName'), '/', parameters('shareName'), '/', parameters('databaseName'))]",
          "dependsOn": [
            "[resourceId('Microsoft.DataShare/accounts/shares', parameters('accountName'), parameters('shareName'))]",
            "[resourceId('Microsoft.DataShare/accounts', parameters('accountName'))]"
          ],
          "kind": "KustoTable",
          "properties": {
            "kustoDatabaseResourceId": "[parameters('databaseResourceId')]",
            "tableLevelSharingProperties": {
              "externalTablesToExclude": "[parameters('externalTablesToExclude')]",
              "externalTablesToInclude": "[parameters('externalTablesToInclude')]",
              "materializedViewsToExclude": "[parameters('materializedViewsToExclude')]",
              "materializedViewsToInclude": "[parameters('materializedViewsToInclude')]",
              "tablesToExclude": "[parameters('tablesToExclude')]",
              "tablesToInclude": "[parameters('tablesToInclude')]"
            }
          }
        }
      ]
    }
    
  2. 使用 Azure 门户或 PowerShell 部署 Azure 资源管理器模板。

    模板部署。

数据使用者 - 接收数据

按照视频中的说明接受邀请、创建数据共享帐户并映射到使用者群集。

数据使用者 - 接收数据。

数据使用者现在可以转到其 Azure 数据资源管理器群集,向用户授予对共享数据库的权限并访问数据。 使用排队引入到源 Azure 数据资源管理器群集的数据将在几秒钟到几分钟内显示在目标群集上。

限制