محتويات الدورة

Apache Airflow / المتوسط: عمل التشغيل والتحكم وميزانيات الموارد / الدرس 10

الأصول والأحداث والجدولة الواعية بالبيانات

الجدولة من تحديثات بيانات معلنة مع فصل أدلة الإتاحة والحداثة وتغطية الفترات.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

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

يسمي الأصل اعتماد بيانات

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

إعلان هوية متطابقة للمنتج والمستهلك

ينشئ الجزء Asset اصطناعياً واحداً، ويستخدمه outlet وجدول DAG مستهلك. إنه كود توضيحي لا يكتب كائناً ولا ينفذ مستهلكاً. يمثل URI هوية منطقية، وليس تعليمة لجلب محتواه تلقائياً. يجب أن ينشر المنتج أثراً مكتملاً قبل إعلان النجاح، ويحتاج المستهلك منطق قراءة وتحقق خاصاً به. احمل في بيانات الأصل مؤشراً مختصراً إلى إصدار أو قسم عند الملاءمة، لا مجموعة بيانات كبيرة. راجع واجهة أصول Airflow 3.1 وسلوك المزود المحددين قبل استخدام مستقل.

python هوية أصل وجدول مستهلك توضيحيان
from airflow.sdk import Asset, DAG, task

parcel_manifest = Asset('https://assets.training.invalid/parcel-manifest')

@task(outlets=[parcel_manifest])
def publish_manifest_reference():
    return {'partition': '2026-10-01', 'version': 1}

with DAG(dag_id='lab_asset_consumer', schedule=[parcel_manifest], catchup=False):
    @task
    def acknowledge_update():
        return 'validate-event-partition-before-reading'
    acknowledge_update()

يعلن الجزء العلاقات؛ ولا ينشر أثراً، ومهمة المنتج ليست ضمن DAG منتج كامل.

لا تعني التحديثات المتعددة تطابق الأقسام

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

تحتاج تشغيلات الأحداث مدخلات عمل صريحة

قد تفتقد تشغيلات الأصول والتشغيلات اليدوية دون logical_date مفاتيح فترة البيانات في Airflow 3. لذلك قد تفشل قراءة data_interval_start مباشرة رغم صحة حدث الجدولة. استخرج معلومات الحدث المحفز عبر واجهات السياق العامة، وتحقق من قسم العمل الذي تشير إليه. وإذا دعم التدفق الجدولة بالفترات والتحفيز بالأصول، فعرّف خطوة تطبيع مدخلات واضحة لكل مسار مدعوم. لا تستبدل التاريخ الحالي بصمت عند غياب السياق؛ فقد ينتج ناتجاً مقنعاً لكنه خاطئ. اجعل نقص السياق المطلوب فشل تحقق صريحاً بهوية تشخيصية كافية.

التحقق من التوافق التجاري بعد الجاهزية

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

python فحص محلي لتوافق أقسام الأصول
updates = {'orders': {'partition': '2026-10-01'}, 'rates': {'partition': '2026-10-02'}}
compatible = updates['orders']['partition'] == updates['rates']['partition']
assert not compatible
print(compatible)
الناتج المتوقع
False

قد يكون التحديثان جاهزين وقسما العمل غير متوافقين.

الأخطاء الشائعة وإصلاحها

دمج أصلين محدثين بتاريخين مختلفين.

لماذا يحدث؟
اعتبار الجاهزية توافق أقسام.
كيف تصلحه؟
تحقق من القسم والإصدار قبل المعالجة.
كيف تتجنب تكراره؟
أدرج أصولاً غير متطابقة في القبول.

إثارة KeyError لـdata_interval_start في مهمة أصل.

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

توقف الأصل المعاد تسميته عن تحفيز المستهلك.

لماذا يحدث؟
اختلاف هويتي المنتج والمستهلك.
كيف تصلحه؟
نسق ترحيل هوية مراجعاً في التعريفين.
كيف تتجنب تكراره؟
عامل الهوية عقد تكامل بإصدارات.

اختبر فهمك

1. هل يجعل URI الأصل Airflow ينزل الكائن المسمى تلقائياً؟

اعرض الحل المشروح

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

2. هل ينبغي أن يستبدل مستهلك أصل غياب سياق الفترة بتاريخ اليوم بصمت؟

اعرض الحل المشروح

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

أهم ما تعلمته

  • تحتاج جاهزية الأصل وتوافق العمل تحققاً منفصلاً.
  • لا تضمن أنواع التحفيز مفاتيح سياق متطابقة.

المراجع الرسمية