التشغيل السريع: إنشاء مصنع بيانات وبنية أساسية باستخدام .NET SDK

ينطبق على:Azure Data Factory Azure Synapse Analytics

تلميح

جرب Data Factory في Microsoft Fabric، وهو حل تحليلي متكامل للمؤسسات. يغطي Microsoft Fabric كل شيء بدءا من حركة البيانات إلى علم البيانات والتحليلات في الوقت الحقيقي والمعلومات المهنية وإعداد التقارير. تعرف على كيفية بدء إصدار تجريبي جديد مجانا!

يصف التشغيل السريع كيفية استخدام .NET SDK لإنشاء مصنع بيانات Azure. البنية الأساسية التي تقوم بإنشائها في مصنع البيانات هذا تنسخ البيانات من مجلد إلى مجلد آخر في تخزين Azure blob. للحصول على برنامج تعليمي حول كيفية تحويل البيانات باستخدام Azure Data Factory، راجع البرنامج التعليمي: تحويل البيانات باستخدام Spark .

إشعار

لا تقدم هذه المقالة مقدمة مفصلة عن خدمة Data Factory. للحصول على مقدمة حول خدمة Azure Data Factory، راجع Introduction to Azure Data Factory.

المتطلبات الأساسية

اشتراك Azure

في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

أدوار Azure

لإنشاء مثيلات Data Factory، يجب أن يكون حساب المستخدم الذي تستخدمه لتسجيل الدخول إلى Azure عضوًا في دور contributor أو owner أو administrator لاشتراك Azure. لعرض الأذونات التي لديك في الاشتراك، انتقل إلى مدخل Azure، وحدّد اسم المستخدم في الزاوية العلوية اليمنى، وحدّد رمز "..." لمزيد من الخيارات، ثم حدّد أذوناتي. إذا كان لديك حق الوصول إلى اشتراكات متعددة، فحدّد الاشتراك المناسب.

لإنشاء موارد تابعة لـ Data Factory وإدارتها، بما في ذلك مجموعات البيانات، والخدمات المرتبطة، والتدفقات، وأوقات تشغيل التكامل، فإن المتطلبات التالية تنطبق:

  • لإنشاء موارد تابعة في مدخل Microsoft Azure وإدارتها، يجب أن تنتمي إلى الدور «Data Factory Contributor» على مستوى مجموعة الموارد أو أعلى.
  • لإنشاء الموارد التابعة وإدارتها باستخدام PowerShell أو SDK، فإن دور المساهم على مستوى المورد أو أعلى كافي.

للحصول على نماذج من الإرشادات حول كيفية إضافة مستخدم إلى دور، راجع مقالة إضافة أدوار.

للحصول على المزيد من المعلومات، اقرأ المقالات التالية:

حساب Azure Storage

يمكنك استخدام حساب مساحة تخزين Azure للأغراض العامة (مخزن البيانات الثنائية الكبيرة على وجه التحديد) كمخازن بيانات المصدروالوجهة في التشغيل السريع هذا. إذا لم يكن لديك حساب تخزين Azure للأغراض العامة، يمكنك مراجعة إنشاء حساب تخزين لإنشاء واحدًا.

الحصول على اسم حساب التخزين

تحتاج إلى اسم حساب تخزين Azure الخاص بك للتشغيل السريع. يوفر الإجراء التالي خطوات للحصول على اسم حساب التخزين الخاص بك:

  1. في مستعرض ويب، انتقل إلى مدخل Azure، ثم سجّل الدخول باستخدام اسم مستخدم Azure وكلمة المرور.
  2. من قائمة مدخل Azure، حدّد كافة الخدمات، ثم حدّد حسابات تخزين>التخزين. يمكنك أيضًا البحث عن حسابات التخزين وتحديدها من أي صفحة.
  3. في صفحة حسابات التخزين، قم بتصفية حساب التخزين (إذا لزم الأمر)، ثم حدد حساب التخزين الخاص بك.

يمكنك أيضًا البحث عن حسابات التخزين وتحديدها من أي صفحة.

إنشاء حاوية BLOB

في هذا المقطع، يمكنك إنشاء حاوية البيانات الثنائية كبيرة الحجم المسماة adftutorial في تخزين البيانات الثنائية كبيرة الحجم من Azure.

  1. من صفحة حساب التخزين، حدّد نظرة عامة على>الحاويات.

  2. في شريط أدوات صفحة <Account name> - Containers، حدد Container.

  3. في مربع الحوار حاوية جديدة، أدخل adftutorial للاسم، ثم حدّد موافق. تُحدَّث صفحة <Account name> - Containers لتضمين adftutorial في قائمة الحاويات.

    List of containers

إضافة مجلد إدخال وملف لحاوية البيانات الثنائية كبيرة الحجم

في هذا المقطع، يمكنك إنشاء مجلد اسمه إدخال في الحاوية التي تم إنشاؤها، ومن ثم تحميل نموذج ملف إلى مجلد الإدخال. قبل البدء، افتح محرر نص، مثل المفكرة، ثم قم بإنشاء ملف اسمه emp.txt بالمحتوى التالي:

John, Doe
Jane, Doe

حفظ الملف في المجلد C:\ADFv2QuickStartPSH. (إذا لم يكن المجلد موجودًا بالفعل، فقم بإنشائه.) ثم عُد إلى مدخل Azure واتبع الخطوات التالية:

  1. في صفحة <Account name> - Containers حيث توقفت، حدد adftutorial من القائمة المحدثة للحاويات.

    1. إذا قمت بإغلاق النافذة أو انتقلت إلى صفحة أخرى، فقم بتسجيل الدخول إلى مدخل Azure مرة أخرى.
    2. من قائمة مدخل Azure، حدّد كافة الخدمات، ثم حدّد حسابات تخزين>التخزين. يمكنك أيضًا البحث عن حسابات التخزين وتحديدها من أي صفحة.
    3. حدّد حساب التخزين الخاص بك، ثم حدّد حاويات>adftutorial.
  2. في شريط أدوات صفحة حاوية adftutorial، حدّد تحميل.

  3. في صفحة تحميل البيانات الثنائية كبيرة الحجم، حدّد مربع الملفات ثم استعرض وحدّد ملف emp.txt.

  4. قم بتوسيع العنوان Advanced. تُعرض الصفحة الآن كما هو موضح:

    Select Advanced link

  5. في المربع Upload to folder، أدخلinput.

  6. حدد الزر تحميل. يجب أن تراجع ملف emp.txt وحالة التحميل في القائمة.

  7. حدد رمز Close (علامة X ) لإغلاق صفحةUpload blob.

اجعل صفحة حاوية adftutorial مفتوحة. يمكنك استخدامه للتحقق من الإخراج في نهاية هذا التشغيل السريع.

Visual Studio

تُستخدم المعاينة في هذه المقالة Visual Studio 2019. تختلف إجراءات Visual Studio 2013 أو 2015 أو 2017 اختلافًا طفيفًا.

إنشاء تطبيق في معرف Microsoft Entra

من الأقسام في كيفية: استخدام المدخل لإنشاء تطبيق Microsoft Entra ومدير الخدمة الذي يمكنه الوصول إلى الموارد، اتبع الإرشادات للقيام بهذه المهام:

  1. في إنشاء تطبيق Microsoft Entra، أنشئ تطبيقا يمثل تطبيق .NET الذي تقوم بإنشائه في هذا البرنامج التعليمي. أمّا عنوان URL لتسجيل الدخول، يمكنك توفير عنوان URL وهمي كما هو موضح في المقالة (https://contoso.org/exampleapp).
  2. في الحصول على قيم لتسجيل الدخول، احصل على معرف التطبيق ومعرف المستأجر، ولاحظ أسفل تلك القيم التي تستخدمها لاحقًا في هذا البرنامج التعليمي.
  3. في الشهادات والأسرار، احصل على مفتاح المصادقة، ودوّن هذه القيمة التي تستخدمها في وقت لاحق في هذا البرنامج التعليمي.
  4. في تعيين التطبيق إلى دور، قم بتعيين التطبيق إلى دور المساهم على مستوى الاشتراك بحيث يمكن للتطبيق إنشاء مصانع بيانات في الاشتراك.

إنشاء مشروع Visual Studio

بعد ذلك، قم بإنشاء تطبيق وحدة تحكم C# .NET في Visual Studio:

  1. قم بتشغيل Visual Studio.
  2. في نافذة «ابدأ»، حدد إنشاء مشروع جديد>تطبيق وحدة تحكم (‎.NET Framework). مطلوب ‎.NET الإصدار 4.5.2 أو أعلى.
  3. في اسم المشروع، أدخل ADFv2QuickStart.
  4. حدد إنشاء لإنشاء المشروع.

ثبِّت حزم NuGet

  1. حدد Tools>NuGet Package Manager>Package Manager Console.

  2. في جزء وحدة تحكم مدير الحزم، شغل الأوامر التالية لتثبيت الحزم. لمزيد من المعلومات، راجع حزمة NuGet Azure.ResourceManager.DataFactory .

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

إنشاء مصدرًا للبيانات

  1. فتح Program.cs، وتضمين العبارات التالية لإضافة مراجع إلى namespaces.

    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. إضافة التعليمات البرمجية التالية إلى الأسلوب الرئيسي الذي يعين المتغيرات. استبدل العناصر النائبة بقيمتك الخاصة. للحصول على قائمة بمناطق Azure التي يتوفر فيها حالياً Data Factory، حدد المناطق التي تهمك في الصفحة التالية، ثم قم بتوسيع "Analytics" لتحديد موقع Data Factory: "Products available by region". يمكن أن تكون مخازن البيانات (Azure Storage، وAzure SQL Database، وغير ذلك) ويحسب (HDInsight، وغير ذلك) المُستخدمة من خلال مصنع البيانات في مناطق أخرى.

    // 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. أضف التعليمات البرمجية التالية إلى الأسلوب الرئيسي الذي ينشئ مصنع بيانات.

    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;
    

إنشاء خدمة مرتبطة

أضف التعليمات البرمجية التالية إلى الأسلوب الرئيسي الذي ينشئ خدمة مرتبطة ب Azure Storage.

إنشاء خدمات مرتبطة في مصنع بيانات لربط مخازن بياناتك وحساب الخدمات إلى مصنع البيانات. في هذا التشغيل السريع، تحتاج فقط إلى إنشاء خدمة واحدة مرتبطة ب Azure Blob Storage لكل من مصدر النسخ ومخزن المتلقي؛ يطلق عليه اسم "AzureBlobStorageLinkedService" في العينة.

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

إنشاء مجموعة بيانات

أضف التعليمات البرمجية التالية إلى الأسلوب الرئيسي الذي ينشئ مجموعة بيانات نص محددة.

تعريف مجموعة البيانات التي تمثل البيانات المنسوخة من المصدر إلى المتلقي. في هذا المثال، تشير مجموعة البيانات النصية المحددة هذه إلى خدمة Azure Blob Storage المرتبطة التي أنشأتها في الخطوة السابقة. تأخذ مجموعة البيانات معلمتين يتم تعيين قيمتها في نشاط يستهلك مجموعة البيانات. يتم استخدام المعلمات لإنشاء "الحاوية" و"folderPath" التي تشير إلى مكان تخزين/البيانات.

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

إنشاء البنية الأساسية لبرنامج ربط العمليات التجارية

أضف التعليمات البرمجية التالية إلى الأسلوب الرئيسي الذي ينشئ البنية الأساسية لبرنامج ربط العمليات التجارية مع نشاط نسخ.

في هذا المثال، يحتوي هذا المسار على نشاط واحد ويأخذ أربع معلمات: حاوية ومسار كائن ثنائي كبير الحجم للإخراج وحاوية الكائن الثنائي كبير الحجم والمسار. يتم تعيين قيم تلك المعلمات عند تشغيل/تشغيل البنية الأساسية. يشير نشاط النسخ إلى نفس مجموعة البيانات blob التي تم إنشاؤها في الخطوة السابقة مثل الإدخال والإخراج. عند استخدام مجموعة البيانات كمجموعة بيانات إدخال، يتم تحديد حاوية الإدخال والمسار. وعند استخدام مجموعة البيانات كمجموعة بيانات إخراج، يتم تحديد حاوية الإخراج والمسار.

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

إنشاء تشغيل البنية الأساسية

أضف التعليمات البرمجية التالية إلى الأسلوب الرئيسي الذي يقوم بتشغيل البنية الأساسية لبرنامج ربط العمليات التجارية.

تعين هذه التعليمة البرمجية أيضا قيم معلمات inputContainer وinputPath وoutputContainer وoutputPathالمحددة في المسار مع القيم الفعلية لمسارات الكائن الثنائي كبير الحجم المصدر والمتلقي.

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

مراقبة تشغيل البنية الأساسية

  1. أضف التعليمات البرمجية التالية إلى الأسلوب الرئيسي للتحقق باستمرار من الحالة حتى تنتهي من نسخ البيانات.

    // 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. أضف التعليمات البرمجية التالية إلى الأسلوب الرئيسي الذي يسترد تفاصيل تشغيل نشاط النسخ، مثل حجم البيانات المقروءة أو المكتوبة.

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

تشغيل التعليمات البرمجية

أنشئ وابدأ تشغيل التطبيق، ثم تحقق من تنفيذ المسار.

تقوم وحدة التحكم بطباعة تقدم إنشاء مصنع البيانات والخدمة المرتبطة ومجموعات البيانات والبنية الأساسية وتشغيلها. ثم يتحقق من حالة تشغيل المسار. انتظر حتى ترى نشاط النسخة تشغيل التفاصيل مع حجم بيانات القراءة/الكتابة. ثم استخدم أدوات مثل Azure Storage Explorer للتحقق من نسخ الكائن الثنائي كبير الحجم إلى "outputBlobPath" من "inputBlobPath" كما حددت في المتغيرات.

عينة الإخراج

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

تحقق من الإخراج

يقوم المسار تلقائيا بإنشاء مجلد الإخراج في حاوية كائن ثنائي كبير الحجم adftutorial . ثم ينسخ ملف emp.txt من مجلد الإدخال إلى مجلد الإخراج.

  1. في مدخل Microsoft Azure، في صفحة حاوية adftutorial التي توقفت فيها في قسم Add an input folder and file لحاوية blob أعلاه، حدد Refresh لمشاهدة مجلد الإخراج.
  2. في قائمة المجلدات، حدد output.
  3. تأكد من نسخ emp.txt إلى مجلد الإخراج.

تنظيف الموارد

لحذف مصنع البيانات برمجيًا، أضف الأسطر التالية من التعليمات البرمجية إلى البرنامج:

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

الخطوات التالية

تنسخ البنية الأساسية في هذه العينة البيانات من موقع إلى موقع آخر في تخزين Azure blob. انتقل إلىtutorials للتعرف على استخدام Data Factory في المزيد من السيناريوهات.