Hızlı Başlangıç: .NET SDK kullanarak veri fabrikası ve işlem hattı oluşturma

ŞUNLARA UYGULANIR: Azure Data Factory Azure Synapse Analytics

Tip

Microsoft Fabric'daki Data Factory, daha basit bir mimariye, yerleşik yapay zekaya ve yeni özelliklere sahip yeni nesil Azure Data Factory. Veri tümleştirmeyi yeni kullanmaya başladıysanız Fabric Data Factory ile başlayın. Mevcut ADF iş yükleri veri bilimi, gerçek zamanlı analiz ve raporlama genelinde yeni özelliklere erişmek için Fabric yükseltebilir.

Bu hızlı başlangıçta, Azure Data Factory oluşturmak için .NET SDK'nın nasıl kullanılacağı açıklanmaktadır. Bu veri fabrikasında oluşturduğunuz işlem hattı, verileri bir klasörden Azure blob depolama alanındaki başka bir klasöre kopyalar. Azure Data Factory'i kullanarak verileri dönüştürme hakkında bir öğretici için "Spark kullanarak verileri dönüştürme öğreticisi"ne bakın.

Önkoşullar

Azure aboneliği

Azure aboneliğiniz yoksa başlamadan önce free hesabı oluşturun.

Azure rolleri

Data Factory örnekleri oluşturmak için, Azure oturum açmak için kullandığınız kullanıcı hesabının Azure aboneliğinin contributor veya owner rolünün veya administrator üyesi olması gerekir. Abonelikte sahip olduğunuz izinleri görüntülemek için Azure portalına gidin sağ üst köşeden kullanıcı adınızı seçin, "... daha fazla seçenek için " simgesine tıklayın ve ardından Y izinleri'yi 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ında alt kaynak oluşturmak ve yönetmek için kaynak grubu düzeyinde veya daha üst bir düzeyde Data Factory Katkıda Bulunanı rolüne ait olmanız gerekir.
  • PowerShell veya SDK ile alt kaynaklar oluşturup yönetebilmek için kaynak düzeyinde veya daha üst düzeydeki bir katkıda bulunan 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 Depolama hesabı

Bu hızlı başlangıçta hem source hem de destination veri depoları olarak genel amaçlı bir Azure Depolama hesabı (özellikle Blob depolama) kullanırsınız. Genel amaçlı bir Azure Depolama hesabınız yoksa, bir depolama hesabı oluşturmak için Depolama hesabı oluşturma bölümüne bakın.

Depolama hesabı adını alma

Bu hızlı başlangıç için Azure Depolama hesabınızın adı gerekir. Aşağıdaki yordam, depolama hesabınızın adını alma adımlarını sağlar:

  1. Web tarayıcısında Azure portalına gidin ve Azure kullanıcı adınızı ve parolanızı kullanarak oturum açın.
  2. Azure portalı menüsünden Tüm hizmetler'yi seçin ve ardından Depolama>Depolama hesapları öğesini seçin. Ayrıca herhangi bir sayfadan Depolama hesapları için arama yapabilir ve seçebilirsiniz.
  3. Depolama hesapları sayfasında depolama hesabınızı (gerekirse) filtreleyin ve ardından depolama hesabınızı seçin.

Ayrıca herhangi bir sayfadan Depolama hesapları için arama yapabilir 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şturacaksınız.

  1. Depolama hesabı sayfasından Genel Bakış

  2. <Hesap adı> - Kapsayıcıları sayfasının araç çubuğunda Kapsayıcı'yı seçin.

  3. Yeni kapsayıcı iletişim kutusunda ad olarak adftutorial girin ve ardından Tamam’ı seçin. <Hesap adı> - Kapsayıcılar sayfası, kapsayıcılar listesine adftutorial eklemek için güncellenmiştir.

    Konteynerler listesi

Blob kapsayıcısı için giriş klasörü ve dosyası ekleme

Bu bölümde, oluşturduğunuz kapsayıcıda input adlı bir klasör oluşturacak ve ardından giriş klasörüne örnek bir dosya yükleyebilirsiniz. Başlamadan önce Not Defteri gibi bir metin düzenleyicisi 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 henüz yoksa oluşturun.) Ardından Azure portalına dönün ve şu adımları izleyin:

  1. <Son bıraktığınız Hesap Adı> - Kapsayıcıları sayfasında, güncellenmiş kapsayıcı listesinden adftutorial öğesini seçin.

    1. Pencereyi kapattıysanız veya başka bir sayfaya gittiyseniz Azure portalında yeniden oturum açın.
    2. Azure portalı menüsünden Tüm hizmetler'yi seçin ve ardından Depolama>Depolama hesapları öğesini seçin. Ayrıca herhangi bir sayfadan Depolama hesapları için arama yapabilir ve seçebilirsiniz.
    3. Depolama hesabınızı seçin ve ardından Kapsayıcılar>adftutorial'i seçin.
  2. adftutorial kapsayıcı sayfasının araç çubuğunda Karşıya Yükle'yi Seç.

  3. Blobu karşıya yükle sayfasında Dosyalar kutusunu seçin ve ardından emp.txt dosyasına göz atın ve dosyayı seçin.

  4. Gelişmiş başlığını genişletin. Sayfa artık gösterildiği gibi görüntülenir:

    Gelişmiş bağlantı seçeneğini belirleme

  5. Klasöre yükle kutusuna giriş girin.

  6. Karşıya Yükle düğmesini seçin. Listede emp.txt dosyasını ve yüklemenin durumunu görmeniz gerekir.

  7. Yükleme blobu sayfasını kapatmak için Kapat simgesini (X) seçin.

adftutorial kapsayıcı sayfasını açık tutun. Bu hızlı başlangıcın sonunda çıktıyı doğrulamak için bunu kullanırsınız.

Visual Studio

Bu makaledeki kılavuzda Visual Studio 2019 kullanılır. Visual Studio 2013, 2015 veya 2017 yordamları biraz farklılık gösterir.

Microsoft Entra ID'de uygulama oluşturma

Nasıl yapılır: Kaynaklara erişebilen Microsoft Entra uygulaması ve hizmet sorumlusu oluşturmak için portalı kullanma yönergelerini izleyerek şu görevleri gerçekleştirin:

  1. Microsoft Entra uygulaması oluşturma bölümünde, bu öğreticide oluşturduğunuz .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).
  2. Oturum açmak için gereken değerleri alın, uygulama kimliğini ve kiracı kimliğini edinin ve bu öğreticinin devamında kullanacağınız bu değerleri not alın.
  3. Sertifikalar ve gizli diziler bölümünde kimlik doğrulama anahtarını alın ve bu öğreticinin ilerleyen bölümlerinde kullandığınız bu değeri not edin.
  4. Uygulamayı bir role atama bölümünde, uygulamanın abonelik seviyesinde veri fabrikaları oluşturabilmesi için Katkıda Bulunan rolüne atayın.

Visual Studio projesi oluşturma

Ardından, Visual Studio'da bir C# .NET konsol uygulaması oluşturun:

  1. Visual Studio'ı başlatın.
  2. Başlangıç penceresinde Yeni proje oluştur>Koşul Uygulaması (.NET Framework) öğesini seçin. .NET sürüm 4.5.2 veya üzeri gereklidir.
  3. Project name alanına ADFv2QuickStart girin.
  4. Projeyi oluşturmak için Oluştur'u seçin.

NuGet paketlerini yükleme

  1. Tools>NuGet Paket Yöneticisi>Paket Yöneticisi Console öğesini seçin.

  2. Paket Yöneticisi Console bölmesinde paketleri yüklemek için aşağıdaki komutları çalıştırın. Daha fazla bilgi için bkz. Azure. ResourceManager.DataFactory NuGet paketi.

    Install-Package Azure.ResourceManager.DataFactory -IncludePrerelease
    Install-Package Azure.Identity 
    

Veri fabrikası oluşturma

  1. Program.cs açın ve ad alanlarına referans eklemek için aşağıdaki deyimleri ekleyin.

    using Azure;
    using Azure.Core;
    using Azure.Core.Expressions.DataFactory;
    using Azure.Identity;
    using Azure.ResourceManager;
    using Azure.ResourceManager.DataFactory;
    using Azure.ResourceManager.DataFactory.Models;
    using Azure.ResourceManager.Resources;
    using System;
    using System.Collections.Generic;
    
  2. Aşağıdaki kodu, değişkenleri ayarlayan Main yöntemine ekleyin. Yer tutucuları kendi değerlerinizle değiştirin. Data Factory'nin şu anda kullanılabilir olduğu Azure bölgelerin listesi için aşağıdaki sayfada ilginizi çekebilecek bölgeleri seçin ve ardından Analytics'yi genişleterek Data Factory: Products by region öğesini bulun. Veri fabrikası tarafından kullanılan veri depoları (Azure Depolama, Azure SQL Veritabanı ve daha fazlası) ve işlem (HDInsight ve diğerleri) diğer 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 storageAccountName = "<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 inputBlobContainer = "<blob container to copy data from, e.g. containername>";
    string inputBlobPath = "<path to existing blob(s) to copy data from, e.g. inputdir/file>";
    //specify the contains and output folder where the files are copied
    string outputBlobContainer = "<blob container to copy data from, e.g. containername>";
    string outputBlobPath = "<the blob path to copy data to, e.g. outputdir/file>";
    
    // name of the Azure Storage linked service, blob dataset, and the pipeline
    string storageLinkedServiceName = "AzureStorageLinkedService";
    string blobDatasetName = "BlobDataset";
    string pipelineName = "Adfv2QuickStartPipeline";
    
  3. Aşağıdaki kodu veri fabrikası oluşturan Main yöntemine ekleyin.

    ArmClient armClient = new ArmClient(
        new ClientSecretCredential(tenantID, applicationId, authenticationKey, new TokenCredentialOptions
        {
            AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
        }), 
        subscriptionId, 
        new ArmClientOptions { Environment = ArmEnvironment.AzurePublicCloud }
    );
    
    ResourceIdentifier resourceIdentifier = SubscriptionResource.CreateResourceIdentifier(subscriptionId);
    SubscriptionResource subscriptionResource = armClient.GetSubscriptionResource(resourceIdentifier);
    
    Console.WriteLine("Get an existing resource group " + resourceGroupName + "...");
    var resourceGroupOperation = subscriptionResource.GetResourceGroups().Get(resourceGroupName);
    ResourceGroupResource resourceGroupResource = resourceGroupOperation.Value;
    
    Console.WriteLine("Create a data factory " + dataFactoryName + "...");
    DataFactoryData dataFactoryData = new DataFactoryData(AzureLocation.EastUS2);
    var dataFactoryOperation = resourceGroupResource.GetDataFactories().CreateOrUpdate(WaitUntil.Completed, dataFactoryName, dataFactoryData);
    Console.WriteLine(dataFactoryOperation.WaitForCompletionResponse().Content);
    
    // Get the data factory resource
    DataFactoryResource dataFactoryResource = dataFactoryOperation.Value;
    

Bağlı hizmet oluşturma

Azure Depolama bağlı hizmeti oluşturan Main yöntemine aşağıdaki kodu 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 yalnızca bir Azure Blob Depolama bağlı hizmet oluşturmanız gerekir; örnekte "AzureBlobStorageLinkedService" olarak adlandırılır.

// Create an Azure Storage linked service
Console.WriteLine("Create a linked service " + storageLinkedServiceName + "...");
AzureBlobStorageLinkedService azureBlobStorage = new AzureBlobStorageLinkedService()
{
    ConnectionString = azureBlobStorageConnectionString
};

DataFactoryLinkedServiceData linkedServiceData = new DataFactoryLinkedServiceData(azureBlobStorage);

var linkedServiceOperation = dataFactoryResource.GetDataFactoryLinkedServices().CreateOrUpdate(WaitUntil.Completed, storageLinkedServiceName, linkedServiceData);
Console.WriteLine(linkedServiceOperation.WaitForCompletionResponse().Content);

Veri kümesi oluşturma

Sınırlandırılmış metin veri kümesi oluşturan Main yöntemine aşağıdaki kodu ekleyin.

Bir kaynaktan havuza kopyalanacak verileri temsil eden bir veri kümesi tanımlayın. Bu örnekte, bu Sınırlandırılmış metin veri kümesi önceki adımda oluşturduğunuz Azure Blob Depolama bağlı hizmete başvurur. Veri kümesi, değeri veri kümesini kullanan bir etkinlikte ayarlanmış iki parametre alır. Parametreler, verilerin bulunduğu/depolandığı yere işaret eden "kapsayıcı" ve "folderPath" oluşturmak için kullanılır.

// Create an Azure Blob dataset
DataFactoryLinkedServiceReference linkedServiceReference = new DataFactoryLinkedServiceReference(DataFactoryLinkedServiceReferenceType.LinkedServiceReference, storageLinkedServiceName);
DelimitedTextDataset delimitedTextDataset = new DelimitedTextDataset(linkedServiceReference)
{
    DataLocation = new AzureBlobStorageLocation
    {
        Container = DataFactoryElement<string>.FromExpression("@dataset().container"),
        FileName = DataFactoryElement<string>.FromExpression("@dataset().path")
    },
    Parameters =
    {
        new KeyValuePair<string, EntityParameterSpecification>("container",new EntityParameterSpecification(EntityParameterType.String)),
        new KeyValuePair<string, EntityParameterSpecification>("path",new EntityParameterSpecification(EntityParameterType.String))
    },
    FirstRowAsHeader = false,
    QuoteChar = "\"",
    EscapeChar = "\\",
    ColumnDelimiter = ","
};

DataFactoryDatasetData datasetData = new DataFactoryDatasetData(delimitedTextDataset);

var datasetOperation = dataFactoryResource.GetDataFactoryDatasets().CreateOrUpdate(WaitUntil.Completed, blobDatasetName, datasetData);
Console.WriteLine(datasetOperation.WaitForCompletionResponse().Content);

Boru hattı oluştur

Kopyalama etkinliğine sahip bir işlem hattı oluşturan Main yöntemine aşağıdaki kodu ekleyin.

Bu örnekte, bu işlem hattı bir etkinlik içerir ve dört parametre alır: giriş blob kapsayıcısı ve yolu ile çıkış blob kapsayıcısı ve 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 giriş veri kümesi olarak kullanıldığında, giriş kapsayıcısı ve yolu belirtilir. Veri kümesi bir çıkış veri kümesi olarak kullanıldığında çıkış kapsayıcısı ve yolu belirtilir.

// Create a pipeline with a copy activity
Console.WriteLine("Creating pipeline " + pipelineName + "...");
DataFactoryPipelineData pipelineData = new DataFactoryPipelineData()
{
    Parameters =
    {
        new KeyValuePair<string, EntityParameterSpecification>("inputContainer",new EntityParameterSpecification(EntityParameterType.String)),
        new KeyValuePair<string, EntityParameterSpecification>("inputPath",new EntityParameterSpecification(EntityParameterType.String)),
        new KeyValuePair<string, EntityParameterSpecification>("outputContainer",new EntityParameterSpecification(EntityParameterType.String)),
        new KeyValuePair<string, EntityParameterSpecification>("outputPath",new EntityParameterSpecification(EntityParameterType.String))
    },
    Activities =
    {
        new CopyActivity("CopyFromBlobToBlob",new DataFactoryBlobSource(),new DataFactoryBlobSink())
        {
            Inputs =
            {
                new DatasetReference(DatasetReferenceType.DatasetReference,blobDatasetName)
                {
                    Parameters =
                    {
                        new KeyValuePair<string, BinaryData>("container", BinaryData.FromString("\"@pipeline().parameters.inputContainer\"")),
                        new KeyValuePair<string, BinaryData>("path", BinaryData.FromString("\"@pipeline().parameters.inputPath\""))
                    }
                }
            },
            Outputs =
            {
                new DatasetReference(DatasetReferenceType.DatasetReference,blobDatasetName)
                {
                    Parameters =
                    {
                        new KeyValuePair<string, BinaryData>("container", BinaryData.FromString("\"@pipeline().parameters.outputContainer\"")),
                        new KeyValuePair<string, BinaryData>("path", BinaryData.FromString("\"@pipeline().parameters.outputPath\""))
                    }
                }
            }
        }
    }
};

var pipelineOperation = dataFactoryResource.GetDataFactoryPipelines().CreateOrUpdate(WaitUntil.Completed, pipelineName, pipelineData);
Console.WriteLine(pipelineOperation.WaitForCompletionResponse().Content);

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

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

Bu kod ayrıca işlem hattında belirtilen inputContainer, inputPath, outputContainer 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, BinaryData> parameters = new Dictionary<string, BinaryData>()
{
    { "inputContainer",BinaryData.FromObjectAsJson(inputBlobContainer) },
    { "inputPath",BinaryData.FromObjectAsJson(inputBlobPath) },
    { "outputContainer",BinaryData.FromObjectAsJson(outputBlobContainer) },
    { "outputPath",BinaryData.FromObjectAsJson(outputBlobPath) }
};

var pipelineResource = dataFactoryResource.GetDataFactoryPipeline(pipelineName);
var runResponse = pipelineResource.Value.CreateRun(parameters);
Console.WriteLine("Pipeline run ID: " + runResponse.Value.RunId);

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

  1. 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...");
    DataFactoryPipelineRunInfo pipelineRun;
    while (true)
    {
        pipelineRun = dataFactoryResource.GetPipelineRun(runResponse.Value.RunId.ToString());
        Console.WriteLine("Status: " + pipelineRun.Status);
        if (pipelineRun.Status == "InProgress" || pipelineRun.Status == "Queued")
            System.Threading.Thread.Sleep(15000);
        else
            break;
    }
    
  2. Aşağıdaki kodu, okunan veya yazılan verilerin boyutu gibi kopyalama etkinliği çalıştırma ayrıntılarını alan Main yöntemine ekleyin.

    // Check the copy activity run details
    Console.WriteLine("Checking copy activity run details...");
    
    var queryResponse = dataFactoryResource.GetActivityRun(pipelineRun.RunId.ToString(), 
        new RunFilterContent(DateTime.UtcNow.AddMinutes(-10), DateTime.UtcNow.AddMinutes(10)));
    
    var enumerator = queryResponse.GetEnumerator();
    enumerator.MoveNext();
    
    if (pipelineRun.Status == "Succeeded")
        Console.WriteLine(enumerator.Current.Output);
    else
        Console.WriteLine(enumerator.Current.Error);
    Console.WriteLine("\nPress any key to exit...");
    Console.ReadKey();
    

Kodu çalıştırma

Uygulamayı oluşturup başlatın, ardından pipeline çalışmasını doğrulayın.

Konsol, veri fabrikası oluşturma, bağlantılı hizmet, veri kümeleri, işlem hattı ve işlem hattı çalıştırması oluşturma işleminin ilerleme durumunu görüntüler. Ardından işlem hattı çalıştırma durumunu denetler. Okuma/yazma verilerinin boyutuyla kopyalama etkinliğinin çalışma ayrıntılarını görene kadar bekleyin. Ardından Azure Depolama Gezgini gibi araçları kullanarak blobların, değişkenlerde belirttiğiniz şekilde "inputBlobPath"ten "outputBlobPath"e kopyalandığını kontrol edin.

Örnek çıkış verisi

Create a data factory quickstart-adf...
{
  "name": "quickstart-adf",
  "type": "Microsoft.DataFactory/factories",
  "properties": {
    "provisioningState": "Succeeded",
    "version": "2018-06-01"
  },
  "location": "eastus2"
}
Create a linked service AzureBlobStorage...
{
  "name": "AzureBlobStorage",
  "type": "Microsoft.DataFactory/factories/linkedservices",
  "properties": {
    "type": "AzureBlobStorage",
    "typeProperties": {
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=<storageAccountName>;",
      "encryptedCredential": "<encryptedCredential>"
    }
  }
}
Creating dataset BlobDelimitedDataset...
{
  "name": "BlobDelimitedDataset",
  "type": "Microsoft.DataFactory/factories/datasets",
  "properties": {
    "type": "DelimitedText",
    "linkedServiceName": {
      "type": "LinkedServiceReference",
      "referenceName": "AzureBlobStorage"
    },
    "parameters": {
      "container": {
        "type": "String"
      },
      "path": {
        "type": "String"
      }
    },
    "typeProperties": {
      "location": {
        "container": {
          "type": "Expression",
          "value": "@dataset().container"
        },
        "type": "AzureBlobStorageLocation",
        "fileName": {
          "type": "Expression",
          "value": "@dataset().path"
        }
      },
      "columnDelimiter": ",",
      "quoteChar": "\"",
      "escapeChar": "\\",
      "firstRowAsHeader": false
    }
  }
}
Creating pipeline Adfv2QuickStartPipeline...
{
  "properties": {
    "activities": [
      {
        "inputs": [
          {
            "type": "DatasetReference",
            "referenceName": "BlobDelimitedDataset",
            "parameters": {
              "container": "@pipeline().parameters.inputContainer",
              "path": "@pipeline().parameters.inputPath"
            }
          }
        ],
        "outputs": [
          {
            "type": "DatasetReference",
            "referenceName": "BlobDelimitedDataset",
            "parameters": {
              "container": "@pipeline().parameters.outputContainer",
              "path": "@pipeline().parameters.outputPath"
            }
          }
        ],
        "name": "CopyFromBlobToBlob",
        "type": "Copy",
        "typeProperties": {
          "source": {
            "type": "BlobSource"
          },
          "sink": {
            "type": "BlobSink"
          }
        }
      }
    ],
    "parameters": {
      "inputContainer": {
        "type": "String"
      },
      "inputPath": {
        "type": "String"
      },
      "outputContainer": {
        "type": "String"
      },
      "outputPath": {
        "type": "String"
      }
    }
  }
}
Creating pipeline run...
Pipeline run ID: 3aa26ffc-5bee-4db9-8bac-ccbc2d7b51c1
Checking pipeline run status...
Status: InProgress
Status: Succeeded
Checking copy activity run details...
{
  "dataRead": 1048,
  "dataWritten": 1048,
  "filesRead": 1,
  "filesWritten": 1,
  "sourcePeakConnections": 1,
  "sinkPeakConnections": 1,
  "copyDuration": 8,
  "throughput": 1.048,
  "errors": [],
  "effectiveIntegrationRuntime": "AutoResolveIntegrationRuntime (East US 2)",
  "usedDataIntegrationUnits": 4,
  "billingReference": {
    "activityType": "DataMovement",
    "billableDuration": [
      {
        "meterType": "AzureIR",
        "duration": 0.06666666666666667,
        "unit": "DIUHours"
      }
    ],
    "totalBillableDuration": [
      {
        "meterType": "AzureIR",
        "duration": 0.06666666666666667,
        "unit": "DIUHours"
      }
    ]
  },
  "usedParallelCopies": 1,
  "executionDetails": [
    {
      "source": {
        "type": "AzureBlobStorage"
      },
      "sink": {
        "type": "AzureBlobStorage"
      },
      "status": "Succeeded",
      "start": "2023-12-15T10:25:33.9991558Z",
      "duration": 8,
      "usedDataIntegrationUnits": 4,
      "usedParallelCopies": 1,
      "profile": {
        "queue": {
          "status": "Completed",
          "duration": 5
        },
        "transfer": {
          "status": "Completed",
          "duration": 1,
          "details": {
            "listingSource": {
              "type": "AzureBlobStorage",
              "workingDuration": 0
            },
            "readingFromSource": {
              "type": "AzureBlobStorage",
              "workingDuration": 0
            },
            "writingToSink": {
              "type": "AzureBlobStorage",
              "workingDuration": 0
            }
          }
        }
      },
      "detailedDurations": {
        "queuingDuration": 5,
        "transferDuration": 1
      }
    }
  ],
  "dataConsistencyVerification": {
    "VerificationResult": "NotVerified"
  }
}

Press any key to exit...

Çıktıyı doğrulama

İşlem hattı, adftutorial blob kapsayıcısında çıkış klasörünü otomatik olarak oluşturur. Ardından emp.txt dosyasını giriş klasöründen çıkış klasörüne kopyalar.

  1. Azure portalında, yukarıdaki Blob kapsayıcısı için bir giriş klasörü ve dosyası ekleme bölümünde durduğunuz adftutorial kapsayıcı sayfasında, çıkış klasörünü görmek için Refresh düğmesini seçin.
  2. Klasör listesinde çıkış'ı seçin.
  3. 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 programa aşağıdaki kod satırlarını ekleyin:

Console.WriteLine("Deleting the data factory");
dataFactoryResource.Delete(WaitUntil.Completed);

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.