نسخ البيانات من الكائنات الثنائية الكبيرة Azure إلى قاعدة بيانات Azure SQL باستخدام مصنع بيانات Azure
ينطبق على: Azure Data Factory Azure Synapse Analytics
تلميح
جرب Data Factory في Microsoft Fabric، وهو حل تحليلي متكامل للمؤسسات. يغطي Microsoft Fabric كل شيء بدءا من حركة البيانات إلى علم البيانات والتحليلات في الوقت الحقيقي والمعلومات المهنية وإعداد التقارير. تعرف على كيفية بدء إصدار تجريبي جديد مجانا!
في هذا البرنامج التعليمي، يمكنك إنشاء تدفق مصنع البيانات الذي ينسخ البيانات من مخزن الكائنات الثنائية الكبيرة Azure إلى قاعدة بيانات Azure SQL. ينطبق نمط التكوين في هذا البرنامج التعليمي على النسخ من مخزن بيانات يستند إلى ملف إلى مخزن بيانات يعتمد على العلاقات. للحصول على قائمة مخازن البيانات المعتمدة كمصادر ومواضع تلقٍّ، راجع مخازن البيانات المعتمدة والتنسيقات.
يمكنك اتخاذ الخطوات التالية في هذا البرنامج التعليمي:
- إنشاء data factory.
- قم بإنشاء مخزن Azure والخدمات المرتبطة بقاعدة بيانات Azure SQL.
- إنشاء مجموعات بيانات الكائنات الثنائية الكبيرة Azure وقاعدة بيانات Azure SQL.
- إنشاء تدفق يحتوي على نشاط نسخ.
- ابدأ تشغيل تدفق.
- مراقبة تشغيل التدفق والنشاط.
يستخدم هذا البرنامج التعليمي .NET SDK. يمكنك استخدام آليات أخرى للتفاعل مع مصنع بيانات Azure؛ راجع العينات ضمن البدء السريع.
إذا لم تكن مشتركًا في Azure، فيمكنك إنشاء حساب مجاني على Azure قبل البدء.
المتطلبات الأساسية
- حساب في مساحة تخزين Azure. استخدام مخزن البيانات الثنائية كبيرة الحجم لتخزين بيانات مصدر. إذا لم يكن لديك حساب مخزن Azure، فراجع إنشاء حساب تخزين للأغراض العامة.
- Azure SQL Database. يمكنك استخدام قاعدة البيانات كمخزن وجهة تلقي للبيانات. في حالة عدم امتلاك قاعدة بيانات في Azure SQL، يرجى الرجوع إلى إنشاء قاعدة بيانات في قاعدة بيانات Azure SQL.
- Visual Studio. تُستخدم المعاينة في هذه المقالة Visual Studio 2019.
- Azure SDK لـ.NET.
- تطبيق Microsoft Entra. إذا لم يكن لديك تطبيق Microsoft Entra، فشاهد قسم إنشاء تطبيق Microsoft Entra في كيفية: استخدام المدخل لإنشاء تطبيق Microsoft Entra. نسخ القيم التالية للاستخدام في الخطوات اللاحقة: معرف التطبيق (العميل)ومفتاح المصادقةو معرف الدليل (المستأجر). تعيين التطبيق إلى دور المساهم باتباع الإرشادات في نفس المقالة.
إنشاء كائن ثنائي كبير الحجم وجدول SQL
الآن، قم بإعداد الكائنات الثنائية الكبيرة Azure وقاعدة بيانات Azure SQL الخاصة بك من أجل البرنامج التعليمي لإنشاء كائن ثنائي كبير الحجم للمصدر وجدول SQL متلقي.
قم بإنشاء نقطة مصدر
أولاً، قم بإنشاء كائنات مصدر عن طريق إنشاء حاوية وتحميل ملف نصي إدخال إليها:
فتح تطبيق مفكرة التدوين. قم بنسخ النص التالي وحفظه في ملف اسمه inputEmp.txt محليًا.
John|Doe Jane|Doe
استخدم أداة مثل متصفح مخزن Azure لإنشاء الحاوية 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 في الخادم الخاص بك بحيث يمكن لخدمة مصنع البيانات كتابة البيانات إلى قاعدة بيانات SQL. للتحقق من هذا الإعداد وتشغيله، قم بالخطوات التالية:
انتقل إلى مدخل Microsoft Azure لإدارة خادم SQL لديك. ابحث عن خوادم SQL وحددها.
حدد الخادم الخاص بك.
ضمن عنوان الأمان بقائمة ملقم SQL، حدد جدران الحماية والشبكات الظاهرية.
في صفحة جدار الحماية والشبكات الظاهرية، ضمن السماح لخدمات وموارد Azure بالوصول إلى هذا الخادم،حدد تشغيل.
إنشاء مشروع Visual Studio
باستخدام Visual Studio، قم بإنشاء تطبيق وحدة تحكم C# .NET.
- افتح Visual Studio.
- من نافذة Start، اختر Create a new project.
- في إطار إنشاء مشروع جديد، اختر إصدار C# من تطبيق وحدة تحكم (.NET Framework) من قائمة أنواع المشاريع. بعد ذلك حدد التالي.
- في نافذة تكوين مشروعك الجديد، أدخل اسم مشروع ADFv2Tutorial. من أجلالموقع ، استعرض للوصول إلى و/أو إنشاء الدليل لحفظ المشروع فيه. وبعد ذلك، حدد إنشاء. يظهر المشروع الجديد في Visual Studio IDE.
ثبِّت حزم NuGet
بعد ذلك، قم بتثبيت حزم المكتبة المطلوبة باستخدام إدارة حزمة NuGet.
حدد أدوات>مدير حزم NuGet>وحدة تحكم مدير الحزم من القائمة.
في جزء وحدة تحكم مدير الحزم، شغل الأوامر التالية لتثبيت الحزم. للحصول على معلومات حول حزمة مصنع بيانات Azure 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 التي يتوفر فيها مصنع البيانات حاليًا، راجع المنتجات المتوفرة حسب المنطقة. ضمن القائمة المنسدلة المنتجات، اختر استعراض>التحليلات>مصنع البيانات. ثم في القائمة المنسدلة المناطق، اختر المناطق التي تهمك. تظهر شبكة بحالة توفر منتجات مصنع البيانات لمناطقك المحددة.
إشعار
يمكن أن تكون مخازن البيانات، مثل مخزن Azure وقاعدة بيانات Azure SQL، والحسابات، مثل 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 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
في هذا البرنامج التعليمي، تقوم بإنشاء خدمتين مرتبطتين للمصدر ومواضع التلقي، على التوالي.
أنشئ خدمة مرتبطة بالتخزين في Azure
أضف التعليمات البرمجية التالية إلى Main
الطريقة التي تنشئ خدمة مخزن Azure المرتبطة. للحصول على معلومات حول الخصائص والتفاصيل المعتمدة، راجع خصائص الخدمة المرتبطة كائنات Azure.
// 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
في هذا القسم، يمكنك إنشاء مجموعتي بيانات: واحدة للمصدر والأخرى لمواضع التلقي.
إنشاء مجموعة بيانات لمصدر Azure Blob
إضافة التعليمات البرمجية التالية إلى Main
الطريقة التي تنشئ مجموعة بيانات كائنات Azure. للحصول على معلومات حول الخصائص والتفاصيل المعتمدة، راجع خصائص مجموعة بيانات كائنات Azure.
يمكنك تعريف مجموعة بيانات تمثل بيانات المصدر في Azure 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)
);
قم بإنشاء مجموعة بيانات لقاعدة بيانات Azure SQL
أضف التعليمات البرمجية التالية إلى Main
الطريقة التي تنشئ مجموعة بيانات قاعدة بيانات Azure SQL. للحصول على معلومات حول الخصائص والتفاصيل المعتمدة، راجع خصائص مجموعة بيانات قاعدة بيانات Azure SQL.
يمكنك تحديد مجموعة بيانات تمثل بيانات المصدر في قاعدة بيانات 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 كمتلقٍّ. للحصول على معلومات حول تفاصيل نشاط النسخ، راجع نسخ النشاط في مصنع بيانات Azure.
// 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 blob. لقد تعرفت على كيفية:
- إنشاء data factory.
- قم بإنشاء مخزن Azure والخدمات المرتبطة بقاعدة بيانات Azure SQL.
- إنشاء مجموعات بيانات الكائنات الثنائية الكبيرة Azure وقاعدة بيانات Azure SQL.
- كيفية إنشاء التدفق من خلال نشاط النسخ.
- ابدأ تشغيل تدفق.
- مراقبة تشغيل التدفق والنشاط.
تقدم إلى البرنامج التعليمي التالي للتعرف على نسخ البيانات من الموقع إلى السحابة: