تعيين المخطط ونوع البيانات في نشاط النسخ

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

تلميح

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

توضح هذه المقالة كيفية تنفيذ نشاط نسخ Azure Data Factory تعيين المخطط وتعيين نوع البيانات من بيانات المصدر إلى بيانات المتلقي.

تعيين المخطط

تعيين افتراضي

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

إذا كان المصدر ملف نصي دون سطر العنوان، يصبح التعيين الصريح مطلوب لأن المصدر لا يحتوي على أسماء أعمدة.

التعيين الصريح

يمكنك أيضاً تحديد تعيين صريح لتخصيص تعيين العمود/الحقل من المصدر إلى المتلقي استناداً إلى حاجتك. باستخدام التعيين الصريح، يمكنك نسخ بيانات مصدر جزئياً فقط إلى المتلقي، أو تعيين بيانات المصدر إلى المتلقي بأسماء مختلفة، أو إعادة تشكيل البيانات الجدولية/الهرمية. نسخ النشاط:

  1. قراءة البيانات من المصدر وتحديد المخطط المصدر.
  2. تطبيق التعيين المُعرّف.
  3. كتابة البيانات إلى المتلقي.

تعلم المزيد عن:

بإمكانك تكوين التعيين على علامة تبويب التعيين Authoring UI->copy activity> -، أو تحديد التعيين برمجيا في خاصية نسخ النشاط >translator. يتوفر دعم الخصائص التالية في translator ->mappings صفيف >الكائنات ->sourceو sink، التي تشير إلى تحديد عمود/حقل لتعيين البيانات.

الخاصية الوصف مطلوب
الاسم اسم عمود/حقل المصدر أو المتلقي. التطبيق على مصدر جدولي ومتلقي. ‏‏نعم‬
ترتيبي فهرس الأعمدة. تبدأ من 1.
يُطبق ومطلوب عند استخدام نص محدد دون سطر العنوان.
لا
path تعبير مسار JSON لكل حقل لاستخراجه أو تعيينه. تقدم بطلب للحصول على مصدر متلقي هرمي، على سبيل المثال، موصلات Azure Cosmos DB أو MongoDB أو REST.
بالنسبة للحقول ضمن الكائن الجذر، يبدأ مسار JSON بالجذر$؛ وبالنسبة للحقول داخل الصفيف الذي تم اختياره حسب الخاصية collectionReference، يبدأ مسار JSON من عنصر الصفيف دون $.
لا
النوع نوع البيانات المؤقتة لعمود المصدر أو المتلقي. بشكل عام، لا تحتاج إلى تحديد أو تغيير هذه الخاصية. تعرف على المزيد حول تعيين نوع البيانات. لا
الثقافة ثقافة عمود المصدر أو المتلقي. يُطبق عندما يكون النوع Datetime أو Datetimeoffset. الافتراضي هو en-us.
بشكل عام، لا تحتاج إلى تحديد أو تغيير هذه الخاصية. تعرف على المزيد حول تعيين نوع البيانات.
لا
format تنسيق السلسلة المستخدمة عندما يكون النوع Datetime أو Datetimeoffset. راجع سلاسل تنسيق التاريخ والوقت المخصص حول كيفية تنسيق التاريخ والوقت. بشكل عام، لا تحتاج إلى تحديد أو تغيير هذه الخاصية. تعرف على المزيد حول تعيين نوع البيانات. لا

يتوفر دعم الخصائص التالية ضمن translator بالإضافة إلى mappings:

الخاصية الوصف مطلوب
collectionReference تطبيق عند نسخ البيانات من مصدر هرمي، مثل موصلات Azure Cosmos DB أو MongoDB أو REST.
إذا كنت تريد تكرار البيانات واستخراجها من الكائنات داخل حقل صفيف بنفس النمط وتحويلها لكل صف لكل كائن، حدد مسار JSON لهذا الصفيف لتطبيقه بشكل متقاطع.
لا

مصدر جدولي إلى متلقي جدولي

على سبيل المثال، لنسخ البيانات من Salesforce إلى قاعدة بيانات azure SQL وتعيين ثلاثة أعمدة بشكل صريح:

  1. في علامة تبويب التعيين نسخ النشاط ->، انقر فوق الزر Import schemas لاستيراد مخططات كل من المصدر والمتلقي.

  2. تعيين الحقول المطلوبة واستبعاد/حذف الباقي.

تعيين جدولي إلى جدولي

يمكن تكوين نفس التعيين كما يلي في البيانات الأساسية لنشاط النسخ (راجع translator):

{
    "name": "CopyActivityTabularToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "SalesforceSource" },
        "sink": { "type": "SqlSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "name": "Id" },
                    "sink": { "name": "CustomerID" }
                },
                {
                    "source": { "name": "Name" },
                    "sink": { "name": "LastName" }
                },
                {
                    "source": { "name": "LastModifiedDate" },
                    "sink": { "name": "ModifiedDate" }
                }
            ]
        }
    },
    ...
}

لنسخ البيانات من ملف (ملفات) نصية محددة دون سطر العنوان، يتم تمثيل الأعمدة بترتيب بدلاً من الأسماء.

{
    "name": "CopyActivityTabularToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "DelimitedTextSource" },
        "sink": { "type": "SqlSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "ordinal": "1" },
                    "sink": { "name": "CustomerID" }
                }, 
                {
                    "source": { "ordinal": "2" },
                    "sink": { "name": "LastName" }
                }, 
                {
                    "source": { "ordinal": "3" },
                    "sink": { "name": "ModifiedDate" }
                }
            ]
        }
    },
    ...
}

مصدر هرمي إلى متلقي جدولي

عند نسخ البيانات من مصدر هرمي إلى متلقي جدولي، يدعم نشاط النسخ القدرات التالية:

  • استخراج البيانات من الكائنات والصفائف.
  • التطبيق المتقاطع لكائنات متعددة بنفس النمط من صفيف، في هذه الحالة لتحويل كائن JSON واحد إلى سجلات متعددة في نتيجة جدولية.

للحصول على تحويل هرمي إلى جدولي أكثر تقدماً، يمكنك استخدام Data Flow.

على سبيل المثال، إذا كان لديك مستند MongoDB المصدر بالمحتوى التالي:

{
    "id": {
        "$oid": "592e07800000000000000000"
    },
    "number": "01",
    "date": "20170122",
    "orders": [
        {
            "prod": "p1",
            "price": 23
        },
        {
            "prod": "p2",
            "price": 13
        },
        {
            "prod": "p3",
            "price": 231
        }
    ],
    "city": [ { "name": "Seattle" } ]
}

وتريد نسخه إلى ملف نصي بالتنسيق التالي مع سطر العنوان، عن طريق تسوية البيانات داخل الصفيف (order_pd and order_price) والربط المتقاطع مع معلومات الجذر المشتركة (الرقم والتاريخ والمدينة):

orderNumber orderDate order_pd سعر الطلب city
01 20170122 P1 23 سياتل
01 20170122 P2 13 سياتل
01 20170122 P3 231 سياتل

يمكنك تحديد هذا التعيين على واجهة مستخدم تأليف Data Factory:

  1. في علامة تبويب التعيين نسخ النشاط ->، انقر فوق الزر Import schemas لاستيراد مخططات كل من المصدر والمتلقي. نظراً لأن الخدمة تختبر العناصر القليلة الأولى عند استيراد المخطط، إذا لم يظهر أي حقل، فيمكنك إضافته إلى الطبقة الصحيحة في التسلسل الهرمي - قم بالمرور فوق اسم حقل موجود واختر إضافة عقدة أو كائن أو صفيف.

  2. تحديد الصفيف الذي تريد تكرار البيانات واستخراجها منه. سيتم ملؤها تلقائياً كمرجع مجموعة. ملاحظة يتم دعم صفيف أحادي فقط لمثل هذه العملية.

  3. تعيين الحقول المطلوبة إلى المتلقي. تحدد الخدمة تلقائياً مسارات JSON المقابلة للجانب الهرمي.

إشعار

بالنسبة للسجلات حيث يكون الصفيف الذي تم وضع علامة عليه كمرجع للمجموعة فارغاً مع تحديد خانة الاختيار، يتم تخطي السجل بأكمله.

تعيين التسلسل الهرمي إلى جدولي باستخدام واجهة المستخدم

يمكنك أيضاً التبديل إلى "Advanced editor"، وفي هذه الحالة يمكنك مباشرة مشاهدة مسارات JSON للحقول وتعديلها. إذا اخترت إضافة تعيين جديد في طريقة العرض هذه، فحدد مسار JSON.

تعيين التسلسل الهرمي إلى جدولي باستخدام المحرر المتقدم

يمكن تكوين نفس التعيين كما يلي في البيانات الأساسية لنشاط النسخ (راجع translator):

{
    "name": "CopyActivityHierarchicalToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "MongoDbV2Source" },
        "sink": { "type": "DelimitedTextSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "path": "$['number']" },
                    "sink": { "name": "orderNumber" }
                },
                {
                    "source": { "path": "$['date']" },
                    "sink": { "name": "orderDate" }
                },
                {
                    "source": { "path": "['prod']" },
                    "sink": { "name": "order_pd" }
                },
                {
                    "source": { "path": "['price']" },
                    "sink": { "name": "order_price" }
                },
                {
                    "source": { "path": "$['city'][0]['name']" },
                    "sink": { "name": "city" }
                }
            ],
            "collectionReference": "$['orders']"
        }
    },
    ...
}

مصدر جدولي/هرمي إلى متلقي هرمي

يشبه تدفق تجربة المستخدم المصدر الهرمي إلى المتلقي الجدولي.

عند نسخ البيانات من مصدر جدولي إلى مصدر هرمي، تكون الكتابة إلى صفيف داخل الكائن غير مدعومة.

عند نسخ البيانات من مصدر هرمي إلى متلقي هرمي، يمكنك بالإضافة إلى ذلك الحفاظ على التسلسل الهرمي للطبقة بأكملها، عن طريق تحديد الكائن/الصفيف والتعيين إلى المتلقي دون لمس الحقول الداخلية.

لمزيد من تحويل إعادة تشكيل البيانات المتقدمة، يمكنك استخدام Data Flow.

تحويل التعيين إلى معلمة

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

إذا كان هناك حاجة إلى تعيين صريح، يمكنك:

  1. تعريف معلمة مع نوع كائن على مستوى خط التدفقات، على سبيل المثال، mapping.

  2. تحويل التعيين لمعلمة: على علامة تبويب copy activity ->، اختر إضافة محتوى ديناميكي وحدد المعلمة أعلاه. وتكون البيانات الأساسية للنشاط كما يلي:

    {
        "name": "CopyActivityHierarchicalToTabular",
        "type": "Copy",
        "typeProperties": {
            "source": {...},
            "sink": {...},
            "translator": {
                "value": "@pipeline().parameters.mapping",
                "type": "Expression"
            },
            ...
        }
    }
    
  3. إنشاء القيمة لتمريرها إلى معلمة التعيين. يجب أن يكون كائن تعريف translator بأكمله، ارجع إلى العينات في قسم التعيين الصريح. على سبيل المثال، بالنسبة لنسخ مصدر جدولي إلى متلقي جدولي، يجب أن تكون القيمة {"type":"TabularTranslator","mappings":[{"source":{"name":"Id"},"sink":{"name":"CustomerID"}},{"source":{"name":"Name"},"sink":{"name":"LastName"}},{"source":{"name":"LastModifiedDate"},"sink":{"name":"ModifiedDate"}}]}.

تعيين نوع بيانات

ينفذ نشاط النسخ تعيين أنواع المصدر إلى أنواع المتلقي باستخدام التدفق التالي:

  1. التحويل من أنواع البيانات المصدر الأصلية إلى أنواع البيانات المؤقتة المستخدمة من قِبل خطوط تدفقات Azure Data Factory وSynapse.
  2. تحويل أنواع البيانات المؤقتة تلقائياً حسب الحاجة لتطابق أنواع المتلقي المقابلة، يمكن تطبيقه لكل من التعيين الافتراضي والتعيين الصريح.
  3. التحويل من أنواع البيانات المؤقتة إلى أنواع البيانات الأصلية.

يدعم نشاط النسخ حالياً أنواع البيانات المؤقتة التالية: المنطقية، والبايت، وصفيف البايت، والتاريخ والوقت، وDatetimeOffset، والعشرية، والمزدوجة، وGUID، وInt16، وInt32، وInt64، وSByte، والأحادية، والسلسلة، والنطاق الزمني، وUInt16، وUInt32، وUInt64.

يتم دعم تحويلات أنواع البيانات التالية بين الأنواع المؤقتة من المصدر إلى المتلقي.

المصدر\المتلقي Boolean صفيف البايت التاريخ/الوقت عدد عشري نقطة عائمة GUID رقم صحيح السلسلة‬ TimeSpan
Boolean
صفيف البايت
التاريخ/الوقت
عدد عشري
نقطة عائمة
GUID
رقم صحيح
السلسلة‬
TimeSpan

(1) يتضمن التاريخ/الوقت التاريخ والوقت وDateTimeOffset.

(2) تتضمن النقطة العائمة الأحادية والزوجية.

(3) يتضمن العدد الصحيح SByte، وByte، وInt16،وUInt16، وInt32، وUInt32، وInt64، وUInt64.

إشعار

  • يتوفر في الوقت الحالي دعم تحويل نوع البيانات هذا عند النسخ بين البيانات الجدولية. لا يتوفر دعم للمصدر/المتلقي الهرمي، ما يعني أنه لا يوجد تحويل لنوع البيانات محدد من قِبل النظام بين المصدر والأنواع المؤقتة للمتلقي.
  • تعمل هذه الميزة مع أحدث طراز مجموعة بيانات. إذا لم تظهر لك هذه الخيارات من واجهة المستخدم، فجرب إنشاء مجموعة بيانات جديدة.

يتم دعم الخصائص التالية في نشاط النسخ لتحويل نوع البيانات (ضمن القسم translator للتأليف البرمجي):

الخاصية الوصف مطلوب
typeConversion تمكين تجربة تحويل نوع البيانات الجديدة.
القيمة الافتراضية هي "false" بسبب التوافق مع الإصدارات السابقة.

بالنسبة لأنشطة النسخ الجديدة التي تم إنشاؤها عبر واجهة مستخدم تأليف Data Factory منذ أواخر يونيو 2020، تم تمكين تحويل نوع البيانات هذا بشكل افتراضي للحصول على أفضل تجربة، ويمكنك مشاهدة إعدادات تحويل النوع التالية على «copy activity» -> علامة التبويب «mapping» للسيناريوهات القابلة للتطبيق.
لإنشاء خط تدفقات برمجياً، تحتاج إلى تعيين الخاصية typeConversion إلى "true" بشكل صريح لتمكينها.
بالنسبة لأنشطة النسخ الحالية التي تم إنشاؤها قبل إصدار هذه الميزة، لن ترى خيارات تحويل النوع في واجهة مستخدم التأليف للتوافق مع الإصدارات السابقة.
لا
typeConversionSettings مجموعة من إعدادات تحويل النوع. تُطبق عند تعيين typeConversion إلى true. تندرج جميع الخصائص التالية ضمن هذه المجموعة. لا
ضمن typeConversionSettings
allowDataTruncation السماح باقتطاع البيانات عند تحويل بيانات المصدر إلى متلقي بنوع مختلف أثناء النسخ، على سبيل المثال، من عشري إلى عدد صحيح، من DatetimeOffset إلى Datetime.
القيمة الافتراضية هي صواب.
لا
treatBooleanAsNumber تعامل مع القيم المنطقية كأرقام، على سبيل المثال، صحيح كـ 1.
القيمة الافتراضية هي خطأ.
لا
dateTimeFormat تنسيق السلسلة عند التحويل بين التواريخ دون إزاحة المنطقة الزمنية والسلاسل، على سبيل المثالyyyy-MM-dd HH:mm:ss.fff. راجع سلاسل تنسيق التاريخ والوقت المخصص للحصول على معلومات تفصيلية. لا
dateTimeOffsetFormat تنسيق السلسلة عند التحويل بين التواريخ مع إزاحة المنطقة الزمنية والسلاسل، على سبيل المثالyyyy-MM-dd HH:mm:ss.fff zzz. راجع سلاسل تنسيق التاريخ والوقت المخصص للحصول على معلومات تفصيلية. لا
timeSpanFormat تنسيق السلسلة عند التحويل بين الفترات الزمنية والسلاسل، على سبيل المثالdd\.hh\:mm. راجع سلاسل تنسيق TimeSpan مخصص للحصول على معلومات تفصيلية. لا
الثقافة معلومات الثقافة التي سيتم استخدامها عند تحويل أنواع، على سبيل المثال، en-us أو fr-fr. لا

مثال:

{
    "name": "CopyActivity",
    "type": "Copy",
    "typeProperties": {
        "source": {
        	"type": "ParquetSource"
        },
        "sink": {
            "type": "SqlSink"
        },
        "translator": {
            "type": "TabularTranslator",
            "typeConversion": true,
            "typeConversionSettings": {
                "allowDataTruncation": true,
                "treatBooleanAsNumber": true,
                "dateTimeFormat": "yyyy-MM-dd HH:mm:ss.fff",
                "dateTimeOffsetFormat": "yyyy-MM-dd HH:mm:ss.fff zzz",
                "timeSpanFormat": "dd\.hh\:mm",
                "culture": "en-gb"
            }
        }
	},
    ...
}

النماذج القديمة

إشعار

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

تعيين عمود بديل (نموذج قديم)

يمكنك تحديد «copy activity» - >translator ->columnMappings لتعيينه بين البيانات ذات الشكل الجدولي. في هذه الحالة، يكون القسم "structure" مطلوباً لمجموعات بيانات الإدخال والإخراج. يدعم تعيين العمود تعيين كل الأعمدة أو مجموعة فرعية منها في "بنية" مجموعة البيانات المصدر لجميع الأعمدة في "بنية" مجموعة بيانات المتلقي. فيما يلي شروط حدوث الخطأ التي ينتج عنها استثناء:

  • لا تحتوي نتيجة استعلام مخزن البيانات المصدر على اسم عمود محدد في قسم "structure" لمجموعة بيانات الإدخال.
  • مخزن بيانات المتلقي (إذا كان مع مخطط محدد مسبقاً) لا يحتوي على اسم عمود محدد في قسم "structure" لمجموعة البيانات الإخراج.
  • عدد الأعمدة في "بنية" مجموعة بيانات المتلقي أقل أو أكثر مما هو محدد في التعيين.
  • تعيين مكرر.

في المثال التالي، تحتوي مجموعة بيانات الإدخال على بنية، وتشير إلى جدول في قاعدة بيانات Oracle المحلية.

{
    "name": "OracleDataset",
    "properties": {
        "structure":
         [
            { "name": "UserId"},
            { "name": "Name"},
            { "name": "Group"}
         ],
        "type": "OracleTable",
        "linkedServiceName": {
            "referenceName": "OracleLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "SourceTable"
        }
    }
}

في هذا النموذج، تحتوي مجموعة بيانات الإخراج على بنية وتشير إلى جدول في Salesforce.

{
    "name": "SalesforceDataset",
    "properties": {
        "structure":
        [
            { "name": "MyUserId"},
            { "name": "MyName" },
            { "name": "MyGroup"}
        ],
        "type": "SalesforceObject",
        "linkedServiceName": {
            "referenceName": "SalesforceLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "SinkTable"
        }
    }
}

يحدد JSON التالي نشاط نسخ في خط تدفقات. تم تعيين الأعمدة من المصدر إلى الأعمدة الموجودة في المتلقي باستخدام خاصية translator->columnMappings.

{
    "name": "CopyActivity",
    "type": "Copy",
    "inputs": [
        {
            "referenceName": "OracleDataset",
            "type": "DatasetReference"
        }
    ],
    "outputs": [
        {
            "referenceName": "SalesforceDataset",
            "type": "DatasetReference"
        }
    ],
    "typeProperties":    {
        "source": { "type": "OracleSource" },
        "sink": { "type": "SalesforceSink" },
        "translator":
        {
            "type": "TabularTranslator",
            "columnMappings":
            {
                "UserId": "MyUserId",
                "Group": "MyGroup",
                "Name": "MyName"
            }
        }
    }
}

إذا كنت تستخدم بناء الجملة "columnMappings": "UserId: MyUserId, Group: MyGroup, Name: MyName" لتحديد تعيين العمود، فإنه لا يزال مدعوماً كما هو.

تعيين مخطط بديل (الطراز القديم)

يمكنك تحديد نشاط النسخ ->translator>schemaMapping لتعيين بين البيانات ذات الشكل الهرمي والبيانات ذات الشكل الجدولي، على سبيل المثال، النسخ من MongoDB/REST إلى ملف نصي والنسخ من Oracle إلى Azure Cosmos DB ل MongoDB. الخصائص التالية مدعومة في القسم translator لنشاط النسخ:

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية النوع لمترجم نشاط النسخ على: TabularTranslator ‏‏نعم‬
schemaMapping مجموعة من أزواج القيمة الرئيسية، والتي تمثل علاقة التعيين من جانب المصدر إلى جانب المتلقي.
- المفتاح: يمثل المصدر. بالنسبة لمصدر جدولي، حدد اسم العمود كما هو محدد في بنية مجموعة البيانات؛ بالنسبة لمصدر التسلسل الهرمي، حدد تعبير مسار JSON لكل حقل لاستخراجه وتعيينه.
- القيمة: تمثل المتلقي. بالنسبة لمتلقي جدولي، حدد اسم العمود كما هو محدد في بنية مجموعة البيانات؛ بالنسبة لمتلقي التسلسل الهرمي، حدد تعبير مسار JSON لكل حقل لاستخراجه وتعيينه.
في حالة البيانات الهرمية، للحقول ضمن الكائن الجذر، يبدأ مسار JSON بالجذر $؛ للحقول داخل الصفيف الذي تم اختياره بواسطة الخاصية collectionReference، يبدأ مسار JSON من عنصر الصفيف.
‏‏نعم‬
collectionReference إذا كنت تريد تكرار البيانات واستخراجها من الكائنات داخل حقل صفيف بنفس النمط وتحويلها لكل صف لكل كائن، حدد مسار JSON لهذا الصفيف لتطبيقه بشكل متقاطع. يتم دعم هذه الخاصية فقط عندما تكون البيانات الهرمية مصدر. لا

مثال: نسخ من MongoDB إلى Oracle:

على سبيل المثال، إذا كان لديك مستند MongoDB بالمحتوى التالي:

{
    "id": {
        "$oid": "592e07800000000000000000"
    },
    "number": "01",
    "date": "20170122",
    "orders": [
        {
            "prod": "p1",
            "price": 23
        },
        {
            "prod": "p2",
            "price": 13
        },
        {
            "prod": "p3",
            "price": 231
        }
    ],
    "city": [ { "name": "Seattle" } ]
}

وتريد نسخه إلى جدول azure SQL بالتنسيق التالي، عن طريق تسوية البيانات داخل الصفيف (order_pd and order_price) والربط المتقاطع مع معلومات الجذر المشتركة (الرقم والتاريخ والمدينة):

orderNumber orderDate order_pd سعر الطلب city
01 20170122 P1 23 سياتل
01 20170122 P2 13 سياتل
01 20170122 P3 231 سياتل

تكوين قاعدة تعيين المخطط كنموذج JSON لنشاط النسخ التالي:

{
    "name": "CopyFromMongoDBToOracle",
    "type": "Copy",
    "typeProperties": {
        "source": {
            "type": "MongoDbV2Source"
        },
        "sink": {
            "type": "OracleSink"
        },
        "translator": {
            "type": "TabularTranslator",
            "schemaMapping": {
                "$.number": "orderNumber",
                "$.date": "orderDate",
                "prod": "order_pd",
                "price": "order_price",
                "$.city[0].name": "city"
            },
            "collectionReference":  "$.orders"
        }
    }
}

راجع مقالات نشاط النسخ الأخرى: