Kopírování dat z objektu blob Azure do Azure SQL Database pomocí Azure Data Factory

VZTAHUJE SE NA: Azure Data Factory Azure Synapse Analytics

Tip

Data Factory v Microsoft Fabric je nová generace Azure Data Factory s jednodušší architekturou, integrovanou AI a novými funkcemi. Pokud s integrací dat začínáte, začněte Fabric Data Factory. Stávající úlohy ADF lze upgradovat na Fabric pro přístup k novým funkcím v oblastech datové vědy, analýz v reálném čase a vytváření sestav.

V tomto kurzu vytvoříte kanál služby Data Factory, který kopíruje data z Azure Blob Storage do Azure SQL Database. Schéma konfigurace v tomto kurzu se vztahuje na kopírování z úložiště dat založeného na souborech do relačního úložiště dat. Seznam úložišť dat podporovaných jako zdroje a jímky najdete v podporovaných úložištích a formátech dat.

V tomto kurzu provedete následující kroky:

  • Vytvoření datové továrny
  • Vytvořte propojené služby Azure Storage a Azure SQL Database.
  • Vytvořte datové sady Azure Blob a Azure SQL Database.
  • Vytvořit kanál obsahující kopírovací aktivitu.
  • Zahajte spuštění potrubí.
  • Monitorujte kanál a běhy aktivit.

V tomto kurzu se používá sada .NET SDK. Další mechanismy můžete použít k interakci s Azure Data Factory; odkazovat na ukázky v části Quickstarts.

Pokud nemáte předplatné Azure, vytvořte si účet free Azure než začnete.

Požadavky

Vytvoření objektu blob a tabulky SQL

Teď připravte knihovnu Azure Blob a databázi Azure SQL pro ukázku vytvořením zdrojového bloku Blob a cílové tabulky SQL.

Vytvořit zdrojový objekt blob

Nejprve vytvořte zdrojový objekt blob tak, že vytvoříte kontejner a nahrajete do něj vstupní textový soubor:

  1. Otevřete Poznámkový blok. Zkopírujte následující text a uložte ho místně do souboru s názvem inputEmp.txt.

    John|Doe
    Jane|Doe
    
  2. Pomocí nástroje, jako je Průzkumník služby Azure Storage, vytvořte kontejner adfv2tutorial a nahrajte do něj soubor inputEmp.txt.

Vytvořte cílovou SQL tabulku

Dále vytvořte tabulku SQL jímky:

  1. Pomocí následujícího skriptu SQL vytvořte v Azure SQL Database tabulku dbo.emp.

    CREATE TABLE dbo.emp
    (
        ID int IDENTITY(1,1) NOT NULL,
        FirstName varchar(50),
        LastName varchar(50)
    )
    GO
    
    CREATE CLUSTERED INDEX IX_emp_ID ON dbo.emp (ID);
    
  2. Povolte Azure službám přístup ke službě SQL Database. Ujistěte se, že na serveru povolíte přístup ke službám Azure, aby služba Data Factory mohla zapisovat data do služby SQL Database. Pokud chcete toto nastavení ověřit a zapnout, proveďte následující kroky:

    1. Přejděte na portál Azure a spravujte sql server. Vyhledejte a vyberte SQL servery.

    2. Vyberte server.

    3. V části Zabezpečení nabídky SQL Serveru vyberte Firewally a virtuální sítě.

    4. Na stránce Firewall a virtuální sítě v části Volit Azure služby a prostředky pro přístup k tomuto serveru vyberte ON.

Vytvoření projektu Visual Studio

Pomocí Visual Studio vytvořte konzolovou aplikaci .NET jazyka C#.

  1. Otevřete Visual Studio.
  2. V okně Start vyberte Vytvořit nový projekt.
  3. V okně Vytvořit nový projekt zvolte v seznamu typů projektů verzi jazyka C# Console App (.NET Framework). Pak vyberte Další.
  4. V okně Konfigurujte nový projekt zadejte název projektuADFv2Tutorial. V části Umístění přejděte do adresáře nebo vytvořte adresář pro uložení projektu. Pak vyberte Vytvořit. Nový projekt se zobrazí v Visual Studio – sada IDE.

Instalace balíčků NuGet

Dále nainstalujte požadované balíčky knihovny pomocí správce balíčků NuGet.

  1. V řádku nabídek zvolte Tools>NuGet Správce balíčků>Správce balíčků Console.

  2. V podokně Správce balíčků Konzola spusťte následující příkazy pro instalaci balíčků. Informace o balíčku NuGet Azure Data Factory najdete v tématu Microsoft.Azure. Management.DataFactory.

    Install-Package Microsoft.Azure.Management.DataFactory
    Install-Package Microsoft.Azure.Management.ResourceManager -PreRelease
    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    

Vytvořte klienta datové továrny

Postupujte podle těchto kroků k vytvoření klienta pro datovou továrnu.

  1. Otevřete Program.cs a přepište existující using příkazy následujícím kódem a přidejte odkazy na obory názvů.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Rest;
    using Microsoft.Rest.Serialization;
    using Microsoft.Azure.Management.ResourceManager;
    using Microsoft.Azure.Management.DataFactory;
    using Microsoft.Azure.Management.DataFactory.Models;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    
  2. Do metody, která nastavuje proměnné, přidejte následující kód Main . Nahraďte 14 zástupných symbolů vlastními hodnotami.

    Seznam Azure oblastí, ve kterých je služba Data Factory aktuálně dostupná, najdete v tématu Products available by region. V rozevíracím seznamu Produkty zvolte Procházet>Analytics>Data Factory. Potom v rozevíracím seznamu Oblasti vyberte oblasti, které vás zajímají. Zobrazí se mřížka se stavem dostupnosti produktů Data Factory pro vybrané oblasti.

    Poznámka:

    Úložiště dat, jako jsou Azure Storage a Azure SQL Database, a také výpočetní zdroje, jako je HDInsight, které Data Factory používá, mohou být umístěny v jiných oblastech než samotná služba Data Factory.

    // Set variables
    string tenantID = "<your tenant ID>";
    string applicationId = "<your application ID>";
    string authenticationKey = "<your authentication key for the application>";
    string subscriptionId = "<your subscription ID to create the factory>";
    string resourceGroup = "<your resource group to create the factory>";
    
    string region = "<location to create the data factory in, such as East US>";
    string dataFactoryName = "<name of data factory to create (must be globally unique)>";
    
    // Specify the source Azure Blob information
    string storageAccount = "<your storage account name to copy data>";
    string storageKey = "<your storage account key>";
    string inputBlobPath = "adfv2tutorial/";
    string inputBlobName = "inputEmp.txt";
    
    // Specify the sink Azure SQL Database information
    string azureSqlConnString =
        "Server=tcp:<your server name>.database.windows.net,1433;" +
        "Database=<your database name>;" +
        "User ID=<your username>@<your server name>;" +
        "Password=<your password>;" +
        "Trusted_Connection=False;Encrypt=True;Connection Timeout=30";
    string azureSqlTableName = "dbo.emp";
    
    string storageLinkedServiceName = "AzureStorageLinkedService";
    string sqlDbLinkedServiceName = "AzureSqlDbLinkedService";
    string blobDatasetName = "BlobDataset";
    string sqlDatasetName = "SqlDataset";
    string pipelineName = "Adfv2TutorialBlobToSqlCopy";
    
  3. Do metody, která vytvoří instanci Main třídy, přidejte následující kódDataFactoryManagementClient. Tento objekt použijete k vytvoření datové továrny, propojené služby, datových sad a kanálu. Použijete ho také k monitorování podrobných informací o spuštění kanálu.

    // Authenticate and create a data factory management client
    var context = new AuthenticationContext("https://login.windows.net/" + tenantID);
    ClientCredential cc = new ClientCredential(applicationId, authenticationKey);
    AuthenticationResult result = context.AcquireTokenAsync(
        "https://management.azure.com/", cc
    ).Result;
    ServiceClientCredentials cred = new TokenCredentials(result.AccessToken);
    var client = new DataFactoryManagementClient(cred) { SubscriptionId = subscriptionId };
    

Vytvoření datové továrny

Do metody, která vytvoří datovou továrnuMain, přidejte následující kód.

// Create a data factory
Console.WriteLine("Creating a data factory " + dataFactoryName + "...");
Factory dataFactory = new Factory
{
    Location = region,
    Identity = new FactoryIdentity()
};

client.Factories.CreateOrUpdate(resourceGroup, dataFactoryName, dataFactory);
Console.WriteLine(
    SafeJsonConvert.SerializeObject(dataFactory, client.SerializationSettings)
);

while (
    client.Factories.Get(
        resourceGroup, dataFactoryName
    ).ProvisioningState == "PendingCreation"
)
{
    System.Threading.Thread.Sleep(1000);
}

Vytvoření propojených služeb

V tomto kurzu vytvoříte dvě propojené služby pro zdroj a jímku v uvedeném pořadí.

Vytvoření propojené služby Azure Storage

Do metody Main přidejte následující kód, který vytvoří propojenou službu Azure Storage. Informace o podporovaných vlastnostech a podrobnostech najdete v tématu vlastnosti služby Azure Blob propojené služby.

// Create an Azure Storage linked service
Console.WriteLine("Creating linked service " + storageLinkedServiceName + "...");

LinkedServiceResource storageLinkedService = new LinkedServiceResource(
    new AzureStorageLinkedService
    {
        ConnectionString = new SecureString(
            "DefaultEndpointsProtocol=https;AccountName=" + storageAccount +
            ";AccountKey=" + storageKey
        )
    }
);

client.LinkedServices.CreateOrUpdate(
    resourceGroup, dataFactoryName, storageLinkedServiceName, storageLinkedService
);
Console.WriteLine(
    SafeJsonConvert.SerializeObject(storageLinkedService, client.SerializationSettings)
);

Vytvoření propojené služby Azure SQL Database

Do metody Main přidejte následující kód, který vytvoří propojenou službu Azure SQL Database. Informace o podporovaných vlastnostech a podrobnostech najdete v tématu vlastnosti propojení služby Azure SQL Database.

// Create an Azure SQL Database linked service
Console.WriteLine("Creating linked service " + sqlDbLinkedServiceName + "...");

LinkedServiceResource sqlDbLinkedService = new LinkedServiceResource(
    new AzureSqlDatabaseLinkedService
    {
        ConnectionString = new SecureString(azureSqlConnString)
    }
);

client.LinkedServices.CreateOrUpdate(
    resourceGroup, dataFactoryName, sqlDbLinkedServiceName, sqlDbLinkedService
);
Console.WriteLine(
    SafeJsonConvert.SerializeObject(sqlDbLinkedService, client.SerializationSettings)
);

Vytvoření datových sad

V této části vytvoříte dvě datové sady: jednu pro zdroj, druhou pro jímku.

Vytvořit datovou sadu pro zdroj Azure Blob

Do metody Main přidejte následující kód, který vytvoří datovou sadu objektů blob Azure. Informace o podporovaných vlastnostech a podrobnostech naleznete v tématu Vlastnosti datové sady Azure Blob.

Definujete datovou sadu, která představuje data zdroje ve službě Azure Blob. Tato datová sada objektů blob odkazuje na Azure Storage propojenou službu, kterou vytvoříte v předchozím kroku, a popisuje:

  • Umístění objektu blob, ze kterého se má kopírovat: FolderPathFileName
  • Formát objektu blob označující, jak analyzovat obsah: TextFormat a jeho nastavení, například oddělovač sloupců
  • Datová struktura, včetně názvů sloupců a datových typů, které se v tomto příkladu mapují na cílovou SQL tabulku
// Create an Azure Blob dataset
Console.WriteLine("Creating dataset " + blobDatasetName + "...");
DatasetResource blobDataset = new DatasetResource(
    new AzureBlobDataset
    {
        LinkedServiceName = new LinkedServiceReference {
            ReferenceName = storageLinkedServiceName
        },
        FolderPath = inputBlobPath,
        FileName = inputBlobName,
        Format = new TextFormat { ColumnDelimiter = "|" },
        Structure = new List<DatasetDataElement>
        {
            new DatasetDataElement { Name = "FirstName", Type = "String" },
            new DatasetDataElement { Name = "LastName", Type = "String" }
        }
    }
);

client.Datasets.CreateOrUpdate(
    resourceGroup, dataFactoryName, blobDatasetName, blobDataset
);
Console.WriteLine(
    SafeJsonConvert.SerializeObject(blobDataset, client.SerializationSettings)
);

Vytvoření datové sady pro Azure SQL Database jímky

Do metody Main přidejte následující kód, který vytvoří datovou sadu Azure SQL Database. Informace o podporovaných vlastnostech a podrobnostech najdete v tématu Azure SQL Database vlastnosti datové sady.

Definujete datovou sadu, která představuje data jímky v Azure SQL Database. Tato datová sada odkazuje na Azure SQL Database propojenou službu, kterou jste vytvořili v předchozím kroku. Určuje také tabulku SQL, který obsahuje zkopírovaná data.

// Create an Azure SQL Database dataset
Console.WriteLine("Creating dataset " + sqlDatasetName + "...");
DatasetResource sqlDataset = new DatasetResource(
    new AzureSqlTableDataset
    {
        LinkedServiceName = new LinkedServiceReference
        {
            ReferenceName = sqlDbLinkedServiceName
        },
        TableName = azureSqlTableName
    }
);

client.Datasets.CreateOrUpdate(
    resourceGroup, dataFactoryName, sqlDatasetName, sqlDataset
);
Console.WriteLine(
    SafeJsonConvert.SerializeObject(sqlDataset, client.SerializationSettings)
);

Vytvořit kanál

Do metody Main, která vytvoří kanál s aktivitou kopírování, přidejte následující kód. V tomto kurzu tento kanál obsahuje jednu aktivitu: CopyActivity, která přebírá datovou sadu objektů blob jako zdroj a datovou sadu SQL jako jímku. Informace o podrobnostech copy activity najdete v tématu aktivita Copy v Azure Data Factory.

// Create a pipeline with copy activity
Console.WriteLine("Creating pipeline " + pipelineName + "...");
PipelineResource pipeline = new PipelineResource
{
    Activities = new List<Activity>
    {
        new CopyActivity
        {
            Name = "CopyFromBlobToSQL",
            Inputs = new List<DatasetReference>
            {
                new DatasetReference() { ReferenceName = blobDatasetName }
            },
            Outputs = new List<DatasetReference>
            {
                new DatasetReference { ReferenceName = sqlDatasetName }
            },
            Source = new BlobSource { },
            Sink = new SqlSink { }
        }
    }
};

client.Pipelines.CreateOrUpdate(resourceGroup, dataFactoryName, pipelineName, pipeline);
Console.WriteLine(
    SafeJsonConvert.SerializeObject(pipeline, client.SerializationSettings)
);

Vytvořte spuštění úlohy

Do metody Main, která spouští běh kanálu, přidejte následující kód .

// Create a pipeline run
Console.WriteLine("Creating pipeline run...");
CreateRunResponse runResponse = client.Pipelines.CreateRunWithHttpMessagesAsync(
    resourceGroup, dataFactoryName, pipelineName
).Result.Body;
Console.WriteLine("Pipeline run ID: " + runResponse.RunId);

Monitorování spuštění kanálu

Teď vložte kód pro kontrolu stavů běhu pipeline a získání podrobností o běhu aktivity kopírování.

  1. Do metody Main přidejte následující kód, který bude průběžně kontrolovat stavy běhu kanálu, dokud neskončí kopírování dat.

    // Monitor the pipeline run
    Console.WriteLine("Checking pipeline run status...");
    PipelineRun pipelineRun;
    while (true)
    {
        pipelineRun = client.PipelineRuns.Get(
            resourceGroup, dataFactoryName, runResponse.RunId
        );
        Console.WriteLine("Status: " + pipelineRun.Status);
        if (pipelineRun.Status == "InProgress")
            System.Threading.Thread.Sleep(15000);
        else
            break;
    }
    
  2. Do metody, která načte podrobnosti o spuštění aktivity kopírování, například velikost načtených nebo zapsaných dat, přidejte následující Main kód.

    // Check the copy activity run details
    Console.WriteLine("Checking copy activity run details...");
    
    RunFilterParameters filterParams = new RunFilterParameters(
        DateTime.UtcNow.AddMinutes(-10), DateTime.UtcNow.AddMinutes(10)
    );
    
    ActivityRunsQueryResponse queryResponse = client.ActivityRuns.QueryByPipelineRun(
        resourceGroup, dataFactoryName, runResponse.RunId, filterParams
    );
    
    if (pipelineRun.Status == "Succeeded")
    {
        Console.WriteLine(queryResponse.Value.First().Output);
    }
    else
        Console.WriteLine(queryResponse.Value.First().Error);
    
    Console.WriteLine("\nPress any key to exit...");
    Console.ReadKey();
    

Spuštění kódu

Sestavte aplikaci tak, že zvolíte Build>Build Solution. Pak spusťte aplikaci výběrem možnosti Ladit>Spustit ladění a ověřte spuštění pipeline.

Konzola vytiskne průběh vytváření datové továrny, propojené služby, datových sad, potrubí a spuštění potrubí. Potom zkontroluje stav spuštění kanálu. Počkejte, až se zobrazí podrobnosti o spuštění aktivity kopírování s velikostí čtení a zápisu dat. Potom pomocí nástrojů, jako jsou SQL Server Management Studio (SSMS) nebo Visual Studio, se můžete připojit k cílovému Azure SQL Database a zkontrolovat, jestli zadaná cílová tabulka obsahuje zkopírovaná data.

Ukázkový výstup

Creating a data factory AdfV2Tutorial...
{
  "identity": {
    "type": "SystemAssigned"
  },
  "location": "East US"
}
Creating linked service AzureStorageLinkedService...
{
  "properties": {
    "type": "AzureStorage",
    "typeProperties": {
      "connectionString": {
        "type": "SecureString",
        "value": "DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<accountKey>"
      }
    }
  }
}
Creating linked service AzureSqlDbLinkedService...
{
  "properties": {
    "type": "AzureSqlDatabase",
    "typeProperties": {
      "connectionString": {
        "type": "SecureString",
        "value": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
      }
    }
  }
}
Creating dataset BlobDataset...
{
  "properties": {
    "type": "AzureBlob",
    "typeProperties": {
      "folderPath": "adfv2tutorial/",
      "fileName": "inputEmp.txt",
      "format": {
        "type": "TextFormat",
        "columnDelimiter": "|"
      }
    },
    "structure": [
      {
        "name": "FirstName",
        "type": "String"
      },
      {
        "name": "LastName",
        "type": "String"
      }
    ],
    "linkedServiceName": {
      "type": "LinkedServiceReference",
      "referenceName": "AzureStorageLinkedService"
    }
  }
}
Creating dataset SqlDataset...
{
  "properties": {
    "type": "AzureSqlTable",
    "typeProperties": {
      "tableName": "dbo.emp"
    },
    "linkedServiceName": {
      "type": "LinkedServiceReference",
      "referenceName": "AzureSqlDbLinkedService"
    }
  }
}
Creating pipeline Adfv2TutorialBlobToSqlCopy...
{
  "properties": {
    "activities": [
      {
        "type": "Copy",
        "typeProperties": {
          "source": {
            "type": "BlobSource"
          },
          "sink": {
            "type": "SqlSink"
          }
        },
        "inputs": [
          {
            "type": "DatasetReference",
            "referenceName": "BlobDataset"
          }
        ],
        "outputs": [
          {
            "type": "DatasetReference",
            "referenceName": "SqlDataset"
          }
        ],
        "name": "CopyFromBlobToSQL"
      }
    ]
  }
}
Creating pipeline run...
Pipeline run ID: 1cd03653-88a0-4c90-aabc-ae12d843e252
Checking pipeline run status...
Status: InProgress
Status: InProgress
Status: Succeeded
Checking copy activity run details...
{
  "dataRead": 18,
  "dataWritten": 28,
  "rowsCopied": 2,
  "copyDuration": 2,
  "throughput": 0.01,
  "errors": [],
  "effectiveIntegrationRuntime": "DefaultIntegrationRuntime (East US)",
  "usedDataIntegrationUnits": 2,
  "billedDuration": 2
}

Press any key to exit...

Datový kanál v tomto příkladu kopíruje data z jednoho umístění do jiného umístění v úložišti Azure Blob. Naučili jste se:

  • Vytvoření datové továrny
  • Vytvořte propojené služby Azure Storage a Azure SQL Database.
  • Vytvořte datové sady Azure Blob a Azure SQL Database.
  • Vytvořte kanál obsahující aktivitu kopírování.
  • Zahajte spuštění potrubí.
  • Monitorujte kanál a běhy aktivit.

Pokud se chcete dozvědět víc o kopírování dat z místního prostředí do cloudu, přejděte k následujícímu kurzu: