dbt / الأساسي: أسس المشروع والنماذج / الدرس 6
اختبارات البيانات والسجلات المخالفة
حوّل ثوابت الإعارة إلى استعلامات مخالفات صريحة دون خلط الاختبار بقيود قاعدة مفروضة باستمرار.
في هذه الصفحة
أهداف الدرس
- ميّز اختبار البيانات المفرد والعام.
- فسّر غياب المخالفات ضمن مجتمع وسياسة شدة معلنين.
يبحث اختبار البيانات عن أمثلة تنقض القاعدة
اختبار البيانات المعتاد select تعيد سجلات تنتهك التأكيد. وفق قواعد الفشل الافتراضية، يعني صفر مخالفات نجاحاً للمجتمع المقيم في ذلك الوقت. لا يصبح قيد مفتاح مفروضاً باستمرار ولا ضماناً لاستيراد الغد. يهم نطاق التصفية واكتمال المصدر والشدة. قد ينجح تفرّد نموذج خالٍ مع غياب المصدر. حدد التأكيد والصفوف المؤهلة والاستجابة التشغيلية للفشل. لا تصف نجاح كل اختبار كبرهان صحة تجارية كاملة.
أعد استخدام تأكيد بمعلمات صريحة
يربط YAML اختباري unique وnot_null بـloan_id، وaccepted_values بالحالة المضبوطة. اختيرت arguments المتداخلة لأساس v1.12؛ وقد تختلف أمثلة أقدم. لا يعوض accepted_values اختبار الوجود، فقد يستبعد تعامل NULL المعتاد الغائب. تصف الإعلانات استعلامات مقصودة ولا تُنفذ هنا. عند فشل التفرّد ميّز تكرار المصدر من ربط أواختيار مراجعة خاطئين قبل حذف سجلات.
version: 2
models:
- name: fct_loans
columns:
- name: loan_id
data_tests: [unique, not_null]
- name: loan_state
data_tests:
- accepted_values:
arguments:
values: ['open', 'returned']
خصائص اختبارات عامة توضيحية لـv1.12. تحتاج العلاقة بيئة اختبار مصرحاً بها؛ ولا يُنشأ اختبار منفذ أوقيد هنا.
اكتب استعلاماً محدداً لمخالفة المجال
يكشف الاختبار إرجاعاً معلوماً يسبق الاقتراض. لا تتأهل NULL للمقارنة، فيحتاج الغياب تأكيداً مستقلاً إذا لزم. تجعل الهوية والوقتان التشخيص محدداً دون كل الحقول. يجب أن يعبّر الملف عن مجتمع المخالفات، لا يعد الصحيح ويتوقع من dbt عكسه. تظل دلالات مقارنة الوقت للقاعدة منطبقة. احفظ الأصل لإصلاح المنتج لا قمع السجل فقط.
select loan_id, borrowed_at, returned_at
from {{ ref('fct_loans') }}
where returned_at < borrowed_at
مقطع لاختبار بيانات مفرد يعيد الصفوف المخالفة. في الإعدادات الافتراضية المعتادة ينجح هذا التأكيد إذا أعاد الاستعلام صفر صفوف، لكن لا يُشغّل هنا أي استعلام على المستودع.
تغير الشدة وحفظ المخالفات السلوك التشغيلي
قد تستخدم الاختبارات شدة وحدود فشل مضبوطة؛ والتحذير ليس خطأً. راجع سلوك البناء والتنسيق للموارد اللاحقة ولا تفترض أن كل فشل يعكس النماذج كلها ذرياً. وقد ينشئ حفظ المخالفات علاقات تدقيق أويستبدلها ويكشف سجلات حساسة؛ فهي كتابة تحتاج نطاقاً وصلاحية. عاملها كأدلة تشغيل محمية. لا تستدعي الدورة store_failures أوبناء أواختباراً. ولا يثبت فحص YAML الإذن أونجاح التنفيذ.
اختبر ما لا يغطيه التأكيد عمداً
احتفظ بمثال دقيق فيه إرجاع صالح ومعكوس وNULL وهوية مكررة ومدخل خالٍ. توقع ما يفشل لكل حالة. أضف المجتمع المتوقع والعلاقات إذا لزم الاكتمال، وتجنب اختبارات تكرر التنفيذ بلا فائدة. الاختبارات العامة عقود استعلام قابلة لإعادة الاستخدام؛ وستعزل اختبارات الوحدة المنطق ببيانات اختبار. يتكامل النوعان ولا يلغي أحدهما التكامل والتعافي. يتحقق النموذج المحلي الصغير من اختيار المخالفات فقط، دون مشغل dbt أواختبار قيد قاعدة.
الأخطاء الشائعة وإصلاحها
يُسمى نجاح unique مفتاحاً أساسياً مفروضاً
- لماذا يحدث؟
- اختلط تحقق لحظي بفرض القاعدة.
- كيف تصلحه؟
- اذكر المجتمع وافحص دعم القيود مستقلاً.
- كيف تتجنب تكراره؟
- افصل الاختبارات والقيود في التوثيق.
يعيد الاختبار السجلات الصحيحة فيفشل
- لماذا يحدث؟
- عُكس اصطلاح استعلام المخالفات.
- كيف تصلحه؟
- أعد الأمثلة الناقضة للتأكيد.
- كيف تتجنب تكراره؟
- افحص يدوياً مثالاً سليماً وآخر مخالفاً.
يكشف حفظ المخالفات سجلات حساسة
- لماذا يحدث؟
- عوملت علاقة التدقيق كمخرج شاشة بلا أثر.
- كيف تصلحه؟
- راجع التخزين والوصول والاحتفاظ والحقول قبل تفعيله.
- كيف تتجنب تكراره؟
- عامل مجموعات المخالفات كأصول بيانات محكومة.
اختبر فهمك
1. هل يفشل اختبار الإرجاع المعكوس صفاً returned_at فيه NULL؟
اعرض الحل المشروح
ليس وفق المقارنة المعروضة؛ الشرط مجهول فلا يُختار الصف. أضف وجوداً أواكتمالاً إذا تطلبته الأعمال. افصل الإعارة المفتوحة المشروعة من وقت معيب تحول إلى NULL.
2. لماذا ينجح تفرّد نموذج حقيقة خالٍ مع بقائه غير مقبول؟
اعرض الحل المشروح
لا توجد أمثلة تكرار، فينجح التأكيد. المجتمع والتسليم المتوقعان متطلبان آخران. طابق الأعداد وهوية المصدر أوحداثته قبل نشر تقرير خالٍ كحقيقة صالحة.
أهم ما تعلمته
- يحدد مجتمع المخالفات وشدة الاختبار معناه.
- لا يثبت النجاح اكتمالاً أوفرضاً مستمراً تلقائياً.