ترحيل مخطط قاعدة بيانات تمت تسويته من Azure SQL Database إلى حاوية Azure CosmosDB دون تسوية

يشرح هذا الدليل كيفية أخذ مخطط قاعدة بيانات تمت تسويته في قاعدة بيانات Azure SQL وتحويله إلى مخطط Azure Cosmos DB دون تسوية للتحميل في Azure Cosmos DB.

عادة ما تُصمم مخططات SQL باستخدام النموذج العادي الثالث، ما يؤدي إلى مخططات تمت تسويتها توفر مستويات عالية أقل من تكامل البيانات وقيم بيانات مكررة. يمكن للاستعلامات ضم الكيانات معاً عبر الجداول للقراءة. تم تحسين Azure Cosmos DB للمعاملات السريعة الفائقة والاستعلام داخل مجموعة أو حاوية عبر مخططات غير منسقة مع بيانات مكتفية ذاتيا داخل مستند.

باستخدام Azure Data Factory، سننشئ مساراً يستخدم Flow تدفق بيانات تعيين مفرد للقراءة من جدولين تمت تسويتهما في قاعدة بيانات Azure SQL يحتويان على مفاتيح أساسية ومفاتيح خارجية كعلاقة كيان. سينضم ملف تعريف التطبيق (ADF) إلى هذه الجداول في تدفق مفرد باستخدام محرك Spark لتدفق البيانات، ويجمع الصفوف المرتبطة في صفائف ويُنتج مستندات فردية مُنتقاة لإدراجها في حاوية Azure Cosmos DB جديدة.

سيقوم هذا الدليل ببناء حاوية جديدة بسرعة فائقة تسمى "الطلبات" والتي ستستخدم جداول SalesOrderHeader وSalesOrderDetail من قاعدة بيانات نموذج Adventure Works القياسية لـ SQL Server. تُمثل هذه الجداول حركات المبيعات التي انضم إليها SalesOrderID. كل سجل من سجلات التفاصيل الفريدة له مفتاحه الأساسي الخاص لـ SalesOrderDetailID. العلاقة بين العنوان والتفاصيل هي 1:M. سننضم إلى SalesOrderID في ملف تعريف التطبيق (ADF) ثم نقوم بلف كل سجل تفصيلي ذي صلة في صفيف يسمى "التفاصيل".

استعلام SQL المُمثل لهذا الدليل هو:

  SELECT
  o.SalesOrderID,
  o.OrderDate,
  o.Status,
  o.ShipDate,
  o.SalesOrderNumber,
  o.ShipMethod,
  o.SubTotal,
  (select SalesOrderDetailID, UnitPrice, OrderQty from SalesLT.SalesOrderDetail od where od.SalesOrderID = o.SalesOrderID for json auto) as OrderDetails
FROM SalesLT.SalesOrderHeader o;

ستقوم حاوية Azure Cosmos DB الناتجة بتضمين الاستعلام الداخلي في مستند واحد وستبدو كما يلي:

Collection

إنشاء البنية الأساسية لبرنامج ربط العمليات التجارية

  1. حدد +New Pipeline لإنشاء مسار جديد.

  2. أضف نشاط تدفق بيانات

  3. في نشاط تدفق البيانات، حدد New mapping data flow.

  4. سنقوم ببناء هذا الرسم البياني لتدفق البيانات أدناه

    Data Flow Graph

  5. قم بتعريف المصدر لـ "SourceOrderDetails". بالنسبة لمجموعة البيانات، قم بإنشاء مجموعة بيانات جديدة لقاعدة بيانات Azure SQL تشير إلى جدول SalesOrderDetail.

  6. قم بتعريف المصدر لـ "SourceOrderHeader". بالنسبة لمجموعة البيانات، قم بإنشاء مجموعة بيانات جديدة لقاعدة بيانات Azure SQL تشير إلى جدول SalesOrderHeader.

  7. على المصدر العلوي، أضف تحويل عمود مشتق بعد "SourceOrderDetails". قم باستدعاء التحويل الجديد "TypeCast". نحتاج إلى تقريب UnitPrice العمود وإرساله إلى نوع بيانات مزدوج ل Azure Cosmos DB. قم بتعيين الصيغة إلى: toDouble(round(UnitPrice,2)).

  8. أضف عموداً مشتقاً آخر وسمه "MakeStruct". هذا هو المكان الذي سننشئ فيه بنية هرمية للاحتفاظ بالقيم من جدول التفاصيل. تذكر أن التفاصيل هي علاقة M:1 بعنوان. قم بتسمية البنية الجديدة orderdetailsstruct وأنشئ التسلسل الهرمي بهذه الطريقة، مع تعيين كل متدرج فرعي إلى اسم العمود الوارد:

    Create Structure

  9. الآن، لنذهب إلى مصدر عنوان المبيعات. أضف تحويل ربط. بالنسبة للجانب الأيمن حدد "MakeStruct". اتركه مضبوطاً إلى صلة داخلية واختر SalesOrderID لكلا جانبي شرط الصلة.

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

    Join

  11. قبل أن نتمكن من إنشاء الصفائف لإلغاء تكرار هذه الصفوف، نحتاج أولا إلى إزالة الأعمدة غير المرغوب فيها والتأكد من تطابق قيم البيانات مع أنواع بيانات Azure Cosmos DB.

  12. أضف تحويل التحديد التالي وقم بتعيين تعيين الحقل ليبدو كما يلي:

    Column scrubber

  13. الآن، دعونا نُحول عمود العملة مرة أخرى، وهذه المرة TotalDue. كما فعلنا أعلاه في الخطوة 7، قم بتعيين الصيغة إلى: toDouble(round(TotalDue,2)).

  14. هنا حيث سنقوم بإلغاء تسوية الصفوف عن طريق التجميع حسب المفتاح المشترك SalesOrderID. أضف تحويلاً تجميعياً ثم قم بتعيين المجموعة على SalesOrderID.

  15. في الصيغة التجميعية، أضف عموداً جديداً يسمى "التفاصيل" واستخدم هذه الصيغة لجمع القيم في البنية التي أنشأناها سابقاً تسمى orderdetailsstruct: collect(orderdetailsstruct).

  16. سيؤدي التحويل التجميعي إلى إنتاج أعمدة فقط تكون جزءاً من التجميع أو المجموعة حسب الصيغ. لذلك، نحن بحاجة إلى تضمين الأعمدة من عنوان المبيعات كذلك. للقيام بذلك، أضف نمط عمود في نفس التحويل التجميعي. سيتضمن هذا النمط جميع الأعمدة الأخرى في الإخراج، باستثناء الأعمدة المدرجة أدناه (OrderQty، UnitPrice، SalesOrderID):

instr(name,'OrderQty')==0&&instr(name,'UnitPrice')==0&&instr(name,'SalesOrderID')==0

  1. استخدم بناء الجملة "هذا" ($$) في الخصائص الأخرى بحيث نحافظ على نفس أسماء الأعمدة ونستخدم الدالة first() كتجمع: يخبر هذا ADF بالاحتفاظ بالقيمة المطابقة الأولى التي تم العثور عليها:

    Aggregate

  2. نحن مستعدون لإنهاء تدفق الترحيل عن طريق إضافة تحويل متلقي. انقر فوق "جديد" بجوار مجموعة البيانات وأضف مجموعة بيانات Azure Cosmos DB التي تشير إلى قاعدة بيانات Azure Cosmos DB. بالنسبة للمجموعة، سنسميها "أوامر" ولن يكون لها مخطط ولا مستندات لأنه سيتم إنشاؤها بسرعة فائقة.

  3. في إعدادات متلقٍ، قسم المفتاح إلى /SalesOrderID وجمّع الإجراء إلى "إعادة الإنشاء". تأكد من أن علامة تبويب التعيين تبدو كما يلي:

    Screenshot shows the Mapping tab.

  4. انقر فوق معاينة البيانات للتأكد من أنك ترى هذه الصفوف الـ 32 مُعينة لإدراج مستندات جديدة في حاويتك الجديدة:

    Screenshot shows the Data preview tab.

إذا كان كل شيء يبدو جيداً، فأنت الآن على استعداد لإنشاء مسار جديد، وإضافة نشاط تدفق البيانات هذا إلى هذا المسار وتنفيذه. يمكنك تنفيذ من تتبع الأخطاء أو تشغيل المشغّل. بعد بضع دقائق، يجب أن يكون لديك حاوية جديدة غير منسقة من الطلبات تسمى "الطلبات" في قاعدة بيانات Azure Cosmos DB.