Azure Data Share를 사용하여 Azure Data Explorer와 데이터 공유

파일 공유, FTP, 이메일 및 API를 통해 데이터를 공유하는 여러 가지 일반적인 방법이 있습니다. 이러한 방법을 사용하려면 두 당사자가 모두 팀과 조직 간에 데이터를 이동하는 데이터 파이프라인을 빌드하고 유지 관리해야 합니다. Azure Data Explorer를 사용하면 회사 또는 외부 파트너의 사용자와 데이터를 쉽고 안전하게 공유할 수 있습니다. 공유는 데이터 파이프라인을 빌드하거나 유지 관리하지 않고도 거의 실시간으로 발생합니다. 공급자 쪽에서 스키마 및 데이터를 포함한 모든 데이터베이스 변경 내용을 소비자 쪽에서 즉시 사용할 수 있습니다.

Azure Friday 동영상

Azure Data Explorer는 고객이 동일한 기본 스토리지에서 여러 컴퓨팅(읽기 전용) 인스턴스를 실행할 수 있도록 하는 스토리지 및 컴퓨팅을 분리합니다. 데이터베이스를 원격 클러스터의 읽기 전용 데이터베이스인 팔로워 데이터베이스로 연결할 수 있습니다.

데이터 공유 구성

Azure Data Share를 사용하여 회사 전체 또는 외부 파트너 및 고객과의 초대 및 공유를 보내고 관리합니다. Azure Data Share는 팔로워 데이터베이스를 사용하여 공급자와 소비자의 Azure Data Explorer 클러스터 간에 바로 가기 링크를 만듭니다. 이 옵션은 Azure Data Explorer 클러스터 및 기타 데이터 서비스에서 모든 데이터 공유를 보고 관리할 수 있는 단일 창을 제공합니다. 또한 Azure Data Share 사용하면 여러 Microsoft Entra 테넌트에서 조직 간에 데이터를 공유할 수 있습니다.

참고

두 클러스터의 관리자는 다양한 API를 사용하여 팔로워 데이터베이스를 직접 구성할 수 있습니다. 이는 보고를 위해 스케일 아웃하기 위해 추가 컴퓨팅이 필요한 시나리오에서 유용합니다.

다음에 대한 데이터 공유를 구성할 수 있습니다.

참고

공유 관계가 설정되면 Azure Data Share는 공급자와 소비자의 Azure Data Explorer 클러스터 사이에 바로 가기 링크를 만듭니다. 데이터 공급자가 액세스를 철회하면 바로 가기 링크가 삭제되고 공유 데이터베이스를 데이터 소비자가 더 이상 사용할 수 없습니다.

Azure Data Explorer 데이터 공유

데이터 공급자는 데이터베이스 수준 또는 클러스터 수준에서 데이터를 공유할 수 있습니다. 데이터베이스를 공유하는 클러스터는 리더 클러스터이고 공유를 수신하는 클러스터는 팔로워 클러스터입니다. 팔로워 클러스터는 하나 이상의 리더 클러스터 데이터베이스를 따를 수 있습니다. 팔로워 클러스터는 주기적으로 동기화하여 변경 내용을 확인합니다. 리더와 팔로워 간의 지연 시간은 메타데이터 및 데이터의 전체 크기에 따라 몇 초에서 몇 분까지 다양합니다. 데이터는 소비자 클러스터에 캐시되며 읽기 또는 쿼리 작업에만 사용할 수 있습니다. 단, 핫 캐싱 정책 및 데이터베이스 사용 권한을 재정의하는 것은 예외입니다. 팔로워 클러스터에서 실행되는 쿼리는 로컬 캐시를 사용하며 리더 클러스터의 리소스를 사용하지 않습니다.

사전 요구 사항

데이터 공유 흐름

  1. 공급자는 Azure Data Share 리소스를 사용하여 전체 데이터베이스 또는 특정 테이블을 공유하고 수신자의 이메일 주소를 지정합니다.
  2. Azure Data Share는 수신자에게 이메일 초대를 보냅니다.
  3. 수신자가 이메일 초대를 열고 해당 Azure Data Share 리소스를 선택합니다.
  4. 수신자는 Azure Data Share를 사용하여 공유 데이터베이스 또는 테이블을 적절한 클러스터에 매핑합니다.

데이터 공급자 - 데이터 공유

데이터 공급자는 전체 데이터베이스 또는 특정 테이블을 수신자와 공유할 수 있습니다.

전체 데이터베이스 공유

비디오의 지침에 따라 Azure Data Share 계정을 만들고, 데이터 세트를 추가하고, 초대를 보냅니다. 데이터 공급자 - 데이터 공유

테이블 공유

Azure Resource Manager 템플릿을 사용하여 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 Portal 또는 PowerShell을 사용하여 Azure Resource Manager 템플릿을 배포합니다.

    템플릿 배포.

데이터 소비자 - 데이터 수신

비디오의 지침에 따라 초대를 수락하고, 데이터 공유 계정을 만들고, 소비자 클러스터에 매핑합니다.

데이터 소비자 - 데이터 수신

이제 데이터 소비자는 Azure Data Explorer 클러스터로 이동하여 공유 데이터베이스에 대한 사용자 권한을 부여하고 데이터에 액세스할 수 있습니다. 대기 중인 수집을 사용하여 원본 Azure Data Explorer 클러스터로 수집된 데이터는 몇 초에서 몇 분 내에 대상 클러스터에 표시됩니다.

제한 사항