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

dbt / المتوسط: التاريخ والمسارات المضبوطة / الدرس 8

صحة التحديث التزايدي والتغييرات المتأخرة

صمم اختيار المرشحين والمفاتيح الثابتة والإعادة قبل تقليل البيانات المحولة.

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

أهداف الدرس

  • اشرح is_incremental وunique_key دون افتراض فرض التفرّد.
  • احسب التحديث المتأخر والحذف وتغير المخطط وإعادة البناء.

المعالجة التزايدية تصميم انتقال حالة

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

يجب أن يصح SQL الأولي والتزايدي معاً

تصبح is_incremental صحيحة وفق شروطها، ومنها هدف جدول قائم وتجسيد incremental وعدم تحديث شامل يتجاوزها. يستخدم المقطع updated_seq رقمية اصطناعية لاختيار الحدود، ويفترض وصول تسلسل مناسب؛ وليس حلاً عاماً للتأخر. يجب أن يولد الفرع الآخر SQL صالحاً للبناء الأول. وتحل this علاقة النموذج المستهدفة لا كائن Python اعتباطياً. لا يُفحص هدف هنا، ولا تُختار استراتيجية عامة لكل محوّل.

jinja مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
{{ config(materialized='incremental', unique_key='loan_id') }}
select loan_id, returned_at, updated_seq
from {{ ref('stg_loan_changes') }}
{% if is_incremental() %}
where updated_seq >= (select coalesce(max(updated_seq), 0) from {{ this }})
{% endif %}

مرشح توضيحي بافتراض وصول قوي. يحتاج دمج المحوّل والتكرار والتأخر تصميماً مستقلاً.

قد يفوّت الحد الأعلى تصحيحاً قديماً يصل لاحقاً

إذا بلغ أقصى الهدف100 ووصل تغيير مشروع متأخر بالتسلسل98، فلن يختاره المرشح. وقد تفيد نافذة رجوع فقط بحد تأخر مبرر ومطابقة قابلة للإعادة، لا علاجاً عاماً. قد يلزم سجل تغييرات دائم أوتسلسل استلام أومطابقة صريحة. تحقق من تفرّد المرشحين وحل تعارض المراجعات المتساوية. وقد تنشئ مفاتيح NULL تكراراً أوفشل تطابق حسب الاستراتيجية. احفظ المرفوض والقديم في المحاسبة ولا تُسقطهما بصمت.

يختلف استبدال الحالة من الإعادة التراكمية

يحفظ النموذج المحلي مراجعة2 للإعارة L1 عند تكرر1، ويدرج L2 بمراجعة3. هذه سياسة مختارة لا ضمان unique_key وحده. وقد تضاعف إعادة مبلغ إلى تحديث تراكمي القياس رغم تطابق المفتاح. يحتاج الحذف علامة أوسياسة حذف ناعم أومطابقة؛ فلا يستنتج استعلام الموجود كل محذوف. JSON نموذج يتحقق محلياً بلا عنوان مستودع، وليس تنفيذاً لاستراتيجية محوّل.

json مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
{"existing":{"L1":2},"incoming":[["L1",1],["L2",3]],"chosen_rule":"greatest source revision wins","expected":{"L1":2,"L2":3}}

نموذج اختيار مراجعات محلي فقط؛ لا يفحص تعارض الحمولة أوالمعاملات أوالمحوّل.

لا يعيد تزامن المخطط ملء المعنى القديم

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

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

تُعامل unique_key كإزالة تكرار تلقائية

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

لا تحدّث الإرجاعات المتأخرة الإعارات القديمة

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

يُفترض امتلاء عمود جديد في التاريخ كله

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

اختبر فهمك

1. هل يختار المثال updated_seq98 بعد بلوغ أقصى الهدف100؟

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

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

2. هل يثبت نموذج أعلى مراجعة المحلي سلوك دمج dbt؟

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

لا؛ يثبت القاعدة الصغيرة فقط. يحتاج المحوّل والمعاملة وتعادل الحمولة وNULL تحققاً مستقلاً. لا تنفذ unique_key مقارنة مراجعات إلا إذا رمزتها SQL والاستراتيجية.

أهم ما تعلمته

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

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