إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على:
Azure Data Factory
Azure Synapse Analytics
تلميح
Data Factory في Microsoft Fabric هو الجيل القادم من Azure Data Factory، مع بنية أبسط، وذكاء اصطناعي مدمج، وميزات جديدة. إذا كنت جديدا في تكامل البيانات، ابدأ مع Fabric Data Factory. يمكن لأعباء عمل ADF الحالية الترقية إلى Fabric للوصول إلى قدرات جديدة في علوم البيانات، والتحليلات اللحظية، والتقارير.
في هذا الدرس، تقوم بإنشاء خط أنابيب Data Factory الذي ينسخ البيانات من مساحة تخزين Azure Blob إلى قاعدة بيانات Azure SQL. ينطبق نمط التكوين في هذا البرنامج التعليمي على النسخ من مخزن بيانات يستند إلى ملف إلى مخزن بيانات يعتمد على العلاقات. للحصول على قائمة مخازن البيانات المعتمدة كمصادر ومواضع تلقٍّ، راجع مخازن البيانات المعتمدة والتنسيقات.
يمكنك اتخاذ الخطوات التالية في هذا البرنامج التعليمي:
- إنشاء data factory.
- Create تخزين Azure و قاعدة بيانات Azure SQL linked services.
- Create Azure Blob و قاعدة بيانات Azure SQL datasets.
- إنشاء خط أنابيب يحتوي على Copy activity.
- ابدأ تشغيل تدفق.
- مراقبة تشغيل التدفق والنشاط.
يستخدم هذا الدرس مجموعة تطوير .NET. يمكنك استخدام آليات أخرى للتفاعل مع Azure Data Factory؛ الرجوع إلى العينات تحت Quickstarts.
إذا لم يكن لديك اشتراك Azure، أنشئ حساب Azure مجاني قبل أن تبدأ.
المتطلبات الأساسية
- تخزين Azure حساب. استخدام مخزن البيانات الثنائية كبيرة الحجم لتخزين بيانات مصدر. إذا لم يكن لديك حساب تخزين Azure، راجع إنشاء حساب تخزين عام الاستخدام.
- قاعدة بيانات Azure SQL. يمكنك استخدام قاعدة البيانات كمخزن وجهة تلقي للبيانات. إذا لم يكن لديك قاعدة بيانات في قاعدة بيانات Azure SQL، راجع إنشاء قاعدة بيانات في قاعدة بيانات Azure SQL.
- الاستوديو المرئي. الدليل في هذا المقال يستخدم Visual Studio 2019.
- Azure SDK ل .NET.
- تطبيق Microsoft Entra. إذا لم يكن لديك طلب Microsoft Entra، راجع قسم إنشاء تطبيق Microsoft Entra من كيفية: استخدم البوابة لإنشاء تطبيق Microsoft Entra. نسخ القيم التالية للاستخدام في الخطوات اللاحقة: معرف التطبيق (العميل)ومفتاح المصادقةو معرف الدليل (المستأجر). تعيين التطبيق إلى دور المساهم باتباع الإرشادات في نفس المقالة.
إنشاء كائن ثنائي كبير الحجم وجدول SQL
الآن، جهز Azure Blob وقاعدة بيانات Azure SQL للدرس عن طريق إنشاء كتلة مصدر وجدول SQL لاستخدام السينك.
قم بإنشاء نقطة مصدر
أولاً، قم بإنشاء كائنات مصدر عن طريق إنشاء حاوية وتحميل ملف نصي إدخال إليها:
فتح تطبيق مفكرة التدوين. قم بنسخ النص التالي وحفظه في ملف اسمه inputEmp.txt محليًا.
John|Doe Jane|Doeاستخدم أداة مثل Azure Storage Explorer لإنشاء حاوية adfv2tutorial، ولرفع ملف inputEmp.txt إلى الحاوية.
إنشاء جدولsink SQL
بعد ذلك، قم بإنشاء جدول SQL متلقٍّ:
استخدم سكريبت SQL التالي لإنشاء جدول dbo.emp في قاعدة بيانات Azure SQL الخاص بك.
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 بالوصول إلى قاعدة بيانات SQL. تأكد من السماح بالوصول إلى خدمات Azure في خادمك حتى تتمكن خدمة Data Factory من كتابة البيانات إلى قاعدة بيانات SQL. للتحقق من هذا الإعداد وتشغيله، قم بالخطوات التالية:
اذهب إلى بوابة Azure لإدارة خادم SQL الخاص بك. ابحث عن خوادم SQL وحددها.
حدد الخادم الخاص بك.
ضمن عنوان الأمان بقائمة ملقم SQL، حدد جدران الحماية والشبكات الظاهرية.
في صفحة الجدار الناري والشبكات الافتراضية، تحت السماح Azure الخدمات والموارد بالوصول إلى هذا الخادم، اختر ON.
إنشاء مشروع Visual Studio
باستخدام Visual Studio، أنشئ تطبيق وحدة تحكم بتقنية C# .NET.
- افتح Visual Studio.
- من نافذة Start، اختر Create a new project.
- في نافذة إنشاء مشروع جديد، اختر نسخة C# من Console App (.NET Framework) من قائمة أنواع المشاريع. بعد ذلك حدد التالي.
- في نافذة Configure project الجديدة، أدخل Project nameADFv2Tutorial. من أجلالموقع ، استعرض للوصول إلى و/أو إنشاء الدليل لحفظ المشروع فيه. وبعد ذلك، حدد إنشاء. يظهر المشروع الجديد في Visual Studio IDE.
ثبِّت حزم NuGet
بعد ذلك، قم بتثبيت حزم المكتبة المطلوبة باستخدام إدارة حزمة NuGet.
في شريط القوائم، اختر Tools>NuGet مدير الحِزَم>مدير الحِزَم Console.
في لوحة مدير الحِزَم Console، قم بتشغيل الأوامر التالية لتثبيت الحزم. للحصول على معلومات حول حزمة Azure Data Factory NuGet، راجع Microsoft.Azure. Management.DataFactory.
Install-Package Microsoft.Azure.Management.DataFactory Install-Package Microsoft.Azure.Management.ResourceManager -PreRelease Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
كيفية إنشاء مصنع بيانات العميل
اتبع هذه الخطوات لإنشاء عميل مصنع بيانات.
افتح Program.cs، ثم اكتب فوق
usingالعبارات الموجودة مع التعليمات البرمجية التالية لإضافة مراجع إلى مساحات الأسماء.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;أضف التعليمات البرمجية التالية إلى
Mainالطريقة التي تعين المتغيرات. استبدل العناصر النائبة الـ 14 بقيمك الخاصة.للاطلاع على قائمة المناطق Azure التي يتوفر فيها Data Factory حاليا، راجع المنتجات المتاحة حسب المنطقة. ضمن القائمة المنسدلة المنتجات، اختر استعراض>التحليلات>مصنع البيانات. ثم في القائمة المنسدلة المناطق، اختر المناطق التي تهمك. تظهر شبكة بحالة توفر منتجات مصنع البيانات لمناطقك المحددة.
إشعار
مخازن البيانات مثل تخزين Azure و قاعدة بيانات Azure SQL، والحوسبات مثل HDInsight التي يستخدمها Data Factory يمكن أن تكون في مناطق أخرى غير ما تختاره لData Factory.
// 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";أضف التعليمات البرمجية التالية إلى
Mainالطريقة التي تنشئ مثيلاًDataFactoryManagementClientللفئة. يمكنك استخدام هذا الكائن لإنشاء مصنع بيانات وخدمة مرتبطة ومجموعات بيانات وتدفق. يمكنك أيضًا استخدام هذا الكائن لمراقبة تفاصيل تشغيل البنية الأساسية.// 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 };
إنشاء مصدرًا للبيانات
أضف التعليمات البرمجية التالية إلى Mainالطريقة التي تنشئ مصنع البيانات.
// 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);
}
إنشاء linked services
في هذا البرنامج التعليمي، تقوم بإنشاء خدمتين مرتبطتين للمصدر ومواضع التلقي، على التوالي.
Create an تخزين Azure linked service
أضف الكود التالي إلى طريقة Main التي تنشئ خدمة مرتبطة تخزين Azure. للحصول على معلومات حول الخصائص المدعومة والتفاصيل، راجع Azure خصائص الخدمة المرتبطة ب Blob.
// 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
أضف الكود التالي إلى طريقة Main التي تنشئ خدمة مرتبطة قاعدة بيانات Azure SQL. للحصول على معلومات حول الخصائص المدعومة والتفاصيل، راجع قاعدة بيانات Azure SQL خصائص الخدمة المرتبطة.
// 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)
);
إنشاء datasets
في هذا القسم، يمكنك إنشاء مجموعتي بيانات: واحدة للمصدر والأخرى لمواضع التلقي.
Create a dataset for source Azure Blob
أضف الكود التالي إلى طريقة Main التي تنشئ مجموعة بيانات Azure كلوب. للحصول على معلومات حول الخصائص المدعومة والتفاصيل، راجع Azure خصائص مجموعة بيانات Blob.
أنت تعرف مجموعة بيانات تمثل بيانات المصدر في Azure Blob. تشير مجموعة بيانات Blob هذه إلى الخدمة المرتبطة ب تخزين Azure التي أنشأتها في الخطوة السابقة، وتصف:
- موقع الكائنات لنسخ من:
FolderPathوFileName - تنسيق الكائنات الذي يشير إلى كيفية تحليل المحتوى:
TextFormatوإعداداته، مثل محدد العمود - بنية البيانات، بما في ذلك أسماء الأعمدة وأنواع البيانات، والتي يتم تعيينها في هذا المثال إلى جدول SQL المصدر
// 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)
);
Create a dataset for sink قاعدة بيانات Azure SQL
أضف الكود التالي إلى طريقة Main التي تنشئ مجموعة بيانات قاعدة بيانات Azure SQL. للحصول على معلومات حول الخصائص المدعومة والتفاصيل، انظر قاعدة بيانات Azure SQL propertiess dataset.
أنت تعرف مجموعة بيانات تمثل بيانات المصرف في قاعدة بيانات Azure SQL. تشير هذه المجموعة إلى الخدمة المرتبطة قاعدة بيانات Azure SQL التي أنشأتها في الخطوة السابقة. كما يحدد الجدول SQL الذي يحتوي على البيانات المنسوخة.
// 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)
);
إنشاء البنية الأساسية لبرنامج ربط العمليات التجارية
أضف التعليمات البرمجية التالية إلى Mainالطريقة التي تنشئ تدفق مع نشاط نسخ. في هذا البرنامج التعليمي، يحتوي التدفق هذا على نشاط واحد: CopyActivity، والذي يأخذ مجموعة بيانات الكائنات كمصدر ومجموعة بيانات SQL كمتلقٍّ. للحصول على معلومات حول copy activity التفاصيل، راجع Copy activity في Azure Data Factory.
// 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)
);
إنشاء تشغيل البنية الأساسية
أضف التعليمات البرمجية التالية إلى Mainالطريقة التي تدفعتشغيل التدفق.
// 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);
مراقبة تشغيل البنية الأساسية
أدخل الآن التعليمات البرمجية للتحقق من حالات تشغيل التدفق وللحصول على تفاصيل حول تشغيل نشاط النسخ.
أضف التعليمات البرمجية التالية إلى
Mainالطريقة للتحقق باستمرار من حالات تشغيل التدفق حتى تنتهي من نسخ البيانات.// 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; }أضف التعليمات البرمجية التالية إلى
Mainالطريقة التي تسترد تفاصيل تشغيل نشاط النسخ، مثل حجم البيانات التي تمت قراءتها أو كتابتها.// 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();
تشغيل التعليمات البرمجية
إنشاء التطبيق عن طريق اختيار بناء>حل البناء. ثم ابدأ التطبيق باختيار التصحيح>بدء التصحيح، وتحقق من تنفيذ التدفق.
تطبع وحدة التحكم التقدم المحرز في إنشاء مصنع بيانات، وخدمة مرتبطة، ومجموعات بيانات، والتدفق، وتشغيل التدفق. ثم يتحقق من حالة تشغيل المسار. انتظر حتى ترى تفاصيل تشغيل نشاط النسخ مع حجم البيانات المقروءة/المكتوبة. ثم، باستخدام أدوات مثل SQL Server Management Studio (SSMS) أو Visual Studio، يمكنك الاتصال بوجهة قاعدة بيانات Azure SQL والتحقق مما إذا كان جدول الوجهة الذي حددته يحتوي على البيانات المنسوخة.
عينة الإخراج
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...
المحتوى ذو الصلة
ينسخ خط الأنابيب في هذه العينة البيانات من موقع إلى آخر في مخزن كتلة Azure. لقد تعرفت على كيفية:
- إنشاء data factory.
- Create تخزين Azure و قاعدة بيانات Azure SQL linked services.
- Create Azure Blob و قاعدة بيانات Azure SQL datasets.
- كيفية إنشاء التدفق من خلال نشاط النسخ.
- ابدأ تشغيل تدفق.
- مراقبة تشغيل التدفق والنشاط.
تقدم إلى البرنامج التعليمي التالي للتعرف على نسخ البيانات من الموقع إلى السحابة: