Aracılığıyla paylaş


Azure Data Factory kullanarak Azure Blob’dan Azure SQL Veritabanına veri kopyalama

UYGULANANLAR: Azure Data Factory Azure Synapse Analytics

Bahşiş

Kuruluşlar için hepsi bir arada analiz çözümü olan Microsoft Fabric'te Data Factory'yi deneyin. Microsoft Fabric , veri taşımadan veri bilimine, gerçek zamanlı analize, iş zekasına ve raporlamaya kadar her şeyi kapsar. Yeni bir deneme sürümünü ücretsiz olarak başlatmayı öğrenin!

Bu öğreticide, Azure Blob Depolama alanından Azure SQL Veritabanına veri kopyalayan bir Data Factory işlem hattı oluşturacaksınız. Bu öğreticideki yapılandırma düzeni, dosya tabanlı bir veri deposundan ilişkisel bir veri deposuna kopyalama için geçerlidir. Kaynak ve havuz olarak desteklenen veri depolarının listesi için bkz . desteklenen veri depoları ve biçimleri.

Bu öğreticide aşağıdaki adımları uygulayacaksınız:

  • Veri fabrikası oluşturma.
  • Azure Depolama ve Azure SQL Veritabanı bağlı hizmeti oluşturma.
  • Azure Blob ve Azure SQL Veritabanı veri kümeleri oluşturma.
  • Kopyalama etkinliği içeren bir işlem hattı oluşturma.
  • Bir işlem hattı çalıştırması başlatma.
  • İşlem hattı ve etkinlik çalıştırmalarını izleme.

Bu öğreticide .NET SDK kullanılır. Azure Data Factory ile etkileşime geçmek için diğer mekanizmaları kullanabilirsiniz; Hızlı Başlangıçlar altındaki örneklere bakın.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir Azure hesabı oluşturun.

Önkoşullar

  • Azure Depolama hesabı. Blob depolama alanını kaynak veri deposu olarak kullanabilirsiniz. Azure depolama hesabınız yoksa bkz . Genel amaçlı depolama hesabı oluşturma.
  • Azure SQL Veritabanı. Veritabanını havuz veri deposu olarak kullanabilirsiniz. Azure SQL Veritabanı'da veritabanınız yoksa bkz. Azure SQL Veritabanı'da veritabanı oluşturma.
  • Visual Studio. Bu makaledeki kılavuzda Visual Studio 2019 kullanılır.
  • .NET için Azure SDK.
  • Microsoft Entra uygulaması. Microsoft Entra uygulamanız yoksa, Nasıl yapılır: Microsoft Entra uygulaması oluşturmak için portalı kullanma makalesinin Microsoft Entra uygulaması oluşturma bölümüne bakın. Sonraki adımlarda kullanmak üzere aşağıdaki değerleri kopyalayın: Uygulama (istemci) kimliği, kimlik doğrulama anahtarı ve Dizin (kiracı) kimliği. Aynı makaledeki yönergeleri izleyerek uygulamayı Katkıda Bulunan rolüne atayın.

Bir blob ve SQL tablosu oluşturma

Şimdi bir kaynak blob ve havuz SQL tablosu oluşturarak Azure Blobunuzu ve Azure SQL Veritabanı öğreticiye hazırlayın.

Kaynak blob oluşturma

İlk olarak, bir kapsayıcı oluşturup giriş metin dosyasını karşıya yükleyerek bir kaynak blob oluşturun:

  1. Not Defteri açın. Aşağıdaki metni kopyalayın ve inputEmp.txt adlı bir dosyaya yerel olarak kaydedin.

    John|Doe
    Jane|Doe
    
  2. adfv2tutorial kapsayıcısını oluşturmak ve inputEmp.txt dosyasını kapsayıcıya yüklemek için Azure Depolama Gezgini gibi bir araç kullanın.

Havuz SQL tablosu oluşturma

Ardından havuz SQL tablosu oluşturun:

  1. Azure SQL Veritabanınızda dbo.emp tablosu oluşturmak için aşağıdaki SQL betiğini kullanın.

    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. Azure hizmetlerinin SQL Veritabanı erişmesine izin verin. Data Factory hizmetinin SQL Veritabanı'a veri yazabilmesi için sunucunuzdaki Azure hizmetlerine erişime izin verin. Bu ayarı doğrulamak ve etkinleştirmek için aşağıdaki adımları uygulayın:

    1. SQL sunucunuzu yönetmek için Azure portalına gidin. SQL sunucularını arayın ve seçin.

    2. Sunucunuzu seçin.

    3. SQL server menüsünün Güvenlik başlığı altında Güvenlik duvarları ve sanal ağlar'ı seçin.

    4. Güvenlik duvarı ve sanal ağlar sayfasında, Azure hizmetlerinin ve kaynaklarının bu sunucuya erişmesine izin ver'in altında, ON'ı seçin.

Visual Studio projesi oluşturma

Visual Studio'yu kullanarak bir C# .NET konsol uygulaması oluşturun.

  1. Visual Studio'yu açın.
  2. Başlangıç penceresinde Yeni proje oluştur'u seçin.
  3. Yeni proje oluştur penceresinde, proje türleri listesinden Konsol Uygulamasının (.NET Framework) C# sürümünü seçin. Sonra İleri'yi seçin.
  4. Yeni projenizi yapılandırın penceresinde ADFv2Tutorial Proje adınıgirin. Konum için, projeyi kaydetmek için dizinine gidin ve/veya dizinini oluşturun. Daha sonra, Oluştur'u seçin. Yeni proje Visual Studio IDE'de görünür.

NuGet paketlerini yükleme

Ardından NuGet paket yöneticisini kullanarak gerekli kitaplık paketlerini yükleyin.

  1. Menü çubuğunda Araçlar>NuGet Paket Yöneticisi> Paket Yöneticisi Konsolu'nu seçin.

  2. Paket Yöneticisi Konsolu bölmesinde paketleri yüklemek için aşağıdaki komutları çalıştırın. Azure Data Factory NuGet paketi hakkında bilgi için bkz . Microsoft.Azure.Management.DataFactory.

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

Veri fabrikası istemcisi oluşturma

Veri fabrikası istemcisi oluşturmak için bu adımları izleyin.

  1. Program.cs dosyasını açın, ardından ad alanlarına başvuru eklemek için aşağıdaki kodla var olan using deyimlerin üzerine yazın.

    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. Değişkenleri ayarlayan yöntemine Main aşağıdaki kodu ekleyin. 14 yer tutucuyu kendi değerlerinizle değiştirin.

    Data Factory'nin şu anda kullanılabilir olduğu Azure bölgelerinin listesini görmek için bkz . Bölgeye göre kullanılabilir ürünler. Ürünler açılan listesinin altında Analytics>Data Factory'ye Gözat'ı>seçin. Ardından Bölgeler açılan listesinde ilginizi çekebilecek bölgeleri seçin. Seçtiğiniz bölgeler için Data Factory ürünlerinin kullanılabilirlik durumunu içeren bir kılavuz görüntülenir.

    Dekont

    Azure Depolama ve Azure SQL Veritabanı gibi veri depoları ve Data Factory'nin kullandığı HDInsight gibi hesaplamalar Data Factory için seçtiğiniz bölgelerden farklı bölgelerde olabilir.

    // 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. Sınıfın bir örneğini DataFactoryManagementClient oluşturan yöntemine Main aşağıdaki kodu ekleyin. Veri fabrikası, bağlı hizmet, veri kümeleri ve işlem hattı oluşturmak için bu nesneyi kullanırsınız. Bu nesneyi ayrıca işlem hattı ayrıntılarını izlemek için kullanabilirsiniz.

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

Veri fabrikası oluşturma

Veri fabrikası oluşturan yönteme Main aşağıdaki kodu ekleyin.

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

Bağlı hizmetler oluşturma

Bu öğreticide, kaynak ve havuz için sırasıyla iki bağlı hizmet oluşturursunuz.

Azure Depolama bağlı hizmeti oluşturma

Azure Depolama bağlı hizmeti oluşturan yönteme aşağıdaki kodu Main ekleyin. Desteklenen özellikler ve ayrıntılar hakkında bilgi için bkz . Azure Blob bağlı hizmet özellikleri.

// 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 Veritabanı bağlı hizmeti oluşturma

Azure SQL Veritabanı bağlı hizmeti oluşturan yönteme Main aşağıdaki kodu ekleyin. Desteklenen özellikler ve ayrıntılar hakkında bilgi için bkz. bağlı hizmet özelliklerini Azure SQL Veritabanı.

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

Veri kümeleri oluşturma

Bu bölümde iki veri kümesi oluşturacaksınız: biri kaynak, diğeri havuz için.

Kaynak Azure Blob için veri kümesi oluşturma

Azure blob veri kümesi oluşturan yönteme Main aşağıdaki kodu ekleyin. Desteklenen özellikler ve ayrıntılar hakkında bilgi için bkz . Azure Blob veri kümesi özellikleri.

Azure Blob’da kaynak verilerini temsil eden bir veri kümesi tanımlayın. Bu Blob veri kümesi, önceki adımda oluşturduğunuz Azure Depolama bağlı hizmetini ifade eder:

  • Kopyalanacak blobun konumu: FolderPath ve FileName
  • İçeriğin nasıl ayrıştırıldığını gösteren blob biçimi: TextFormat ve sütun sınırlayıcısı gibi ayarları
  • Bu örnekte havuz SQL tablosuyla eşlenen sütun adları ve veri türleri de dahil olmak üzere veri yapısı
// 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)
);

Havuz Azure SQL Veritabanı için veri kümesi oluşturma

Azure SQL Veritabanı veri kümesi oluşturan yönteme Main aşağıdaki kodu ekleyin. Desteklenen özellikler ve ayrıntılar hakkında bilgi için bkz. veri kümesi özelliklerini Azure SQL Veritabanı.

Azure SQL Veritabanı’nda havuz verilerini temsil eden bir veri kümesi tanımlayın. Bu veri kümesi, önceki adımda oluşturduğunuz Azure SQL Veritabanı bağlı hizmeti ifade eder. Ayrıca, kopyalanan verileri tutan SQL tablosunu belirtir.

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

İşlem hattı oluşturma

Kopyalama etkinliğiyle işlem hattı oluşturan yöntemine Main aşağıdaki kodu ekleyin. Bu öğreticide, bu işlem hattı bir etkinlik içerir: CopyActivityBlob veri kümesini kaynak olarak, SQL veri kümesini havuz olarak alır. Kopyalama etkinliği ayrıntıları hakkında bilgi için bkz. Azure Data Factory'de Kopyalama etkinliği.

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

İşlem hattı çalıştırması oluşturma

İşlem hattı çalıştırmasını tetikleyen yöntemine Main aşağıdaki kodu ekleyin.

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

İşlem hattı çalıştırmasını izleme

Şimdi işlem hattı çalıştırma durumlarını denetlemek ve kopyalama etkinliği çalıştırması hakkındaki ayrıntıları almak için kodu ekleyin.

  1. İşlem hattı çalıştırmasının durumlarını verileri kopyalamayı tamamlayana kadar sürekli denetlemek için yöntemine aşağıdaki kodu Main ekleyin.

    // 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. Okunan veya yazılan verilerin boyutu gibi kopyalama etkinliği çalıştırma ayrıntılarını alan yöntemine aşağıdaki kodu Main ekleyin.

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

Kodu çalıştırma

Derleme Çözümü Oluştur'a>tıklayarak uygulamayı derleyin. Ardından Hata Ayıklamayı Başlat Hata Ayıklama'yı> seçerek uygulamayı başlatın ve işlem hattı yürütmesini doğrulayın.

Konsol; veri fabrikası, bağlı hizmet, veri kümeleri, işlem hattı ve işlem hattı çalıştırmasının ilerleme durumunu yazdırır. Daha sonra işlem hattı çalıştırma durumunu denetler. Veri okuma/yazılı boyutuyla kopyalama etkinliği çalıştırma ayrıntılarını görene kadar bekleyin. Ardından SQL Server Management Studio (SSMS) veya Visual Studio gibi araçları kullanarak hedef Azure SQL Veritabanı bağlanabilir ve belirttiğiniz hedef tablonun kopyalanan verileri içerip içermediğini denetleyebilirsiniz.

Örnek çıktı

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

Bu örnekteki işlem hattı, verileri bir konumdan Azure blob depolama alanındaki başka bir konuma kopyalar. Şunları öğrendiniz:

  • Veri fabrikası oluşturma.
  • Azure Depolama ve Azure SQL Veritabanı bağlı hizmeti oluşturma.
  • Azure Blob ve Azure SQL Veritabanı veri kümeleri oluşturma.
  • Kopyalama etkinliği içeren bir işlem hattı oluşturun.
  • Bir işlem hattı çalıştırması başlatma.
  • İşlem hattı ve etkinlik çalıştırmalarını izleme.

Şirket içinden buluta veri kopyalama hakkında bilgi edinmek için aşağıdaki öğreticiye geçin: