Azure Data Factory kullanarak Azure Blob’dan Azure SQL Veritabanına veri kopyalama
UYGULANANLAR: Azure Data Factory Azure Synapse Analytics
İpucu
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:
Not Defteri'ne tıklayın. Aşağıdaki metni kopyalayın ve yerel olarak inputEmp.txt adlı bir dosyaya kaydedin.
John|Doe Jane|Doe
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:
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);
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:
SQL sunucunuzu yönetmek için Azure portalına gidin. SQL sunucularını arayın ve seçin.
Sunucunuzu seçin.
SQL server menüsünün Güvenlik başlığı altında Güvenlik duvarları ve sanal ağlar'ı seçin.
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.
- Visual Studio'yu açın.
- Başlangıç penceresinde Yeni proje oluştur'u seçin.
- 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.
- 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.
Menü çubuğunda Araçlar>NuGet Paket Yöneticisi> Paket Yöneticisi Konsolu'nu seçin.
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.
Program.cs 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;
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.
Not
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";
Sınıfın bir örneğini
DataFactoryManagementClient
oluşturan yöntemineMain
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 Main
aşağıdaki kodu 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
veFileName
- İç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: CopyActivity
Blob 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.
İş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; }
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...
İlgili içerik
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: