استكشاف أخطاء استعلامات Stream Analytics وإصلاحها

توضح هذه المقالة المشكلات الشائعة المتعلقة بتطوير استعلامات Stream Analytics وكيفية استكشافها وإصلاحها.

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

الاستعلام لا ينتج الإخراج المتوقع

  1. افحص الأخطاء عن طريق الاختبار محلياً:

  2. استعلامات تصحيح الأخطاء خطوة بخطوة محلياً باستخدام مخطط الوظيفة في أدوات Azure Stream Analytics لـ Visual Studio Code. يوضح مخطط الوظيفة كيف تتدفق البيانات من مصادر الإدخال (Event Hub، IoT Hub، إلخ) من خلال خطوات استعلام متعددة وأخيراً إلى أحواض الإخراج. يتم تعيين كل خطوة استعلام لمجموعة نتائج مؤقتة محددة في البرنامج النصي باستخدام عبارة WITH. يمكنك عرض البيانات والقياسات في كل مجموعة نتائج وسيطة للعثور على مصدر المشكلة.

    Job diagram preview result

  3. إذا كنت تستخدم Timestamp By، فتحقق من أن الأحداث بها طوابع زمنية أكبر من وقت بدء المهمة.

  4. تخلص من المزالق الشائعة، مثل:

    • أدت عبارة WHERE في الاستعلام إلى تصفية جميع الأحداث، ما يمنع إنشاء أي ناتج.
    • فشلت وظيفة CAST، ما تسبب في فشل المهمة. لتجنب حالات فشل إرسال الكتابة، استخدم TRY_CAST بدلاً من ذلك.
    • عند استخدام وظائف النافذة، انتظر مدة النافذة بأكملها لترى ناتجاً من الاستعلام.
    • الطابع الزمني للأحداث يسبق وقت بدء الوظيفة ويتم تجاهل الأحداث.
    • JOINالشروط لا تتطابق. إذا لم تكن هناك مطابقات، فلن يكون هناك ناتج.
  5. تأكد من تكوين نُهج ترتيب الأحداث كما هو متوقع. انتقل إلى Settings وحدد Event Ordering. النهج لا يتم تطبيقها عند استخدام الزر اختبار لاختبار الاستعلام. هذه النتيجة هي اختلاف واحد بين الاختبار في المتصفح مقابل تشغيل الوظيفة في الإنتاج.

  6. تصحيح الأخطاء باستخدام سجلات النشاط والموارد:

استخدام الموارد مرتفع

تأكد من الاستفادة من الموازاة في Azure Stream Analytics. يمكنك تعلم كيفية التوسع باستخدام موازاة الاستعلام لوظائف Stream Analytics من خلال تكوين أقسام الإدخال وضبط تعريف استعلام التحليلات.

إذا كان استخدام الموارد يزيد باستمرار عن 80%، فإن تأخير العلامة المائية آخذ في الارتفاع، وعدد الأحداث المتراكمة في تزايد، ففكر في زيادة وحدات التدفق. يشير الاستخدام العالي إلى أن المهمة تستخدم بالقرب من الحد الأقصى للموارد المخصصة.

استعلامات التصحيح بشكل تدريجي

في معالجة البيانات في الوقت الحقيقي، قد يكون من المفيد معرفة شكل البيانات في منتصف الاستعلام. يمكنك رؤية ذلك باستخدام مخطط الوظيفة في Visual Studio. إذا لم يكن لديك Visual Studio، يمكنك اتخاذ خطوات إضافية لإخراج البيانات الوسيطة.

نظراً لأنه يمكن قراءة مدخلات أو خطوات مهمة Azure Stream Analytics عدة مرات، يمكنك كتابة عبارات SELECT INTO الإضافية. يؤدي القيام بذلك إلى إخراج البيانات الوسيطة إلى التخزين ويسمح لك بفحص صحة البيانات، تماماً كما تفعل متغيرات المشاهدة عند تصحيح أخطاء أحد البرامج.

يحتوي الاستعلام المثال التالي في مهمة Azure Stream Analytics على إدخال دفق واحد، وإدخالات مرجعية للبيانات، وإخراج إلى تخزين جدول Azure. يجمع الاستعلام البيانات من مركز الأحداث ونقطتين مرجعيتين للحصول على الاسم ومعلومات الفئة:

Example Stream Analytics SELECT INTO query

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

The Stream Analytics Monitoring tile

في هذه الحالة، يمكنك إضافة بعض عبارات SELECT INTO الإضافية لـ "تسجيل" نتائج JOIN الوسيطة والبيانات التي تتم قراءتها من الإدخال.

في هذا المثال، أضفنا "ناتجين مؤقتين" جديدين. يمكن أن تكون أي بالوعة تحبها. هنا نستخدم Azure Storage كمثال:

Adding extra SELECT INTO statements to Stream Analytics query

يمكنك بعد ذلك إعادة كتابة الاستعلام كما يلي:

Rewritten SELECT INTO Stream Analytics query

الآن ابدأ المهمة مرة أخرى، واتركها تعمل لبضع دقائق. ثم استعلم عن temp1 وtemp2 باستخدام Visual Studio Cloud Explorer لإنتاج الجداول التالية:

جدول temp1SELECT INTO temp1 table Stream Analytics query

جدول temp2SELECT INTO temp2 table Stream Analytics query

كما ترى، يحتوي كل من temp1 وtemp2 على بيانات، ويتم ملء عمود الاسم بشكل صحيح في temp2. ومع ذلك، نظراً لعدم وجود بيانات في الإخراج حتى الآن، هناك خطأ ما:

SELECT INTO output1 table with no data Stream Analytics query

من خلال أخذ عينات من البيانات، يمكنك أن تكون على يقين تقريباً من أن المشكلة تتعلق بـ JOIN الثاني. يمكنك تنزيل البيانات المرجعية من blob وإلقاء نظرة:

SELECT INTO ref table Stream Analytics query

كما ترى، يختلف تنسيق GUID في هذه البيانات المرجعية عن تنسيق العمود [from] في temp2. لهذا السبب لم تصل البيانات في المخرجات 1 كما هو متوقع.

يمكنك إصلاح تنسيق البيانات، وتحميله للإشارة إلى blob، وحاول مرة أخرى:

SELECT INTO temp table Stream Analytics query

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

SELECT INTO final table Stream Analytics query

الحصول على المساعدة

لمزيد من المساعدة، جرب صفحة سؤال Microsoft Q&A الخاصة بنا ل Azure Stream Analytics.

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