Hızlı Başlangıç: .NET SDK’sını kullanarak veri fabrikası ve işlem hattı oluşturma
AŞAĞıDAKILER IÇIN GEÇERLIDIR:
Azure Data Factory
Azure Synapse Analytics
Bu hızlı başlangıçta. .NET SDK'yı kullanarak bir Azure Data Factory. Bu veri fabrikasında oluşturmakta olduğu işlem hattı, verileri bir klasörden Azure blob depolama alanında başka bir klasöre kopyalar. Azure Data Factory kullanarak verileri dönüştürme hakkında bir öğretici için bkz. Öğretici: Spark kullanarak verileri dönüştürme.
Not
Bu makale, Data Factory hizmetine ayrıntılı giriş bilgileri sağlamaz. Azure Data Factory hizmetine giriş bilgileri için bkz. Azure Data Factory'ye giriş.
Önkoşullar
Azure aboneliği
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Azure rolleri
Data Factory örnekleri oluşturmak için, Azure’da oturum açarken kullandığınız kullanıcı hesabı, katkıda bulunan, sahip veya yönetici rollerinin üyesi ya da bir Azure aboneliğinin yöneticisi olmalıdır. Abonelikte sahip olduğunuz izinleri görüntülemek için Azure Portalgidin, sağ üst köşedeki Kullanıcı adınızı seçin, daha fazla seçenek için "..." simgesini seçin ve sonra izinlerim' i seçin. Birden çok aboneliğe erişiminiz varsa uygun aboneliği seçin.
Data Factory için veri kümeleri, bağlı hizmetler, işlem hatları, tetikleyiciler ve tümleştirme çalışma zamanları gibi alt kaynaklar oluşturup yönetmek için aşağıdaki gereksinimlerin karşılanması gerekir:
- Azure portal alt kaynakları oluşturmak ve yönetmek için, kaynak grubu düzeyinde veya yukarıdaki Data Factory katkıda bulunan rolüne ait olmanız gerekir.
- PowerShell veya SDK ile alt öğe oluşturup yönetebilmek için kaynak düzeyinde katkıda bulunan rolü veya daha üst düzey bir rol yeterli olacaktır.
Kullanıcı rolü eklemeye ilişkin örnek yönergeler için Rol ekleme makalesine bakın.
Daha fazla bilgi için aşağıdaki makalelere bakın:
Azure Storage hesabı
Bu hızlı başlangıçta, genel amaçlı bir Azure Depolama hesabını (özel olarak BLOB depolama) hem kaynak hem de hedef veri deposu olarak kullanırsınız. Genel amaçlı bir Azure depolama hesabınız yoksa, bir depolama hesabı oluşturmak için bkz. hesap oluşturma.
Depolama hesabı adını al
Bu hızlı başlangıç için Azure depolama hesabınızın adına ihtiyacınız vardır. Aşağıdaki yordam, depolama hesabınızın adını almak için gereken adımları sağlar:
- Bir Web tarayıcısında Azure Portal gidin ve Azure Kullanıcı adınızı ve parolanızı kullanarak oturum açın.
- Azure Portal menüsünde tüm hizmetler' i ve ardından depolama > depolama hesapları' nı seçin. Ayrıca, herhangi bir sayfadan depolama hesaplarını arayabilir ve seçebilirsiniz.
- Depolama hesapları sayfasında, depolama hesabınız için filtre uygulayın (gerekirse) ve ardından depolama hesabınızı seçin.
Ayrıca, herhangi bir sayfadan depolama hesaplarını arayabilir ve seçebilirsiniz.
Blob kapsayıcısı oluşturma
Bu bölümde, Azure Blob depolama alanında adftutorial adlı bir blob kapsayıcısı oluşturursunuz.
Depolama hesabı sayfasında genel bakış > kapsayıcıları' nı seçin.
<Account name> - Kapsayıcılar sayfasının araç çubuğunda kapsayıcı' yı seçin.
Yeni kapsayıcı iletişim kutusunda ad olarak adftutorial girin ve ardından Tamam’ı seçin. <Account name> - Kapsayıcılar sayfası, kapsayıcılar listesinde adföğreticisi içerecek şekilde güncelleştirilir.
Blob kapsayıcısı için bir giriş klasörü ve dosyası ekleyin
Bu bölümde, oluşturduğunuz kapsayıcıda giriş adlı bir klasör oluşturur ve ardından giriş klasörüne örnek bir dosya yüklersiniz. Başlamadan önce, Not defteri gibi bir metin düzenleyicisini açın ve aşağıdaki içeriğe sahip emp.txt adlı bir dosya oluşturun:
John, Doe
Jane, Doe
Dosyayı C:\ADFv2QuickStartPSH klasörüne kaydedin. (Klasör zaten mevcut değilse, oluşturun.) Sonra Azure portal geri dönüp şu adımları izleyin:
Kaldığınız <Account name> - kapsayıcılar sayfasında, güncelleştirilmiş kapsayıcı listesinden adföğreticisi ' ni seçin.
- Pencereyi kapattıysanız veya başka bir sayfaya bir sorun yaşıyorsanız, Azure Portal yeniden oturum açın.
- Azure Portal menüsünde tüm hizmetler' i ve ardından depolama > depolama hesapları' nı seçin. Ayrıca, herhangi bir sayfadan depolama hesaplarını arayabilir ve seçebilirsiniz.
- Depolama hesabınızı seçin ve ardından kapsayıcılar > adföğreticisi' ni seçin.
Adföğreticisi kapsayıcı sayfasının araç çubuğunda karşıya yükle' yi seçin.
Blobu karşıya yükle sayfasında, dosyalar kutusunu seçin ve ardından emp.txt dosyasına gidin ve dosyayı seçin.
Gelişmiş başlık ' ı genişletin. Sayfa artık gösterildiği gibi görüntülenir:
Klasöre yükle kutusuna giriş' i girin.
Karşıya Yükle düğmesini seçin. Listede emp.txt dosyasını ve karşıya yükleme durumunu görmeniz gerekir.
BLOB yükle sayfasını kapatmak için Kapat simgesini (bir X) seçin.
Adföğreticisi kapsayıcı sayfasını açık tutun. Bu hızlı başlangıcın sonundaki çıktıyı doğrulamak için bu sayfayı kullanırsınız.
Visual Studio
Bu makaledeki kılavuzda, Visual Studio 2019 2019 lanmıştır. Visual Studio 2013, 2015 veya 2017 yordamları biraz farklılık gösterir.
Azure Active Directory’de uygulama oluşturma
Nasıl yapılır: Kaynaklara erişen bir Azure AD uygulaması ve hizmet sorumlusu oluşturmak için portalı kullanma bölümlerinden şu görevleri gerçekleştirmek için yönergeleri izleyin:
- Uygulama oluşturma Azure Active Directory içinde,bu öğreticide oluşturmakta olduğunu .NET uygulamasını temsil eden bir uygulama oluşturun. Oturum açma URL'si için, makalede gösterildiği gibi bir işlevsiz URL sağlayabilirsiniz (
https://contoso.org/exampleapp). - Oturum açma için değerleri al içinde uygulama kimliğini ve kiracı kimliğini edinin ve bu öğreticinin devamlarında kullanmak üzere bu değerleri not edin.
- Sertifikalar ve gizli diziler'dekimlik doğrulama anahtarını edin ve bu öğreticinin devamlarında kullanmak üzere bu değeri not edin.
- Uygulamayı bir role ata'da,uygulamanın abonelikte veri fabrikaları oluşturamalarını sağlayacak şekilde uygulamayı abonelik düzeyinde Katkıda Bulunan rolüne attayabilirsiniz.
Visual Studio projesi oluşturma
Ardından, Visual Studio'de bir C# .NET konsol uygulaması oluşturun:
- Visual Studio.
- Başlangıç penceresinde Yeni proje konsol uygulaması oluştur > (yeni bir proje .NET Framework) seçin. .NET sürüm 4.5.2 veya üzeri gereklidir.
- Ad Project ADFv2QuickStart girin.
- Projeyi oluşturmak için Oluştur'u seçin.
NuGet paketlerini yükleme
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. Daha fazla bilgi için bkz. Microsoft.Azure.Management.DataFactory nuget paketi.
Install-Package Microsoft.Azure.Management.DataFactory Install-Package Microsoft.Azure.Management.ResourceManager -IncludePrerelease Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
Veri fabrikası istemcisi oluşturma
Program.cs dosyasını açın ve ad alanlarına başvurular eklemek için aşağıdaki deyimleri ekleyin.
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;Aşağıdaki kodu, değişkenleri ayarlayan Main yöntemine ekleyin. Yer tutucuları kendi değerleriniz ile değiştirin. Data Factory'nin kullanılabileceği Azure bölgelerinin bir listesi için bir sonraki sayfada ilgilendiğiniz bölgeleri seçin ve Analytics'i genişleterek Data Factory: Products available by region (Bölgeye göre kullanılabilir durumdaki ürünler) bölümünü bulun. Veri fabrikası tarafından kullanılan veri depoları (Azure Depolama, Azure SQL Veritabanı ve daha fazlası) ve işlem (HDInsight ve diğerleri) başka 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 where the data factory resides>"; string resourceGroup = "<your resource group where the data factory resides>"; string region = "<the location of your resource group>"; string dataFactoryName = "<specify the name of data factory to create. It must be globally unique.>"; string storageAccount = "<your storage account name to copy data>"; string storageKey = "<your storage account key>"; // specify the container and input folder from which all files // need to be copied to the output folder. string inputBlobPath = "<path to existing blob(s) to copy data from, e.g. containername/inputdir>"; //specify the contains and output folder where the files are copied string outputBlobPath = "<the blob path to copy data to, e.g. containername/outputdir>"; // name of the Azure Storage linked service, blob dataset, and the pipeline string storageLinkedServiceName = "AzureStorageLinkedService"; string blobDatasetName = "BlobDataset"; string pipelineName = "Adfv2QuickStartPipeline";
Not
Bağımsız bulutlar için ActiveDirectoryAuthority ve ResourceManagerUrl (BaseUri) için buluta özgü uygun uç noktaları kullanabilirsiniz. Örneğin US Azure Gov'da yerine yetkisini, yerine de kullanır ve ardından veri https://login.microsoftonline.us https://login.microsoftonline.com fabrikası yönetim https://management.usgovcloudapi.net https://management.azure.com/ istemcisini oluşturabilirsiniz. "Get-AzEnvironment | Format-List" (Her bulut ortamı için uç noktaların bir listesini) dönecektir.
Aşağıdaki kodu DataFactoryManagementClient sınıfının bir örneğini oluşturan Main yöntemine 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.microsoftonline.com/" + 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
Aşağıdaki kodu veri fabrikası oluşturan Main yöntemine ekleyin.
// Create a data factory
Console.WriteLine("Creating 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ı hizmet oluşturma
Aşağıdaki kodu bir Azure Depolama bağlı hizmeti oluşturan Main yöntemine ekleyin.
Veri depolarınızı ve işlem hizmetlerinizi veri fabrikasına bağlamak için veri fabrikasında bağlı hizmetler oluşturursunuz. Bu Hızlı Başlangıçta, hem kopyalama kaynağı hem de havuz deposu için tek bir Azure Depolama bağlı hizmeti oluşturmanız gerekir; örnekte "AzureStorageLinkedService" olarak adlandırılmıştır.
// 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));
Veri kümesi oluşturma
Aşağıdaki kodu bir Azure blob veri kümesi oluşturan Main yöntemine ekleyin.
Bir kaynaktan havuza kopyalanacak verileri temsil eden bir veri kümesi tanımlayın. Bu örnekte, bu Blob veri kümesi önceki adımda oluşturduğunuz Azure Depolama bağlı hizmetine başvurur. Veri kümesi, değeri veri kümesini kullanan bir etkinlikte tanımlanmış bir parametre alır. parametresi, verilerin bulunduğu/depolandığı yeri işaret eden "folderPath" oluşturmak için kullanılır.
// Create an Azure Blob dataset
Console.WriteLine("Creating dataset " + blobDatasetName + "...");
DatasetResource blobDataset = new DatasetResource(
new AzureBlobDataset
{
LinkedServiceName = new LinkedServiceReference
{
ReferenceName = storageLinkedServiceName
},
FolderPath = new Expression { Value = "@{dataset().path}" },
Parameters = new Dictionary<string, ParameterSpecification>
{
{ "path", new ParameterSpecification { Type = ParameterType.String } }
}
}
);
client.Datasets.CreateOrUpdate(
resourceGroup, dataFactoryName, blobDatasetName, blobDataset);
Console.WriteLine(
SafeJsonConvert.SerializeObject(blobDataset, client.SerializationSettings));
İşlem hattı oluşturma
Aşağıdaki kodu bir kopyalama etkinliği ile işlem hattı oluşturan Main yöntemine ekleyin.
Bu örnekte, bu işlem hattı bir etkinlik içerir ve iki parametre alır: giriş blob yolu ve çıkış blob yolu. Bu parametrelerin değerleri, işlem hattı tetiklendiğinde/çalıştırıldığında ayarlanır. Kopyalama etkinliği, önceki adımda girdi ve çıktı olarak oluşturulmuş blob veri kümesini ifade eder. Veri kümesi bir girdi veri kümesi olarak kullanıldığında girdi yolu belirtilir. Ayrıca, veri kümesi bir çıktı veri kümesi olarak kullanıldığında çıktı yolu belirtilir.
// Create a pipeline with a copy activity
Console.WriteLine("Creating pipeline " + pipelineName + "...");
PipelineResource pipeline = new PipelineResource
{
Parameters = new Dictionary<string, ParameterSpecification>
{
{ "inputPath", new ParameterSpecification { Type = ParameterType.String } },
{ "outputPath", new ParameterSpecification { Type = ParameterType.String } }
},
Activities = new List<Activity>
{
new CopyActivity
{
Name = "CopyFromBlobToBlob",
Inputs = new List<DatasetReference>
{
new DatasetReference()
{
ReferenceName = blobDatasetName,
Parameters = new Dictionary<string, object>
{
{ "path", "@pipeline().parameters.inputPath" }
}
}
},
Outputs = new List<DatasetReference>
{
new DatasetReference
{
ReferenceName = blobDatasetName,
Parameters = new Dictionary<string, object>
{
{ "path", "@pipeline().parameters.outputPath" }
}
}
},
Source = new BlobSource { },
Sink = new BlobSink { }
}
}
};
client.Pipelines.CreateOrUpdate(resourceGroup, dataFactoryName, pipelineName, pipeline);
Console.WriteLine(SafeJsonConvert.SerializeObject(pipeline, client.SerializationSettings));
İşlem hattı çalıştırması oluşturma
Aşağıdaki kodu bir işlem hattı çalıştırması tetikleyen****Main yöntemine ekleyin.
Bu kod ayrıca işlem hattında belirtilen inputPath ve outputPath parametrelerinin değerlerini kaynak ve havuz blob yollarının gerçek değerleriyle ayarlar.
// Create a pipeline run
Console.WriteLine("Creating pipeline run...");
Dictionary<string, object> parameters = new Dictionary<string, object>
{
{ "inputPath", inputBlobPath },
{ "outputPath", outputBlobPath }
};
CreateRunResponse runResponse = client.Pipelines.CreateRunWithHttpMessagesAsync(
resourceGroup, dataFactoryName, pipelineName, parameters: parameters
).Result.Body;
Console.WriteLine("Pipeline run ID: " + runResponse.RunId);
İşlem hattı çalıştırmasını izleme
Veri kopyalama işlemi tamamlanıncaya kadar durumu sürekli olarak denetlemek için aşağıdaki kodu Main yöntemine 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" || pipelineRun.Status == "Queued") 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 Main yöntemine aşağıdaki kodu 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
Uygulamayı derleyip başlatın, ardından 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. Okuma/yazma verileri boyutuna sahip kopyalama etkinliği çalıştırma ayrıntılarını görene kadar bekleyin. Ardından blobların değişkenlerde belirttiğiniz Azure Depolama Gezgini "inputBlobPath" tarafından "outputBlobPath" yolu"nuna kopyalanmış olup olamay için Azure Depolama Gezgini gibi araçları kullanın.
Örnek çıktı
Creating data factory SPv2Factory0907...
{
"identity": {
"type": "SystemAssigned"
},
"location": "East US"
}
Creating linked service AzureStorageLinkedService...
{
"properties": {
"type": "AzureStorage",
"typeProperties": {
"connectionString": {
"value": "DefaultEndpointsProtocol=https;AccountName=<storageAccountName>;AccountKey=<storageAccountKey>",
"type": "SecureString"
}
}
}
}
Creating dataset BlobDataset...
{
"properties": {
"type": "AzureBlob",
"typeProperties": {
"folderPath": {
"value": "@{dataset().path}",
"type": "Expression"
}
},
"linkedServiceName": {
"referenceName": "AzureStorageLinkedService",
"type": "LinkedServiceReference"
},
"parameters": {
"path": {
"type": "String"
}
}
}
}
Creating pipeline Adfv2QuickStartPipeline...
{
"properties": {
"activities": [
{
"type": "Copy",
"typeProperties": {
"source": {
"type": "BlobSource"
},
"sink": {
"type": "BlobSink"
}
},
"inputs": [
{
"referenceName": "BlobDataset",
"parameters": {
"path": "@pipeline().parameters.inputPath"
},
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "BlobDataset",
"parameters": {
"path": "@pipeline().parameters.outputPath"
},
"type": "DatasetReference"
}
],
"name": "CopyFromBlobToBlob"
}
],
"parameters": {
"inputPath": {
"type": "String"
},
"outputPath": {
"type": "String"
}
}
}
}
Creating pipeline run...
Pipeline run ID: 308d222d-3858-48b1-9e66-acd921feaa09
Checking pipeline run status...
Status: InProgress
Status: InProgress
Checking copy activity run details...
{
"dataRead": 331452208,
"dataWritten": 331452208,
"copyDuration": 23,
"throughput": 14073.209,
"errors": [],
"effectiveIntegrationRuntime": "DefaultIntegrationRuntime (West US)",
"usedDataIntegrationUnits": 2,
"billedDuration": 23
}
Press any key to exit...
Çıktıyı doğrulama
İşlem hattı otomatik olarak adftutorial blob kapsayıcısı içinde çıkış klasörünü oluşturur. Ardından,emp.txt dosyasını giriş klasöründen çıkış klasörüne kopyalar.
- Yukarıdaki Azure portal blob kapsayıcısı için giriş klasörü ve dosya ekleme bölümünde durdurmuş olduğunuz adftutorial kapsayıcı sayfasında Yenile'yi seçerek çıkış klasörünü görebilirsiniz.
- Klasör listesinde çıktı'yi seçin.
- emp.txt dosyasının output klasörüne kopyalandığını onaylayın.
Kaynakları temizleme
Veri fabrikasını program aracılığıyla silmek için aşağıdaki kod satırlarını programa ekleyin:
Console.WriteLine("Deleting the data factory");
client.Factories.Delete(resourceGroup, dataFactoryName);
Sonraki adımlar
Bu örnekteki işlem hattı, verileri bir konumdan Azure blob depolama alanındaki başka bir konuma kopyalar. Daha fazla senaryoda Data Factory’yi kullanma hakkında bilgi almak için öğreticileri okuyun.