البرنامج التعليمي: ترحيل البيانات الملتقطة لمراكز الأحداث من Azure Storage إلى Azure Synapse Analytics باستخدام Azure Event Grid وAzure Functions

في هذا البرنامج التعليمي، ستقوم بترحيل البيانات الملتقطة لمراكز الأحداث من Azure Blob Storage إلى Azure Synapse Analytics، وتحديدا تجمع SQL مخصص، باستخدام Azure Event Grid وAzure Functions.

نظرة عامة على التطبيق

يصور هذا الرسم البياني سير عمل الحل الذي يبنيه هذا البرنامج التعليمي:

  1. يتم تسجيل البيانات المرسلة إلى مركز أحداث Azure في تخزين البيانات الثنائية الكبيرة في Azure.
  2. عند اكتمال التقاط البيانات، يتم إنشاء حدث وإرساله إلى Azure Event Grid.
  3. تقوم Azure Event Grid بإعادة توجيه بيانات الحدث هذه إلى تطبيق وظيفة Azure.
  4. يستخدم تطبيق الدالة عنوان "اليو آر إل" الكائن الثنائي كبير الحجم في بيانات الحدث لاسترداد الكائن ثنائي كبير الحجم من التخزين.
  5. يقوم تطبيق الوظائف بترحيل بيانات الكائن الثنائي كبير الحجم إلى تحليلات Azure Synapse.

في هذا البرنامج التعليمي، نُفذت الخطوات التالية:

  • نشر البنية الأساسية المطلوبة للبرنامج التعليمي
  • نشر التعليمات البرمجية على تطبيق الوظائف
  • إنشاء اشتراك "شبكة الأحداث"
  • نموذج تدفق البيانات إلى Event Hubs
  • التحقيق من تخزين البياناتAzure Synapse Analytics

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

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

  • تفترض هذه المقالة أنك على دراية بشبكة الأحداث ومراكز الأحداث (خاصة ميزة الالتقاط). إذا لم تكن على دراية ب Azure Event Grid، فراجع مقدمة إلى Azure Event Grid. للتعرف على ميزة الالتقاط في Azure Event Hubs، راجع التقاط الأحداث من خلال Azure Event Hubs في Azure Blob Storage أو Azure Data Lake Storage.
  • اشتراك Azure. في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
  • Visual studio مع أحمال العمل لـ : تطوير سطح مكتب NET. وتطوير Azure وASP.NET وتطوير الويب وتطوير Node.js وتطوير Python.
  • تحميل نموذج مشروع EventHubsCaptureEventGridDemo على جهاز الكمبيوتر.
    • WindTurbineDataGenerator - ناشر بسيط يرسل عينة من بيانات توربينات الرياح إلى مركز أحداث مع تمكين ميزة الالتقاط.
    • FunctionDWDumper – دالة Azure تتلقى إعلاما من Azure Event Grid عند التقاط ملف Avro إلى كائن تخزين Azure الثنائي كبير الحجم. تتلقي مسار "اليو آر إل" الكائن ثنائي الحجم، وتقرأ محتوياته، وتدفع هذه البيانات إلى Azure Synapse Analytics (مجموعة SQL المخصصة).

نشر البنية الأساسية

في هذه الخطوة، يمكنك نشر البنية الأساسية المطلوبة مع قالب إدارة الموارد. عند نشر القالب، يتم إنشاء الموارد التالية:

  • Event hub مع تمكين ميزة التسجيل.
  • حساب تخزين الملفات الملتقطة.
  • خطة خدمة التطبيق لاستضافة تطبيق الوظيفة
  • تطبيق الوظيفة لمعالجة الحدث
  • SQL Server لاستضافة مستودع البيانات
  • Azure Synapse Analytics (dedicated SQL pool) لتخزين البيانات التي تم ترحيلها

استخدم Azure CL لنشر البنية الأساسية

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. حدد زر Cloud Shell في الأعلى.

    لقطة شاشة لمدخل Microsoft Azure تعرض تحديد زر Cloud Shell.

  3. سترى Cloud Shell مفتوحاً في الجزء السفلي من المتصفح.

    1. إذا كنت تستخدم Cloud Shell لأول مرة:
      1. إذا رأيت خياراً للاختيار بين Bash وPowerShell، فحدد Bash.

      2. أنشئ حساب تخزين عن طريق تحديد Create storage. Azure Cloud Shell يتطلب حساب تخزين Azure لتخزين بعض الملفات.

        لقطة شاشة تعرض إنشاء مساحة تخزين لـ Cloud Shell.

      3. انتظر حتى تتم تهيئة Cloud Shell.

        لقطة شاشة تظهر تكوين Cloud Shell.

  4. في Cloud Shell، حدد Bash كما هو موضح في الصورة أعلاه، إذا لم تكن محددة بالفعل.

  5. إنشاء مجموعة موارد Azure عن طريق تشغيل الأمر CLI التالي:

    1. نسخ الأمر التالي ولصقة في نافذة Cloud Shell. تغيير اسم مجموعة الموارد والموقع إذا كنت تريد ذلك.

      az group create -l eastus -n rgDataMigration
      
    2. اضغط ENTER.

      إليك مثال:

      user@Azure:~$ az group create -l eastus -n rgDataMigration
      {
        "id": "/subscriptions/00000000-0000-0000-0000-0000000000000/resourceGroups/rgDataMigration",
        "location": "eastus",
        "managedBy": null,
        "name": "rgDataMigration",
        "properties": {
          "provisioningState": "Succeeded"
        },
        "tags": null
      }
      
  6. نشر جميع الموارد المذكورة في المقطع السابق (مركز الحدث، حساب التخزين، وظائف التطبيق، تحليلات Azure Synapse) عن طريق تشغيل الأمر CLI التالية:

    1. نسخ الأمر التالي ولصقة في نافذة Cloud Shell. بدلا من ذلك، يمكنك نسخ/لصق في محرر من اختيارك، وتعيين القيم، ثم نسخ الأمر إلى Cloud Shell. إذا رأيت خطأ بسبب اسم مورد Azure، فاحذف مجموعة الموارد، وأصلح الاسم، وأعد محاولة الأمر مرة أخرى.

      هام

      حدد قيم الكيانات التالية قبل تشغيل الأمر:

      • اسم مجموعة الموارد التي قمت بإنشائها سابقاً.
      • اسم مركز الحدث namespace.
      • اسم مركز الحدث. يمكنك ترك القيمة كما هي (hubdatamigration).
      • اسم ملقم SQL.
      • اسم مستخدم SQL وكلمة المرور.
      • اسم قاعدة البيانات.
      • اسم حساب التخزين.
      • اسم تطبيق الوظائف.
      az deployment group create \
          --resource-group rgDataMigration \
          --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/event-grid/EventHubsDataMigration.json \
          --parameters eventHubNamespaceName=<event-hub-namespace> eventHubName=hubdatamigration sqlServerName=<sql-server-name> sqlServerUserName=<user-name> sqlServerPassword=<password> sqlServerDatabaseName=<database-name> storageName=<unique-storage-name> functionAppName=<app-name>
      
    2. اضغط ENTER في نافذة Cloud Shell لتشغيل الأمر. قد تستغرق هذه العملية بعض الوقت نظرا لأنك تقوم بإنشاء مجموعة من الموارد. في نتيجة الأمر، تأكد من عدم وجود أي إخفاقات.

  7. أغلق Cloud Shell عن طريق تحديد زر Cloud Shell في المدخل (أو) زر X في الزاوية العلوية اليمنى من نافذة Cloud Shell.

تحقق من إنشاء الموارد

  1. في مدخل Azure، حدد مجموعات الموارد في القائمة اليسرى.

  2. تصفية قائمة مجموعات الموارد عن طريق إدخال اسم مجموعة الموارد في مربع البحث.

  3. حدد مجموعة مواردك في القائمة.

    لقطة شاشة توضح اختيار مجموعة الموارد.

  4. تأكد من مشاهدة الموارد التالية في مجموعة الموارد:

    لقطة شاشة تعرض الموارد في مجموعة الموارد.

إنشاء جدول في Azure Synapse Analytics

في هذا القسم، تقوم بإنشاء جدول في تجمع SQL المخصص الذي قمت بإنشائه مسبقاً.

  1. في قائمة الموارد في مجموعة الموارد، تحديد dedicated SQL pool.

  2. في صفحة Dedicated SQL pool في قسم المهام العامة في القائمة اليسرى، تحديد محرر الاستعلام (معاينة).

    لقطة شاشة تعرض تحديد محرر الاستعلام في صفحة تجمع SQL مخصصة في مدخل Microsoft Azure.

  3. إدخال اسم المستخدموكلمة المرور لخادم SQL، ثم تحديد موافق. إذا رأيت رسالة حول السماح للعميل بالوصول إلى خادم SQL، فحدد Allowlist IP <عنوان> IP الخاص بك على خادم <>SQL، ثم حدد OK.

  4. في إطار الاستعلام نسخ وتشغيل البرنامج النصي SQL التالي:

    CREATE TABLE [dbo].[Fact_WindTurbineMetrics] (
        [DeviceId] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MeasureTime] datetime NULL,
        [GeneratedPower] float NULL,
        [WindSpeed] float NULL,
        [TurbineSpeed] float NULL
    )
    WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN);
    

    لقطة شاشة تعرض محرر الاستعلام.

  5. إبقاء علامة التبويب هذه أو النافذة مفتوحة بحيث يمكنك التحقق من إنشاء البيانات في نهاية البرنامج التعليمي.

نشر تطبيق وظائف Azure

أولاً، احصل على ملف تعريف النشر لتطبيق Functions من مدخل Microsoft Azure. بعد ذلك، استخدم ملف تعريف النشر لنشر مشروع أو تطبيق Azure Functions من Visual Studio.

احصل على ملف تعريف النشر

  1. في صفحة مجموعة الموارد، حدد Azure Functions app في قائمة الموارد.

    لقطة شاشة تعرض اختيار تطبيق الوظائف في قائمة الموارد لمجموعة الموارد.

  2. في صفحة Function App لتطبيقك، حدد Get publish profile في شريط الأوامر.

    لقطة شاشة تعرض اختيار زر ** Get Publish Profile ** على شريط الأوامر بصفحة تطبيق الوظائف.

  3. قم بتنزيل الملف وحفظه في المجلد الفرعي FunctionEGDDumper للمجلد EventHubsCaptureEventGridDemo.

استخدم ملف تعريف النشر لنشر تطبيق الوظائف

  1. قم بتشغيل Visual Studio.

  2. فتح EventHubsCaptureEventGridDemo.sln الحل الذي قمت بتحميله من GitHub كجزء من المتطلبات الأساسية. يمكنك العثور عليه في /samples/e2e/EventHubsCaptureEventGridDemo المجلد.

  3. في مستكشف الحلول، التحديد بزر الماوس الأيمن على FunctionEGDWDumper المشروع، وتحديد نشر.

  4. في الشاشة التالية، حدد Start أو أضف ملف تعريف للنشر.

  5. في مربع الحوارPublish، حدد Import Profile لـ Target، وحدد Next.

    لقطة شاشة تعرض تحديد ** Import Profile ** في مربع الحوار ** Publish **.

  6. في علامة التبويب Import profile، حدد ملف إعدادات النشر الذي حفظته مسبقاً في المجلد FunctionEGDWDumper، ثم حدد Finish.

  7. عند تهيئة Visual Studio لملف التعريف، تحديد نشر. تأكد من نجاح النشر.

  8. في مستعرض الويب الذي يحتوي على صفحة Azure Function مفتوحة، حدد Functions في الجزء الأوسط. تأكد من أن الدالة EventGridTriggerMigrateData تظهر في القائمة. إذا لم تشاهدها، فجرب النشر منVisual Studio مرة أخرى، ثم قم بتحديث الصفحة في المدخل.

    لقطة شاشة توضح تأكيد إنشاء الوظيفة.

بعد نشر الوظيفة، تكون جاهزا للاشتراك في الحدث.

الاشتراك في الحدث

  1. في علامة تبويب جديدة أو نافذة جديدة من مستعرض ويب، سجل الدخول إلى مدخل Microsoft Azure.

  2. في مدخل Azure، حدد مجموعات الموارد في القائمة اليسرى.

  3. تصفية قائمة مجموعات الموارد عن طريق إدخال اسم مجموعة الموارد في مربع البحث.

  4. حدد مجموعة مواردك في القائمة.

  5. تحديد مراكز أحداث namespace من قائمة الموارد.

  6. في صفحة مراكز أحداث Namespace تحديد الأحداث في القائمة اليمنى ثم تحديد + اشتراك الحدث من شريط الأدوات.

    لقطة شاشة لصفحة الأحداث لمساحة اسم مراكز الأحداث مع تحديد ارتباط إضافة اشتراك حدث.

  7. في صفحة إنشاء اشتراك حدث، اتبع الخطوات التالية:

    1. أدخل اسماً للاشتراك في الحدث.

    2. إدخال اسم لموضوع النظام. يوفر موضوع النظام نقطة نهاية للمرسل لإرسال الأحداث. لمزيد من المعلومات، يرجى الاطلاع على الاشتراكات

    3. تحديد «Azure Function» لنوع «Endpoint type».

    4. بالنسبة إلى Endpoint، تحديد الرابط.

    5. في الصفحة تحديد دالة Azure، اتبع الخطوات التالية إذا لم يتم تعبئتها تلقائيا.

      1. تحديد اشتراك Azure الذي يحتوي على مركز IoT الذي قمت بإنشائه.
      2. تحديد منطقة مجموعة الموارد.
      3. حدد تطبيق الوظيفة.
      4. تحديد فتحة التوزيع.
      5. تحديد دالة EventGridTriggerMigrateData.
    6. في الصفحة تحديد دالة Azure، تحديد تأكيد التحديد.

    7. ثم، العودة إلى صفحة «إنشاء اشتراك حدث»، وتحديد «إنشاء».

      لقطة شاشة لصفحة إنشاء اشتراك حدث.

  8. تحقق من إنشاء اشتراك الحدث. التبديل إلى علامة التبويب اشتراكات الأحداث في صفحة الأحداث لمركز أحداث namespace.

    لقطة شاشة تعرض علامة التبويب اشتراكات الأحداث في صفحة الأحداث.

تشغيل التطبيق ليُنشئ البيانات

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

  1. انتقل إلى مجموعة مواردك في مدخل Azure.

  2. تحديد Event Hubs namespace.

  3. في صفحة Event Hubs namespace، تحديد نهج الوصول المشترك في القائمة اليسرى.

  4. تحديد RootManageSharedAccessKey في قائمة النهج.

    لقطة شاشة تعرض صفحة نهج الوصول المشترك لمساحة اسم مراكز الأحداث.

  5. تحديد زر النسخ بجوار مربع نص مفتاح السلسلة الأساسي للاتصال.

  6. العودة إلى حل Visual Studio.

  7. التحديد بزر الماوس الأيمن على مشروع WindTurbineDataGenerator، وتحديد تعيين كمشروع بدء تشغيل.

  8. في مشروع WindTurbineDataGenerator، فتح program.cs.

  9. استبدل <EVENT HUBS NAMESPACE CONNECTION STRING> بسلسلة الاتصال التي قمت بنسخها من المدخل.

  10. إذا استخدمت اسماً مختلفاً لمركز الأحداث بخلاف hubdatamigration، فاستبدل <EVENT HUB NAME> باسم مركز الأحداث.

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  11. قم ببناء الحل. تشغيل تطبيق WindTurbineGenerator.exe.

  12. بعد بضع دقائق، في علامة تبويب أخرى في المستعرض مفتوحاً بها نافذة الاستعلام، استعلم عن الجدول في مستودع بياناتك للبيانات التي تم ترحيلها.

    select * from [dbo].[Fact_WindTurbineMetrics]
    

    لقطة شاشة تعرض نتائج الاستعلام.

هام

نستخدم سلسلة الاتصال للمصادقة على مساحة اسم Azure Event Hubs للحفاظ على البرنامج التعليمي بسيطا. نوصي باستخدام مصادقة معرف Microsoft Entra في بيئات الإنتاج. عند استخدام أحد التطبيقات، يمكنك تمكين الهوية المدارة للتطبيق وتعيين دور مناسب للهوية (مالك مراكز الأحداث Azure أو مرسل بيانات مراكز الأحداث أو متلقي بيانات مراكز الأحداث) على مساحة اسم مراكز الأحداث. لمزيد من المعلومات، راجع تخويل الوصول إلى مراكز الأحداث باستخدام معرف Microsoft Entra.

مراقبة الحل

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

عرض البيانات المسجلة في حساب التخزين

  1. الانتقال إلى مجموعة الموارد وتحديد حساب تخزين المستخدم لتسجيل بيانات الحدث.

  2. في صفحة Storage account ، حدد Storage browser في القائمة اليسرى.

  3. توسيع BLOB CONTAINERS، وتحديد windturbinecapture.

  4. فتح المجلد المسمى بنفس اسم Event Hubs namespace في الجزء الأيمن.

  5. قتح المجلد المسمى بنفس اسم event hub (hubdatamigration).

  6. التنقل خلال المجلدات وستشاهد ملفات AVRO. إليك مثال:

    لقطة شاشة تعرض الملف الذي تم التقاطه في التخزين.

تحقق من أن مشغل "Event Grid" استدعى الدالة

  1. حدد مجموعة الموارد التي يوجد بها تطبيق الدالة.

  2. حدد علامة التبويب Functions في الجزء الأوسط.

  3. تأكد من أن الدالة EventGridTriggerMigrateData تظهر في القائمة.

  4. في صفحة الدالة، تحديد مُراقبة في القائمة اليسرى.

  5. تحديد تهيئة لتهيئة رؤى التطبيق لتسجيل سجلات الاستدعاء.

  6. إنشاء موردApplication Insights جديد أو استخدام مورد موجود.

  7. انتقل مرة أخرى إلى صفحة مراقبة للدالة.

  8. تأكد من أن تطبيق العميل(WindTurbineDataGenerator)الذي يرسل الأحداث لا يزال قيد التشغيل. إذا لم يكن كذلك، قم بتشغيل التطبيق.

  9. انتظر لبضع دقائق (5 دقائق أو أكثر) وحدد بزر تحديث لرؤية استدعاءات الوظائف.

    لقطة شاشة تعرض استدعاءات الدالة.

  10. اختر الاستدعاء للاطلاع على التفاصيل.

    توزع Event Grid بيانات الأحداث إلى المشتركين. يُظهر المثال التالي بيانات الأحداث التي تم إنشاؤها عند تسجيل بيانات التدفق عبر الكائن الثنائي كبير الحجم. على وجه الخصوص، لاحظ fileUrl الخاصية في data نقاط كائن blob في التخزين. يستخدم تطبيق الدالة عنوان "أر بي ال" هذا لاسترداد ملف النقطة مع البيانات المسجلة.

    {
      "topic": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/rgDataMigration/providers/Microsoft.EventHub/namespaces/spehubns1207",
      "subject": "hubdatamigration",
      "eventType": "Microsoft.EventHub.CaptureFileCreated",
      "id": "4538f1a5-02d8-4b40-9f20-36301ac976ba",
      "data": {
        "fileUrl": "https://spehubstorage1207.blob.core.windows.net/windturbinecapture/spehubns1207/hubdatamigration/0/2020/12/07/21/49/12.avro",
        "fileType": "AzureBlockBlob",
        "partitionId": "0",
        "sizeInBytes": 473444,
        "eventCount": 2800,
        "firstSequenceNumber": 55500,
        "lastSequenceNumber": 58299,
        "firstEnqueueTime": "2020-12-07T21:49:12.556Z",
        "lastEnqueueTime": "2020-12-07T21:50:11.534Z"
      },
      "dataVersion": "1",
      "metadataVersion": "1",
      "eventTime": "2020-12-07T21:50:12.7065524Z"
    }
    

تحقق من تخزين البيانات فيdedicated SQL pool

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

لقطة شاشة تعرض نتائج الاستعلام النهائي.

الخطوات التالية