المسارات والأنشطة في Azure Data Factory وAzure Synapse Analytics
ينطبق على:
Azure Data Factory
Azure Synapse Analytics
هام
سينتهي دعم Machine Learning Studio (classic) في 31 أغسطس 2024. نوصي بالانتقال إلى zure Machine Learning بحلول ذلك التاريخ.
اعتبارا من 1 ديسمبر 2021، لن تتمكن من إنشاء موارد استوديو التعلم الآلي (كلاسيكية) جديدة (مساحة العمل وخطة خدمة الويب). حتى 31 أغسطس 2024، يمكنك الاستمرار في استخدام تجارب استوديو التعلم الآلي (الكلاسيكية) الحالية وخدمات الويب.
- يمكنك الاطلاع على معلومات عن نقل مشاريع التعلم الآلي من ML Studio (classic) إلى Azure Machine Learning.
- تعرف على المزيد حول Azure Machine Learning
يتم الآن استبعاد وثائق ML Studio (classic) وقد لا يتم تحديثها في المستقبل.
تساعدك هذه المقالة على فهم المسارات والأنشطة في Azure Data Factory وAzure Synapse Analytics واستخدامها لإنشاء مهام سير عمل تعتمد على البيانات من طرف إلى طرف لسيناريوهات حركة البيانات ومعالجة البيانات.
نظرة عامة
قد يحتوي مصنع البيانات أو مساحة عمل Synapse على مسار واحد أو أكثر. المسار عبارة عن تجميع منطقي للأنشطة التي تؤدي مهمة معاً. على سبيل المثال، يمكن أن يحتوي المسار على مجموعة من الأنشطة التي تستوعب بيانات السجل وتنظيفها، ثم تبدأ بتعيين تدفق البيانات لتحليل بيانات السجل. ويتيح لك المسار إمكانية إدارة الأنشطة كمجموعة بدلاً من كل نشاط على حدة. ويمكنك نشر وجدولة المسار بدلاً من كل نشاط على حدة.
تحدد الأنشطة في المسار الإجراءات التي يجب تأديتها على بياناتك. على سبيل المثال، يمكنك استخدام نشاط نسخ لنسخ البيانات من SQL Server إلى مخزن Azure Blob. بعد ذلك، استخدم نشاط تدفق البيانات أو نشاط دفتر بيانات Databricks لمعالجة البيانات وتحويلها من تخزين البيانات الثنائية الكبيرة إلى تجمع Azure Synapse Analytics الذي يتم إنشاؤه على رأسها حلول إعداد تقارير ذكاء الأعمال.
يحتوي Azure Data Factory وAzure Synapse Analytics على ثلاث مجموعات من الأنشطة: أنشطة حركة البيانات وأنشطة تحويل البيانات وأنشطة التحكم. قد يستغرق النشاط صفراً أو أكثر من مجموعات بياناتالإدخال، وينتج مجموعة بيانات إخراج واحدة أو أكثر. يوضح الرسم التخطيطي التالي العلاقة بين المسار والنشاط ومجموعة البيانات:
تمثل مجموعة بيانات الإدخال إدخال نشاط في المسار وتمثل مجموعة بيانات الإخراج إخراج النشاط. تعمل مجموعات البيانات على تعريف البيانات داخل مخازن بيانات مختلفة، مثل الجداول والملفات والمجلدات والمستندات. بعد إنشاء مجموعة بيانات، يمكنك استخدامها مع الأنشطة في المسار. على سبيل المثال، مجموعة بيانات يمكن أن تكون مجموعة بيانات إدخال/إخراج لنشاط نسخ أو نشاط HDInsightHive. لمزيدٍ من المعلومات حول مجموعات البيانات، راجع مقالةمجموعات البيانات في Azure Data Factory.
أنشطة حركة البيانات
يقوم نشاط النسخ بنسخ البيانات من مخزن بيانات مدعوم إلى مخزن بيانات مخزن معتمد. يدعم Data Factory مخازن البيانات المدرجة في الجدول في هذا القسم. يمكن كتابة البيانات من أي مصدر إلى أي متلقي. انقر فوق مخزن بيانات لمعرفة كيفية نسخ البيانات من وإلى ذلك المتجر.
ملاحظة
إذا تم وضع علامة معاينة على موصل، يمكنك تجربته وإرسال ملاحظاتك إلينا. إذا كنت تريد أن تأخذ تبعية على موصلات المعاينة في الحل الخاص بك، فاتصل بدعم Azure.
لمزيد من المعلومات، راجع مقالة نسخ النشاط - نظرة عامة.
أنشطة تحويل البيانات
يدعم Azure Data Factory وAzure Synapse Analytics أنشطة التحويل التالية التي يمكن إضافتها إما بشكل فردي، أو مرتبطة بنشاط آخر.
| نشاط تحويل البيانات | بيئة الحساب |
|---|---|
| تدفق البيانات | مجموعات Apache Spark المُدارة بواسطة Azure Data Factory |
| دالة Azure | دالات Azure |
| Hive | HDInsight [Hadoop] |
| Pig | HDInsight [Hadoop] |
| MapReduce | HDInsight [Hadoop] |
| Hadoop Streaming | HDInsight [Hadoop] |
| "Spark" | HDInsight [Hadoop] |
| أنشطة Studio (كلاسيك): تنفيذ الدفعة، وتحديث الموارد | جهاز Azure الافتراضي |
| الإجراء المخزّن | SQL Azure أو تحليلات Azure Synapse أو SQL Server |
| U-SQL | Azure Data Lake Analytics |
| نشاط مخصص | Azure Batch |
| دفتر ملاحظات Databricks | Azure Databricks |
| نشاط Databricks Jar | Azure Databricks |
| نشاط Databricks Python | Azure Databricks |
لمزيد من المعلومات، راجع مقالة أنشطة تحويل البيانات.
أنشطة التحكم في التدفق
يتم دعم أنشطة تدفق التحكم التالية:
| نشاط التحكم | الوصف |
|---|---|
| متغير إلحاق | إضافة قيمة إلى متغير صفيف موجود. |
| تنفيذ مسار | يسمح نشاط تنفيذ المسار لأي مسار Data Factory أو Synapse باستدعاء مسار آخر. |
| عامل التصفية | تطبيق تعبير عامل تصفية على صفيف الإدخال |
| لكل | يحدد نشاط ForEach تدفق عنصر تحكم مكرر في المسار الخاص بك. يتم استخدام هذا النشاط للتكرار عبر مجموعة، وهو ينفّذ الأنشطة المحددة في تكرار حلقي. تنفيذ حلقة هذا النشاط مشابه لبنية تكرار Foreach في لغات البرمجة. |
| للحصول على بيانات تعريف | يمكن استخدام نشاط GetMetadata لاسترداد البيانات الوصفية لأي بيانات في Data Factory أو مسار Synapse. |
| نشاط If Condition | يمكن استخدام If Condition لإنشاء إصدارات فرعية بناءً على شرط يتم تقييمه إلى صواب أو خطأ. يوفر نشاط If Condition الوظيفة نفسها التي توفرها العبارة الشرطية في لغات الكمبيوتر. حيث يقيّم مجموعة من الأنشطة عند تقييم الشرط إلى true ومجموعة أخرى من الأنشطة عند تقييم الشرط إلى false.. |
| نشاط Lookup | يمكن استخدام نشاط Lookup لقراءة أو البحث عن سجل / اسم جدول / قيمة من أي مصدر خارجي. ويمكن أيضًا الرجوع إلى هذا الناتج من خلال الأنشطة اللاحقة. |
| تعيين متغير | تعيين قيمة متغير موجود. |
| نشاط Until | تنفيذ التكرار الحلقي Do-Until المماثل لبنية التكرارات الحلقية Do-Until في لغات الكمبيوتر. إنه ينفذ مجموعة من الأنشطة في تكرار حلقي حتى يتم تقييم الشرط المقترن بالنشاط إلى صواب. يمكنك تحديد قيمة مهلة للنشاط Until. |
| نشاط التحقق من الصحة | تأكد من استمرار تنفيذ المسار فقط في حالة وجود مجموعة بيانات مرجعية، أو تفي بمعايير محددة، أو تم الوصول إلى المهلة المحددة. |
| نشاط الانتظار | عند استخدام نشاط انتظار في مسار، فإن المسار ينتظر الوقت المحدد قبل متابعة تنفيذ الأنشطة اللاحقة. |
| نشاط الويب | يمكن استخدام نشاط الويب لاستدعاء نقطة نهاية REST مخصصة من مسار. يمكنك تمرير مجموعات البيانات والخدمات المرتبطة التي سيتم استهلاكها والوصول إليها عن طريق النشاط. |
| نشاط الإخطارات على الويب | باستخدام نشاط الإخطارات على الويب، يمكنك الاتصال بنقطة نهاية، ثم تمرير عنوان URL لمعاودة الاتصال. ينتظر تشغيل المسار استدعاء رد الاتصال قبل المتابعة إلى النشاط التالي. |
إنشاء خط أنابيب باستخدام واجهة المستخدم
لإنشاء خط أنابيب جديد، انتقل إلى علامة التبويب المؤلف في Data Factory Studio (ممثلة برمز القلم الرصاص)، ثم انقر على علامة الجمع واختر خط أنابيب من القائمة، وخط الأنابيب مرة أخرى من القائمة الفرعية.
سيعرض مصنع البيانات محرر خط الأنابيب حيث يمكنك العثور على:
- جميع الأنشطة التي يمكن استخدامها داخل خط الأنابيب.
- لوحة محرر خط الأنابيب، حيث ستظهر الأنشطة عند إضافتها إلى خط الأنابيب.
- جزء تكوينات خط الأنابيب، بما في ذلك المعلمات والمتغيرات والإعدادات العامة والمخرجات.
- جزء خصائص خط الأنابيب، حيث يمكن تكوين اسم خط الأنابيب والوصف الاختياري والتعليقات التوضيحية. سيعرض هذا الجزء أيضا أي عناصر ذات صلة بخط الأنابيب داخل مصنع البيانات.
Pipeline JSON
هنا هو كيف يتم تعريف مسار في شكل JSON:
{
"name": "PipelineName",
"properties":
{
"description": "pipeline description",
"activities":
[
],
"parameters": {
},
"concurrency": <your max pipeline concurrency>,
"annotations": [
]
}
}
| العلامة | الوصف | النوع | مطلوب |
|---|---|---|---|
| الاسم | اسم المسار. حدد اسما يمثل الإجراء الذي ينفذه المسار.
|
سلسلة | نعم |
| الوصف | حدد النص الذي يصف فيم يستخدم المسار. | سلسلة | لا |
| activities | يمكن أن يكون بقسم الأنشطة نشاط أو أكثر من نشاط محددة داخله. راجع القسم Activity JSON للحصول على تفاصيل حول عنصر الأنشطة JSON. | صفيف | نعم |
| parameters | قد يحتوي قسم المعلمات على معلمة واحدة أو أكثر محددة داخل المسار، مما يجعل المسار مرناً لإعادة الاستخدام. | قائمة | لا |
| التزامن | الحد الأقصى لعدد عمليات التشغيل المتزامنة التي قد يمتلكها المسار. بشكل افتراضي، لا يوجد حد أقصى. إذا تم الوصول إلى حد التزامن، يتم وضع تشغيل مسار إضافي في قائمة الانتظار حتى تكتمل المسارات السابقة | الهاتف | لا |
| التعليقات التوضيحية | قائمة العلامات المقترنة بالمسار | صفيف | لا |
نشاط JSON
يمكن أن يكون بقسم الأنشطة نشاط أو أكثر من نشاط محددة داخله. هناك نوعان من الأنشطة الرئيسية: أنشطة التنفيذ وأنشطة الرقابة.
أنشطة التنفيذ
تتضمن أنشطة التنفيذ حركة البيانات وأنشطة تحويل البيانات. توجد به البنية رفيعة المستوى التالية:
{
"name": "Execution Activity Name",
"description": "description",
"type": "<ActivityType>",
"typeProperties":
{
},
"linkedServiceName": "MyLinkedService",
"policy":
{
},
"dependsOn":
{
}
}
يصف الجدول التالي الخصائص في تعريف نشاط JSON :
| العلامة | الوصف | مطلوب |
|---|---|---|
| الاسم | اسم النشاط. حدد اسماً يمثل الإجراء الذي ينفذه المسار.
|
نعم |
| الوصف | نص يصف النشاط أو الغرض من استخدامه | نعم |
| النوع | نوع النشاط. راجع أقسام أنشطة حركة البيانات وأنشطة تحويل البيانات وأنشطة التحكم لأنواع مختلفة من الأنشطة. | نعم |
| linkedServiceName | اسم الخدمة المرتبطة المستخدمة عن طريق النشاط. قد يتطلب نشاط تحديد الخدمة المرتبطة التي ترتبط ببيئة الحوسبة المطلوبة. |
نعم لنشاط HDInsight، ML Studio (كلاسيكي) نشاط تسجيل الدُفعات، نشاط إجراء مخزّن. لا للآخرين |
| typeProperties | الخصائص في قسم typeProperties تعتمد على كل نوع نشاط. للاطلاع على خصائص النوع لنشاط، انقر فوق الارتباطات إلى النشاط في القسم السابق. | لا |
| policy | النُهج التي تؤثر في سلوك وقت التشغيل للنشاط. تتضمن هذه الخاصية سلوك انتهاء المهلة وإعادة المحاولة. إذا لم يتم تحديده، يتم استخدام القيم الافتراضية. لمزيد من المعلومات، راجع قسم نهج النشاط. | لا |
| dependsOn | يتم استخدام هذه الخاصية لتعريف تبعيات النشاط، وكيف تعتمد الأنشطة اللاحقة على الأنشطة السابقة. لمزيد من المعلومات، راجع تبعية النشاط | لا |
نهج النشاط
تؤثر النهج على سلوك وقت التشغيل للنشاط، مما يوفر خيارات التكوين. تتوفر نهج النشاط فقط لأنشطة التنفيذ.
تعريف JSON لنهج النشاط
{
"name": "MyPipelineName",
"properties": {
"activities": [
{
"name": "MyCopyBlobtoSqlActivity",
"type": "Copy",
"typeProperties": {
...
},
"policy": {
"timeout": "00:10:00",
"retry": 1,
"retryIntervalInSeconds": 60,
"secureOutput": true
}
}
],
"parameters": {
...
}
}
}
| اسم JSON | الوصف | القيم المسموح بها | مطلوب |
|---|---|---|---|
| المهلة | تحديد المهلة لتشغيل النشاط. | الفترة الزمنية | كلا. المهلة الافتراضية هي 7 أيام. |
| إعادة المحاولة | الحد الأقصى لمرات إعادة المحاولة | عدد صحيح | كلا. الافتراضي هو 0 |
| retryIntervalInSeconds | التأخير بين محاولات إعادة المحاولة بالثواني | عدد صحيح | كلا. الافتراضي هو 30 ثانية |
| secureOutput | عند التعيين على "صحيح"، يتم اعتبار الإخراج من النشاط آمناً ولا يتم تسجيله للمراقبة. | منطقي | كلا. الوضع الافتراضي خطأ. |
نشاط التحكم
أنشطة التحكم لها بنية المستوى الأعلى التالية:
{
"name": "Control Activity Name",
"description": "description",
"type": "<ActivityType>",
"typeProperties":
{
},
"dependsOn":
{
}
}
| العلامة | الوصف | مطلوب |
|---|---|---|
| الاسم | اسم النشاط. حدد اسماً يمثل الإجراء الذي ينفذه المسار.
|
نعم |
| الوصف | نص يصف النشاط أو الغرض من استخدامه | نعم |
| النوع | نوع النشاط. راجع أقسام أنشطة حركة البيانات وأنشطة تحويل البيانات وأنشطة التحكم لأنواع مختلفة من الأنشطة. | نعم |
| typeProperties | الخصائص في قسم typeProperties تعتمد على كل نوع نشاط. للاطلاع على خصائص النوع لنشاط، انقر فوق الارتباطات إلى النشاط في القسم السابق. | لا |
| dependsOn | تُستخدم هذه الخاصية لتحديد تبعية النشاط، وكيف تعتمد الأنشطة اللاحقة على الأنشطة السابقة. لمزيد من المعلومات، راجع تبعية النشاط. | لا |
تبعية النشاط.
تحدد تبعية النشاط كيف تعتمد الأنشطة اللاحقة على الأنشطة السابقة، وتحدد شرط الاستمرار في تنفيذ المهمة التالية. قد يعتمد النشاط على نشاط واحد أو عدة أنشطة سابقة بشروط تبعية مختلفة.
شروط التبعية المختلفة هي: ناجح، فاشل، تم تخطيه، مكتمل.
على سبيل المثال، إذا كان خط أنابيب يحتوي على النشاط A -> النشاط B، فإن السيناريوهات المختلفة التي يمكن أن تحدث هي:
- النشاط B لديه حالة تبعية على النشاط A مع ناجح: لا يتم تشغيل النشاط B إلا إذا كان النشاط A بحالة نهائية وهو "ناجح"
- النشاط B لديه حالة تبعية على النشاط A مع فاشل: لا يتم تشغيل النشاط B إلا إذا كان النشاط A بحالة نهائية وهو "فاشل"
- النشاط B لديه حالة تبعية على النشاط A مع مكتمل: لا يتم تشغيل النشاط B إلا إذا كان النشاط A بحالة نهائية وهو "ناجح" أو "فاشل"
- النشاط B لديه حالة تبعية على النشاط A مع تم التخطي: لا يتم تشغيل النشاط B إلا إذا كان النشاط A بحالة نهائية وهو "تم التخطي". يحدث التخطي في سيناريو النشاط X - النشاط Y ->> النشاط Z ، حيث يتم تشغيل كل نشاط فقط في حالة نجاح النشاط السابق. إذا فشل النشاط X، فسيكون النشاط Y بحالة "تم التخطي" لأنه لا يتم تنفيذه مطلقاً. وبالمثل، فإن النشاط Z له حالة "تم التخطي" أيضاً.
مثال: يعتمد النشاط 2 على نجاح النشاط 1
{
"name": "PipelineName",
"properties":
{
"description": "pipeline description",
"activities": [
{
"name": "MyFirstActivity",
"type": "Copy",
"typeProperties": {
},
"linkedServiceName": {
}
},
{
"name": "MySecondActivity",
"type": "Copy",
"typeProperties": {
},
"linkedServiceName": {
},
"dependsOn": [
{
"activity": "MyFirstActivity",
"dependencyConditions": [
"Succeeded"
]
}
]
}
],
"parameters": {
}
}
}
نموذج البنية الأساسية لبرنامج ربط العمليات التجارية للنسخ
في نموذج البنية الأساسية لبرنامج ربط العمليات التجارية التالي، هناك نشاط واحد من نوع نسخ في قسم الأنشطة. في هذا النموذج، ينسخ نشاط النسخ البيانات من تخزين Azure Blob إلى قاعدة بيانات في Azure SQL Database.
{
"name": "CopyPipeline",
"properties": {
"description": "Copy data from a blob to Azure SQL table",
"activities": [
{
"name": "CopyFromBlobToSQL",
"type": "Copy",
"inputs": [
{
"name": "InputDataset"
}
],
"outputs": [
{
"name": "OutputDataset"
}
],
"typeProperties": {
"source": {
"type": "BlobSource"
},
"sink": {
"type": "SqlSink",
"writeBatchSize": 10000,
"writeBatchTimeout": "60:00:00"
}
},
"policy": {
"retry": 2,
"timeout": "01:00:00"
}
}
]
}
}
لاحظ النقاط التالية:
- في قسم الأنشطة، هناك نشاط واحد فقط يتم تعيين النوع الخاص به إلى Copy.
- يتم تعيين الإدخال للنشاط إلى InputDataset، بينما يتم تعيين الإخراج للنشاط إلى OutputDataset. راجع مقالة مجموعات البيانات لتعريف مجموعات البيانات في JSON.
- في القسم typeProperties، يتم تحديد BlobSource كنوع للمصدر، ويتم تحديد SqlSink كنوع لموضع التلقي. في القسمأنشطة حركة البيانات، انقر فوق مخزن البيانات الذي تريد استخدامه كمصدر أو متلقي للتعرف على المزيد حول نقل البيانات إلى/من مخزن البيانات هذا.
للحصول على إرشادات كاملة حول إنشاء المسار هذا، راجع التشغيل السريع: إنشاء مصنع بيانات.
نموذج التحويل البنية الأساسية لبرنامج ربط العمليات التجارية
في نموذج المسار التالي، يوجد نشاط واحد من النوع HDInsightHive في قسم الأنشطة. في هذه العينة، يقومنشاط HDInsight Hive بتحويل البيانات من تخزين Azure Blob عن طريق تشغيل ملف برنامج نصي لـ Hive على مجموعة Azure HDInsight Hadoop.
{
"name": "TransformPipeline",
"properties": {
"description": "My first Azure Data Factory pipeline",
"activities": [
{
"type": "HDInsightHive",
"typeProperties": {
"scriptPath": "adfgetstarted/script/partitionweblogs.hql",
"scriptLinkedService": "AzureStorageLinkedService",
"defines": {
"inputtable": "wasb://adfgetstarted@<storageaccountname>.blob.core.windows.net/inputdata",
"partitionedtable": "wasb://adfgetstarted@<storageaccountname>.blob.core.windows.net/partitioneddata"
}
},
"inputs": [
{
"name": "AzureBlobInput"
}
],
"outputs": [
{
"name": "AzureBlobOutput"
}
],
"policy": {
"retry": 3
},
"name": "RunSampleHiveActivity",
"linkedServiceName": "HDInsightOnDemandLinkedService"
}
]
}
}
لاحظ النقاط التالية:
- في قسم الأنشطة، هناك نشاط واحد فقط يتم تعيين نوع إلى HDInsightHive.
- يتم تخزين ملف البرنامج النصي partitionweblogs.hql، في حساب تخزين Azure (المحدد بواسطة scriptLinkedService، المسمى AzureStorageLinkedService)، وفي مجلد البرنامج النصي في الحاوية
adfgetstarted. definesيستخدم القسم لتحديد إعدادات وقت التشغيل التي يتم تمريرها إلى البرنامج النصي للخلية كقيم تكوين الخلية (على سبيل المثال، ${hiveconf:inputtable}،${hiveconf:partitionedtable}).
يختلف قسم typeProperties لكل نشاط تحويل. للتعرف على خصائص النوع المعتمدة لنشاط التحويل، انقر فوق نشاط التحويل في أنشطة تحويل البيانات.
للحصول على إرشادات كاملة حول إنشاء هذا المسار، راجع البرنامج التعليمي: تحويل البيانات باستخدام Spark.
أنشطة متعددة في مسار
يحتوي مسارا العينة السابقان على نشاط واحد فقط فيهما. يمكن أن يكون لديك أكثر من نشاط واحد في مسار. إذا كان لديك أنشطة متعددة في مسار معالجة واحد والأنشطة اللاحقة لا تعتمد على الأنشطة السابقة، فمن الممكن أن يتم تشغيل الأنشطة في نفس الوقت.
يمكنك ربط نشاطين باستخدام تبعية النشاط، والتي تحدد كيفية اعتماد الأنشطة اللاحقة على الأنشطة السابقة، وتحديد شرط الاستمرار في تنفيذ المهمة التالية. قد يعتمد النشاط على نشاط واحد أو أكثر من الأنشطة السابقة بشروط تبعية مختلفة.
جدولة المسارات
يتم جدولة المسارات بواسطة المشغلات. هناك أنواع مختلفة من المشغلات (مُشغل المجدول، والذي يسمح بتشغيل المسارات وفقاً لجدول زمني على مدار الساعة، بالإضافة إلى المشغل اليدوي، الذي يؤدي إلى تشغيل المسارات عند الطلب). لمزيد من المعلومات حول المشغلات، راجع مقالة تنفيذ المسارات والمشغلات.
لكي يبدأ المشغل تشغيل المسارات، يجب عليك تضمين مرجع المسارات لمسار معين في تعريف المشغل. مشغلات & خطوط الأنابيب لها علاقة n-m. قد تؤدي المشغلات المتعددة إلى بدء مسار واحد، وقد يطلق نفس المشغل مسارات متعددة. بمجرد تحديد المشغل، يجب أن تبدأ المشغل ليبدأ في تشغيل المسار. لمزيد من المعلومات حول المشغلات، راجع مقالة تنفيذ المسارات والمشغلات.
على سبيل المثال ، لنفترض أن لديك مشغل جدولة ، "Trigger A" ، الذي أرغب في بدء تشغيل خط الأنابيب الخاص بي ، "MyCopyPipeline". يمكنك تعريف المشغل، كما هو موضح في المثال التالي:
تعريف مشغل A
{
"name": "TriggerA",
"properties": {
"type": "ScheduleTrigger",
"typeProperties": {
...
}
},
"pipeline": {
"pipelineReference": {
"type": "PipelineReference",
"referenceName": "MyCopyPipeline"
},
"parameters": {
"copySourceName": "FileSource"
}
}
}
}
الخطوات التالية
راجع البرامج التعليمية التالية للحصول على إرشادات خطوة بخطوة لإنشاء مسارات مع الأنشطة:
كيفية تحقيق CI/CD (التكامل والتسليم المستمر) باستخدام Azure Data Factory

