Adatok másolása az Azure Blobból az Azure SQL Database-be az Azure Data Factory segítségével

A következőkre vonatkozik: Azure Data Factory Azure Synapse Analytics

Tipp.

Próbálja ki a Data Factoryt a Microsoft Fabricben, amely egy teljes körű elemzési megoldás a nagyvállalatok számára. A Microsoft Fabric az adattovábbítástól az adatelemzésig, a valós idejű elemzésig, az üzleti intelligenciáig és a jelentéskészítésig mindent lefed. Ismerje meg, hogyan indíthat új próbaverziót ingyenesen!

Ebben az oktatóanyagban olyan adat-előállító folyamatot hoz létre, amely az Azure Blob Storage-ból az Azure SQL Database-be másol adatokat. Az oktatóanyagban szereplő konfigurációs minta fájlalapú adattárból relációs adattárba való másolásra vonatkozik. A forrásként és fogadóként támogatott adattárak listáját a támogatott adattárak és formátumok című témakörben találja.

Ebben az oktatóanyagban a következő lépéseket kell elvégeznie:

  • Adat-előállító létrehozása
  • Azure Storage-beli és Azure SQL Database-beli társított szolgáltatások létrehozása
  • Azure Blob- és Azure SQL Database-adatkészletek létrehozása
  • Másolási tevékenységet tartalmazó folyamat létrehozása
  • Folyamat futásának indítása
  • A folyamat és a tevékenységek futásának monitorozása

Ez az oktatóanyag a .NET SDK-t használja. Más mechanizmusokat is használhat az Azure Data Factoryvel való interakcióhoz; a rövid útmutatókban lévő példákra hivatkozhat.

Ha nem rendelkezik Azure-előfizetéssel, mindössze néhány perc alatt létrehozhat egy ingyenes Azure-fiókot a virtuális gép létrehozásának megkezdése előtt.

Előfeltételek

  • Egy Azure Storage-fiók. A blobtárolót használjuk forrás adattárként. Ha nem rendelkezik Azure Storage-fiókkal, olvassa el az Általános célú tárfiók létrehozása című témakört.
  • Azure SQL Database Ezt az adatbázist használjuk fogadó adattárként. Ha nem rendelkezik adatbázissal az Azure SQL Database-ben, tekintse meg az Adatbázis létrehozása az Azure SQL Database-ben című témakört.
  • Visual Studio. A cikk bemutatója a Visual Studio 2019-et használja.
  • Azure SDK for .NET.
  • Microsoft Entra-alkalmazás. Ha nem rendelkezik Microsoft Entra-alkalmazással, olvassa el a Microsoft Entra-alkalmazás létrehozása című szakaszt a Hogyan: A portál használata Microsoft Entra-alkalmazás létrehozásához. Másolja ki a következő értékeket a későbbi lépésekben való használathoz: alkalmazás-(ügyfél-) azonosító, hitelesítési kulcs és címtár-(bérlői) azonosító. Rendelje hozzá az alkalmazást a közreműködői szerepkörhöz az ugyanabban a cikkben található utasításokat követve.

Blob és SQL-tábla létrehozása

Most készítse elő az Azure Blobot és az Azure SQL Database-t az oktatóanyaghoz egy forrásblob és egy fogadó SQL-tábla létrehozásával.

Forrás blob létrehozása

Először hozzon létre egy forrásblobot egy tároló létrehozásával és egy bemeneti szövegfájl feltöltésével:

  1. Nyissa meg a Jegyzettömb. Másolja ki a következő szöveget, és mentse helyileg egy inputEmp.txt nevű fájlba.

    John|Doe
    Jane|Doe
    
  2. Az adfv2tutorial tároló létrehozásához és az inputEmp.txt fájl tárolóba való feltöltéséhez használjon olyan eszközt, mint az Azure Storage Explorer.

Fogadó SQL-tábla létrehozása

Ezután hozzon létre egy fogadó SQL-táblát:

  1. A következő SQL-szkripttel hozza létre a dbo.emp táblát az Azure SQL Database-ben.

    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. Az Azure-szolgáltatások hozzáférésének engedélyezése az SQL Database-hez. Győződjön meg arról, hogy engedélyezi az Azure-szolgáltatások elérését a kiszolgálón, hogy a Data Factory szolgáltatás adatokat írjon az SQL Database-be. A beállítás ellenőrzéséhez és bekapcsolásához hajtsa végre a következő lépéseket:

    1. Lépjen az Azure Portalra az SQL Server kezeléséhez. SQL-kiszolgálók keresése és kiválasztása.

    2. Válassza ki a kiszolgálót.

    3. Az SQL Server menü Biztonsági fejlécében válassza a Tűzfalak és virtuális hálózatok lehetőséget.

    4. A Tűzfal és a virtuális hálózatok lapon, az Azure-szolgáltatások és -erőforrások hozzáférésének engedélyezése a kiszolgálóhoz területen válassza a BE lehetőséget.

Visual Studio-projekt létrehozása

A Visual Studio használatával hozzon létre egy C# .NET-konzolalkalmazást.

  1. Nyissa meg a Visual Studiót.
  2. A Start ablakban válassza az Új projekt létrehozása lehetőséget.
  3. Az Új projekt létrehozása ablakban válassza ki a Konzolalkalmazás (.NET-keretrendszer) C#-verzióját a projekttípusok listájából. Ezután válassza a Tovább gombra.
  4. Az új projekt konfigurálása ablakban adja meg az ADFv2Tutorial projektnevét. A Hely területen keresse meg és/vagy hozza létre a könyvtárat a projekt mentéséhez. Válassza a Létrehozás parancsot. Az új projekt megjelenik a Visual Studio IDE-ben.

NuGet-csomagok telepítése

Ezután telepítse a szükséges kódtárcsomagokat a NuGet-csomagkezelővel.

  1. A menüsávon válassza a Tools>NuGet Csomagkezelő> Csomagkezelő Console lehetőséget.

  2. A Csomagkezelő Konzol panelen futtassa az alábbi parancsokat a csomagok telepítéséhez. Az Azure Data Factory NuGet-csomagról további információt a Microsoft.Azure.Management.DataFactory című témakörben talál.

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

Adat-előállító ügyfél létrehozása

Data Factory-ügyfél létrehozásához kövesse az alábbi lépéseket.

  1. Nyissa meg a Program.cs fájlt, majd írja felül a meglévő using utasításokat a következő kóddal a névterekre mutató hivatkozások hozzáadásához.

    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. Adja hozzá a következő kódot a Main változókat állító metódushoz. Cserélje le a 14 helyőrzőt a saját értékeire.

    Azoknak az Azure-régióknak a listáját, amelyekben a Data Factory jelenleg elérhető, tekintse meg a régiónként elérhető termékeket. A Termékek legördülő listában válassza a Browse>Analytics>Data Factory lehetőséget. Ezután a Régiók legördülő listában válassza ki az Önt érdeklő régiókat. Megjelenik egy rács a kiválasztott régiókHoz tartozó Data Factory-termékek rendelkezésre állási állapotával.

    Megjegyzés:

    A Data Factory által használt adattárak, például az Azure Storage és az Azure SQL Database, valamint a Data Factory által használt számítások, például a HDInsight, más régiókban is lehetnek, mint a Data Factory által választott adatok.

    // 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. Adja hozzá a következő kódot az Main osztálypéldányt létrehozó metódushoz DataFactoryManagementClient . Ezzel az objektummal adat-előállítót, társított szolgáltatást, adatkészleteket és folyamatot hozhat létre. Ezenfelül ez az objektum a folyamat futása részleteinek monitorozására is használható.

    // 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 };
    

Adat-előállító létrehozása

Adja hozzá a következő kódot az Main adat-előállítót létrehozó metódushoz.

// 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);
}

Társított szolgáltatások létrehozása

Ebben az oktatóanyagban két társított szolgáltatást hoz létre a forráshoz és a fogadóhoz.

Azure Storage-beli társított szolgáltatás létrehozása

Adja hozzá a következő kódot az Main Azure Storage társított szolgáltatást létrehozó metódushoz. A támogatott tulajdonságokról és részletekről az Azure Blob társított szolgáltatás tulajdonságai című témakörben olvashat.

// 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)
);

Azure SQL Database-beli társított szolgáltatás létrehozása

Adja hozzá a következő kódot az Main Azure SQL Database társított szolgáltatást létrehozó metódushoz. A támogatott tulajdonságokról és részletekről az Azure SQL Database társított szolgáltatástulajdonságairól olvashat.

// 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)
);

Adatkészletek létrehozása

Ebben a szakaszban két adatkészletet hoz létre: egyet a forráshoz, a másikat a fogadóhoz.

