Bagikan melalui


Menyalin data dari blob Azure ke Azure SQL Database menggunakan Azure Data Factory

Azure Data Factory Azure Synapse Analytics

Petunjuk

Data Factory di Microsoft Fabric adalah generasi Azure Data Factory berikutnya, dengan arsitektur yang lebih sederhana, AI bawaan, dan fitur baru. Jika Anda baru menggunakan integrasi data, mulailah dengan Fabric Data Factory. Beban kerja ADF yang ada dapat ditingkatkan ke Fabric untuk mengakses kemampuan baru di seluruh ilmu data, analitik real time, dan pelaporan.

Dalam tutorial ini, Anda membuat alur Data Factory yang menyalin data dari Azure Blob Storage ke Azure SQL Database. Pola konfigurasi di tutorial ini berlaku untuk menyalin dari penyimpanan data berbasis file ke penyimpanan data relasional. Untuk daftar penyimpanan data yang didukung sebagai sumber dan sink, lihat penyimpanan data dan format yang didukung.

Anda mengambil langkah-langkah berikut Di tutorial ini:

  • Membuat pabrik data.
  • Buat layanan tertaut Azure Storage dan Azure SQL Database.
  • Buat Azure Blob dan himpunan data Azure SQL Database.
  • Buat alur berisi Copy activity.
  • Memulai eksekusi alur.
  • Pantau pipeline dan menjalankan aktivitas.

Tutorial ini menggunakan SDK .NET. Anda dapat menggunakan mekanisme lain untuk berinteraksi dengan Azure Data Factory; lihat sampel di bawah Quickstarts.

Jika Anda tidak memiliki langganan Azure, buat akun Azure free sebelum Memulai.

Prasyarat

Buat blob dan tabel SQL

Sekarang, siapkan Azure Blob dan Azure SQL Database Anda untuk tutorial dengan membuat blob sumber dan tabel SQL sink.

Membuat blob sumber

Pertama, buat blob sumber dengan membuat kontainer dan mengunggah file teks input ke dalamnya:

  1. Buka Notepad. Salin teks berikut dan simpan secara lokal ke file bernama inputEmp.txt.

    John|Doe
    Jane|Doe
    
  2. Gunakan alat seperti Azure Storage Explorer untuk membuat kontainer adfv2tutorial, dan untuk mengunggah file inputEmp.txt ke kontainer.

Buat tabel SQL sink

Selanjutnya, buat tabel SQL sink:

  1. Gunakan skrip SQL berikut untuk membuat tabel dbo.emp di Azure SQL Database Anda.

    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. Izinkan layanan Azure mengakses SQL Database. Pastikan Anda mengizinkan akses ke layanan Azure di server Anda sehingga layanan Data Factory dapat menulis data ke SQL Database. Untuk memverifikasi dan mengaktifkan pengaturan ini, lakukan langkah berikut:

    1. Buka portal Azure untuk mengelola server SQL Anda. Cari dan pilih server SQL.

    2. Pilih server Anda.

    3. Di bawah judul Keamanan menu server SQL, pilih Firewall dan jaringan virtual.

    4. Di halaman Firewall dan jaringan virtual, di bawah Perbolehkan layanan dan sumber daya Azure untuk mengakses server ini, pilih ON.

Membuat proyek Visual Studio

Dengan menggunakan Visual Studio, buat aplikasi konsol C# .NET.

  1. Buka Visual Studio.
  2. Di jendela Mulai, pilih Buat proyek baru.
  3. Di jendela Buat proyek baru, pilih versi C# Console App (.NET Framework) dari daftar jenis proyek. Kemudian pilih Berikutnya.
  4. Di jendela Konfigurasi proyek baru Anda, masukkan Nama proyek sebagai ADFv2Tutorial. Untuk Lokasi, telusuri ke dan/atau buat direktori untuk menyimpan proyek. Lalu pilih Buat. Proyek baru muncul di Visual Studio IDE.

Instal paket NuGet

Selanjutnya, pasang paket pustaka yang diperlukan menggunakan pengelola paket NuGet.

  1. Di bilah menu, pilih Tools>NuGet Package Manager>Package Manager Console.

  2. Di panel Package Manager Console, jalankan perintah berikut untuk menginstal paket. Untuk informasi tentang paket NuGet Azure Data Factory, lihat Microsoft.Azure. Management.DataFactory.

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

Membuat klien untuk pabrik data

Ikuti langkah berikut untuk membuat klien pabrik data.

  1. Buka Program.cs, kemudian timpa pernyataan yang ada dengan kode berikut untuk menambahkan referensi ke namespace.

    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. Tambahkan kode berikut ke Main metode yang mengatur variabel. Ganti 14 penanda dengan nilai Anda.

    Untuk melihat daftar wilayah Azure tempat Data Factory saat ini tersedia, lihat Product yang tersedia menurut wilayah. Di bawah daftar drop-down Produk, pilih Jelajahi>Analitik>Data Factory. Lalu di daftar drop-down Wilayah, pilih wilayah yang menarik minat Anda. Kisi muncul dengan status ketersediaan produk Data Factory untuk wilayah pilihan Anda.

    Catatan

    Penyimpanan data, seperti Azure Storage dan Azure SQL Database, dan komputasi, seperti HDInsight, yang digunakan Data Factory dapat berada di wilayah lain daripada yang Anda pilih untuk 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. Tambahkan kode berikut pada metode untuk membuat instance kelas DataFactoryManagementClient. Anda menggunakan objek ini untuk membuat pabrik data, layanan tertaut, himpunan data, dan alur. Anda juga menggunakan obyek ini untuk memantau detail run pipeline.

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

Membuat pabrik data

Tambahkan kode berikut ke Main metode yang membuat pabrik data.

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

Membuat layanan terhubung

Di tutorial ini, Anda membuat dua layanan tertaut untuk sumber dan sink, masing-masing.

Membuat layanan tertaut Azure Storage

Tambahkan kode berikut ke metode Main yang membuat layanan tertaut Azure Storage. Untuk informasi tentang properti dan detail yang didukung, lihat properti layanan tertaut Azure Blob.

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

Buat layanan terhubung Azure SQL Database

Tambahkan kode berikut ke metode Main yang membuat layanan tertaut Azure SQL Database. Untuk informasi tentang properti dan detail yang didukung, lihat properti layanan tertaut 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)
);

Membuat himpunan data

Di bagian ini, Anda membuat dua himpunan data: satu untuk sumber dan yang lain untuk sink.

Membuat dataset untuk sumber Azure Blob

Tambahkan kode berikut ke metode Main yang membuat himpunan data blob Azure. Untuk informasi tentang properti dan detail yang didukung, lihat properti himpunan data Azure Blob.

Anda menentukan himpunan data yang mewakili data sumber di blob Azure. Himpunan data Blob ini mengacu pada layanan tertaut Azure Storage yang Anda buat di langkah sebelumnya, dan menjelaskan:

  • Lokasi blob yang akan disalin dari: FolderPath dan FileName
  • Format blob menunjukkan cara memilah konten: TextFormat dan pengaturannya, seperti pemisah kolom
  • Struktur data, termasuk nama kolom dan jenis data, yang dipetakan dalam contoh ini ke tabel SQL tujuan.
// 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)
);

Membuat himpunan data untuk Azure SQL Database sink

Tambahkan kode berikut ke metode Main yang membuat himpunan data Azure SQL Database. Untuk informasi tentang properti dan detail yang didukung, lihat properti himpunan data Azure SQL Database.

Anda menentukan himpunan data yang mewakili data sink dalam Azure SQL Database. Himpunan data ini mengacu pada layanan tertaut Azure SQL Database yang Anda buat di langkah sebelumnya. Ini juga menentukan tabel SQL yang menyimpan data yang disalin.

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

Buat alur

Tambahkan potongan berikut ke metode Main yang membuat pipeline dengan aktivitas yang menyalin. Di tutorial ini, alur ini berisi satu aktivitas: CopyActivity, yang berperan dalam himpunan data Blob sebagai sumber dan himpunan data SQL sebagai sink. Untuk informasi tentang detail copy activity, lihat Copy activity di 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)
);

Membuat eksekusi alur

Tambahkan kode berikut ke Main metode yang memicu peluncuran pipeline.

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

Memantau jalur pipa

Sekarang masukkan kode untuk memeriksa status eksekusi alur dan untuk mendapatkan detail tentang aktivitas salinan yang dijalankan.

  1. Tambahkan kode berikut ke Main metode untuk terus memeriksa status alur hingga selesai menyalin data.

    // 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. Tambahkan kode berikut ke metode Main yang mengambil rincian eksekusi aktivitas salinan, seperti ukuran data yang dibaca atau ditulis.

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

Menjalankan kode

Membangun aplikasi dengan memilih Bangun>Bangun Solusi. Kemudian mulai aplikasi dengan memilih Debug>Mulai mendebug, dan verifikasi eksekusi alur.

Konsol mencetak progres pembuatan pabrik data, layanan tertaut, himpunan data, jalur kerja, dan eksekusi jalur kerja. Kemudian memeriksa status eksekusi pipeline. Tunggu hingga Anda melihat detail pelaksanaan aktivitas salinan dengan menunjukkan ukuran data yang dibaca/ditulis. Kemudian, menggunakan alat seperti SQL Server Management Studio (SSMS) atau Visual Studio, Anda dapat menyambungkan ke Azure SQL Database tujuan Anda dan memeriksa apakah tabel tujuan yang Anda tentukan berisi data yang disalin.

Keluaran Contoh

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

Alur dalam sampel ini menyalin data dari satu lokasi ke lokasi lain dalam penyimpanan blob Azure. Anda mempelajari cara untuk:

  • Membuat pabrik data.
  • Buat layanan tertaut Azure Storage dan Azure SQL Database.
  • Buat Azure Blob dan himpunan data Azure SQL Database.
  • Buat pipeline yang berisi aktivitas menyalin.
  • Memulai eksekusi alur.
  • Pantau pipeline dan menjalankan aktivitas.

Lanjutkan ke tutorial berikut untuk mempelajari tentang menyalin data dari lokal ke cloud: