نسخ البيانات من أو إلى MongoDB باستخدام Azure Data Factory أو Synapse Analytics

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

تلميح

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

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

هام

يوفر موصل MongoDB الجديد دعمًا محسنًا من MongoDB الأصلي. إذا كنت تستخدم موصل MongoDB القديم في الحل الخاص بك، المدعوم كما هو للتوافق مع الإصدارات السابقة فقط، راجع مقالة موصل MongoDB (القديمة).

القدرات المدعومة

موصل Azure Files هذا مدعوم للإمكانيات التالية:

القدرات المدعومة IR
Copy activity (المصدر/المتلق) ① ②

① وقت تشغيل تكامل Azure ② وقت تشغيل التكامل المستضاف ذاتيًا

للحصول على قائمة مخازن البيانات المعتمدة كمصادر ومواضع تلقي، راجع جدول مخازن البيانات المعتمدة.

على وجه التحديد، يدعم موصل MongoDB هذا إصدارات تصل إلى 4.2.

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

إذا كان مخزن البيانات الخاص بك موجوداً داخل شبكة محلية، أو شبكة Azure ظاهرية، أو Amazon Virtual Private Cloud، فأنت بحاجة إلى تكوين وقت تشغيل تكامل مستضاف ذاتياً للاتصال به.

إذا كان مخزن البيانات الخاص بك عبارة عن خدمة بيانات سحابية مُدارة، يمكنك استخدام Azure Integration Runtime. إذا كان الوصول مقتصراً على عناوين IP التي تمت الموافقة عليها في قواعد جدار الحماية، يمكنك إضافة عناوين IP لـ Azure Integration Runtime إلى قائمة السماح.

يمكنك أيضاً استخدام ميزة وقت تشغيل تكامل الشبكة الظاهرية المُدارة في Azure Data Factory للوصول إلى الشبكة المحلية دون تثبيت وقت تشغيل تكامل مستضاف ذاتياً وتكوينه.

لمزيد من المعلومات حول آليات وخيارات أمان الشبكة التي يدعمها Data Factory، راجع إستراتيجيات الوصول إلى البيانات.

الشروع في العمل

لتنفيذ نشاط النسخ باستخدام أحد المسارات، يمكنك استخدام إحدى الأدوات أو عدد تطوير البرامج التالية:

إنشاء خدمة مرتبطة لـ MongoDB باستخدام واجهة المستخدم

استخدم الخطوات التالية لإنشاء خدمة مرتبطة لـ MongoDB في واجهة مستخدم مدخل Microsoft Azure.

  1. استعرض للوصول إلى علامة التبويب "Manage" في مصنع بيانات Azure أو مساحة عمل Synapse، وحدد "Linked Services"، ثم انقر فوق "New":

  2. ابحث عن MongoDB وحدد موصل MongoDB.

    Select the MongoDB connector.

  3. قم بتكوين تفاصيل الخدمة، واختبر الاتصال، وأنشئ الخدمة المرتبطة الجديدة.

    Configure a linked service to MongoDB.

تفاصيل تكوين الموصل

توفر الأقسام التالية تفاصيل حول الخصائص المستخدمة لتعريف كيانات Data Factory الخاصة بموصل MongoDB.

خصائص الخدمة المرتبطة

الخصائص التالية مدعومة لخدمة MongoDB المرتبطة:

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية النوع إلى: MongoDbV2 ‏‏نعم‬
سلسلة الاتصال حدد سلسلة اتصال MongoDB على سبيل المثال mongodb://[username:password@]host[:port][/[database][?options]]. ارجع إلى دليل MongoDB على سلسلة الاتصال للحصول على مزيد من التفاصيل.

يمكنك أيضاً وضع سلسلة اتصال في Azure Key Vault. راجع تخزين بيانات الاعتماد في Azure Key Vault للحصول على المزيد من التفاصيل.
‏‏نعم‬
قاعدة بيانات اسم قاعدة البيانات التي تريد الوصول إليها. ‏‏نعم‬
connectVia Integration Runtime الذي سيتم استخدامه للاتصال بمخزن البيانات. تعرف على المزيد من قسم المتطلبات الأساسية. إذا لم يتم تحديده، فإنه يستخدم Azure Integration Runtime الافتراضي. لا

مثال:

{
    "name": "MongoDBLinkedService",
    "properties": {
        "type": "MongoDbV2",
        "typeProperties": {
            "connectionString": "mongodb://[username:password@]host[:port][/[database][?options]]",
            "database": "myDatabase"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

خصائص مجموعة البيانات

للحصول على قائمة كاملة بالأقسام والخصائص المتاحة لتعريف مجموعات البيانات، راجع مجموعات البيانات والخدمات المرتبطة. يتم دعم الخصائص التالية لمجموعة بيانات MongoDB:

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية نوع مجموعة البيانات إلى: MongoDbV2Collection ‏‏نعم‬
اسم المجموعة اسم المجموعة في قاعدة بيانات MongoDB. ‏‏نعم‬

مثال:

{
    "name": "MongoDbDataset",
    "properties": {
        "type": "MongoDbV2Collection",
        "typeProperties": {
            "collectionName": "<Collection name>"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<MongoDB linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

انسخ خصائص النشاط

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

MongoDB كمصدر

تُدعم الخصائص التالية في قسم مصدر نشاط النسخ:

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية نوع مصدر نشاط النسخ إلى:MongoDbV2Source ‏‏نعم‬
filter يحدد عامل تصفية التحديد باستخدام عوامل تشغيل الاستعلام. لإرجاع جميع المستندات في مجموعة، احذف هذه المعلمة أو مرر مستند فارغ ({}). لا
cursorMethods.project يحدد الحقول التي سيتم إرجاعها في المستندات للإسقاط. لإرجاع جميع الحقول في المستندات المطابقة، احذف هذه المعلمة. لا
cursorMethods.sort يحدد الترتيب الذي يقوم الاستعلام بإرجاع مستندات مطابقة به. ارجع إلى cursor.sort(). لا
cursorMethods.limit يحدد الحد الأقصى لعدد المستندات التي يرجعها الخادم. ارجع إلى cursor.limit(). لا
cursorMethods.skip يحدد عدد المستندات التي يجب تخطيها والتي يبدأ MongoDB من عندها في إرجاع النتائج. الرجوع إلى cursor.skip(). لا
batchSize يحدد عدد المستندات التي سيتم إرجاعها في كل دُفعة من الاستجابة من مثيل MongoDB. في معظم الحالات، لن يؤثر تعديل حجم الدُفعة على المستخدم أو التطبيق. لا يمكن أن يتجاوز حجم كل دفعة في Azure Cosmos DB 40 ميغابايت، وهو مجموع عدد حجم الدفعات لحجم المستندات، لذا قم بتقليص هذه القيمة إذا كان حجم المستند كبيرا. لا
(الافتراضي هو 100)

تلميح

تدعم الخدمة استهلاك مستند BSON في الوضع Strict. تأكد من أن استعلام التصفية في الوضع Strict بدلًا من الوضع Shell. يمكن العثور على مزيد من الوصف في دليل MongoDB.

مثال:

"activities":[
    {
        "name": "CopyFromMongoDB",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<MongoDB input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "MongoDbV2Source",
                "filter": "{datetimeData: {$gte: ISODate(\"2018-12-11T00:00:00.000Z\"),$lt: ISODate(\"2018-12-12T00:00:00.000Z\")}, _id: ObjectId(\"5acd7c3d0000000000000000\") }",
                "cursorMethods": {
                    "project": "{ _id : 1, name : 1, age: 1, datetimeData: 1 }",
                    "sort": "{ age : 1 }",
                    "skip": 3,
                    "limit": 3
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

MongoDB كمتلقي

تُدعم الخصائص التالية في قسم متلقي نشاط النسخ:

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية نوع متلقٍ نشاط النسخ إلى MongoDbV2Sink. ‏‏نعم‬
writeBehavior توضح هذه المقالة كيفية كتابة البيانات إلى MongoDB. القيم المسموح بها: insert وupsert.

سلوك upsert هو استبدال المستند إذا كان مستند بنفس _id موجود مسبقًا؛ وإلا، قم بإدراج المستند.

ملاحظة: تنشئ الخدمة تلقائيًا_id لمستند إذا لم يتم تحديد _id إما في المستند الأصلي أو بتعيين عمود. وهذا يعني أنه يجب عليك التأكد من أن المستند يحتوي على معرّف لكي يعمل upsert كما هو متوقع.
لا
(الافتراضي هو insert)
writeBatchSize تتحكم خاصية writeBatchSize في حجم المستندات للكتابة في كل دُفعة. يمكنك محاولة زيادة قيمة writeBatchSize لتحسين الأداء وتقليل القيمة إذا كان حجم المستند كبيرًا. لا
(الافتراضي هو 10,000)
writeBatchTimeout وقت الانتظار لانتهاء عملية إدراج الدُفعة قبل انتهاء الوقت. القيمة المسموح بها هي نهاية الوقت. لا
(الافتراضي هو 00:30:00 - 30 دقيقة)

تلميح

لاستيراد مستندات JSON كما هي، راجع قسم استيراد أو تصدير مستندات JSON؛ وللنسخ من بيانات على شكل جدولي، راجع تعيين المخطط.

مثال

"activities":[
    {
        "name": "CopyToMongoDB",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Document DB output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "MongoDbV2Sink",
                "writeBehavior": "upsert"
            }
        }
    }
]

استيراد وتصدير مستندات JSON

يمكنك استخدام موصل MongoDB هذا للقيام بما يلي بسهولة:

  • نسخ المستندات بين مجموعتين MongoDB كما هي.
  • قم باستيراد مستندات JSON من مصادر مختلفة إلى MongoDB، بما في ذلك من Azure Cosmos DB، وتخزين Azure Blob، وAzure Data Lake Store، ومتاجر أخرى مدعومة تستند على الملفات.
  • تصدير مستندات JSON من مجموعة MongoDB إلى مختلف المتاجر المستندة إلى الملفات.

للوصول إلى هذه النسخة متعددة المخططات، قم بتخطي المقطع "structure" (المسمى أيضاً schema) في مجموعة البيانات وتعيين المخطط في copy activity.

تعيين المخطط

لنسخ البيانات من MongoDB إلى متلقٍ جدولي أو عكسها، راجع تعيين المخطط.

ترقية خدمة MongoDB المرتبطة

فيما يلي الخطوات التي تساعدك على ترقية الخدمة المرتبطة والاستعلامات ذات الصلة:

  1. إنشاء خدمة MongoDB مرتبطة جديدة وتكوينها بالإشارة إلى خصائص الخدمة المرتبطة.

  2. إذا كنت تستخدم استعلامات SQL في البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك التي تشير إلى خدمة MongoDB المرتبطة القديمة، فاستبدلها باستعلامات MongoDB المكافئة. راجع الجدول التالي للحصول على أمثلة الاستبدال:

    استعلام عن SQL استعلام MongoDB المكافئ
    SELECT * FROM users db.users.find({})
    SELECT username, age FROM users db.users.find({}, {username: 1, age: 1})
    SELECT username AS User, age AS Age, statusNumber AS Status, CASE WHEN Status = 0 THEN "Pending" CASE WHEN Status = 1 THEN "Finished" ELSE "Unknown" END AS statusEnum LastUpdatedTime + interval '2' hour AS NewLastUpdatedTime FROM users db.users.aggregate([{ $project: { _id: 0, User: "$username", Age: "$age", Status: "$statusNumber", statusEnum: { $switch: { branches: [ { case: { $eq: ["$Status", 0] }, then: "Pending" }, { case: { $eq: ["$Status", 1] }, then: "Finished" } ], default: "Unknown" } }, NewLastUpdatedTime: { $add: ["$LastUpdatedTime", 2 * 60 * 60 * 1000] } } }])
    SELECT employees.name, departments.name AS department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.id; db.employees.aggregate([ { $lookup: { from: "departments", localField: "department_id", foreignField: "_id", as: "department" } }, { $unwind: "$department" }, { $project: { _id: 0, name: 1, department_name: "$department.name" } } ])

للحصول على قائمة بمخازن البيانات المدعومة من نشاط النسخ كمصادر ومواضع تلقي، راجع مخازن البيانات المدعومة.