Adatkészlet létrehozása a forrás Azure Blobhoz

Adja hozzá a következő kódot az Main Azure Blob-adatkészletet létrehozó metódushoz. A támogatott tulajdonságokról és részletekről az Azure Blob-adathalmaz tulajdonságai című témakörben olvashat.

Meghatároz egy adatkészletet, amely a forrásadatokat jelöli az Azure Blobban. Ez a Blob-adatkészlet az előző lépésben létrehozott Azure Storage-beli társított szolgáltatásra vonatkozik, és a következőket írja le:

  • A másolandó blob helye: FolderPath és FileName
  • A tartalom elemzését jelző blobformátum: TextFormat és annak beállításai, például az oszlopelválasztó
  • Az adatstruktúra, beleértve az oszlopneveket és az adattípusokat, amelyek ebben a példában a fogadó SQL-táblára képeznek le
// 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)
);

Adatkészlet létrehozása a fogadó Azure SQL Database-hez

Adja hozzá a következő kódot az Main Azure SQL Database-adatkészletet létrehozó metódushoz. A támogatott tulajdonságokról és részletekről az Azure SQL Database-adathalmaz tulajdonságai című témakörben olvashat.

Meghatároz egy adatkészletet, amely a fogadó adatait jelöli az Azure SQL Database-ben. Ez az adatkészlet az előző lépésben létrehozott Azure SQL Database társított szolgáltatásra vonatkozik. Emellett megadja a másolt adatokat tartalmazó SQL-táblázatot is.

// 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)
);

Folyamat létrehozása

Adja hozzá a következő kódot a Main másolási tevékenységgel rendelkező folyamatot létrehozó metódushoz. Ebben az oktatóanyagban ez a folyamat egyetlen tevékenységet tartalmaz: CopyActivitya Blob-adathalmazt forrásként, az SQL-adatkészletet pedig fogadóként. További információ a másolási tevékenység részleteiről: Copy tevékenység az Azure Data Factoryben.

// 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)
);

Folyamat futásának létrehozása

Adja hozzá a következő kódot a Main folyamatfuttatást kiváltó metódushoz.

// 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);

Folyamat futásának monitorozása

Most szúrja be a kódot a folyamatfuttatási állapotok ellenőrzéséhez és a másolási tevékenység futtatásának részleteinek lekéréséhez.

  1. Adja hozzá a következő kódot a metódushoz a Main folyamatfuttatás állapotának folyamatos ellenőrzéséhez, amíg be nem fejeződik az adatok másolása.

    // 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. Adja hozzá a következő kódot a Main másolási tevékenység futtatásának részleteit lekérő metódushoz, például az olvasott vagy írott adatok méretéhez.

    // 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();
    

A kód futtatása

Az alkalmazás összeállítása a Build Solution (Buildmegoldás létrehozása>) lehetőség választásával. Ezután indítsa el az alkalmazást a Hibakeresés indítása hibakeresés>lehetőség választásával, és ellenőrizze a folyamat végrehajtását.

A konzol megjeleníti az adat-előállító, a társított szolgáltatás, az adatkészletek, a folyamat, valamint a folyamat futása létrehozásának állapotát. Ezután ellenőrzi a folyamat futási állapotát. Várjon, amíg meg nem jelenik a másolási tevékenység részleteinek olvasási/írási méretével. Ezután olyan eszközökkel, mint az SQL Server Management Studio (SSMS) vagy a Visual Studio, csatlakozhat a cél Azure SQL Database-hez, és ellenőrizheti, hogy a megadott céltábla tartalmazza-e a másolt adatokat.

Példakimenet

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...

A példában szereplő folyamat adatokat másol az egyik helyről egy másikra egy Azure Blob Storage-ban. Megtanulta végrehajtani az alábbi műveleteket:

  • Adat-előállító létrehozása
  • Azure Storage-beli és Azure SQL Database-beli társított szolgáltatások létrehozása
  • Azure Blob- és Azure SQL Database-adatkészletek létrehozása
  • Másolási tevékenységet tartalmazó folyamat létrehozása.
  • Folyamat futásának indítása
  • A folyamat és a tevékenységek futásának monitorozása

Folytassa a következő oktatóanyaggal, amelyben azzal ismerkedhet meg, hogyan másolhat adatokat a helyszíni rendszerből a felhőbe: