dbt / الأساسي: أسس المشروع والنماذج / الدرس 5
التجسيد وأولوية التكوين
اختر كيفية تحول النموذج لعلاقة وراجع نطاق التكوين قبل افتراض التخزين أوالحداثة أوالكلفة.
في هذه الصفحة
أهداف الدرس
- قارن مسؤوليات view وtable وephemeral وincremental.
- احسم نطاق التكوين دون افتراض أن كل خاصية تستبدل السابقة ببساطة.
قد يكون للاستعلام نفسه سلوك تخزين مختلف
تحدد طريقة التجسيد تحويل منطق النموذج إلى كائنات هدف أوSQL قابل لإعادة الاستخدام. يحفظ view تعريف الاستعلام، ويحفظ table نتيجة محسوبة، ويُدمج ephemeral في SQL المستهلك بدلاً من علاقة مستقلة قابلة للاستعلام. ويضيف incremental مسؤوليات تغيير ستُدرس لاحقاً. يهم دعم المحوّل والقاعدة، بما فيه materialized_view أوبدائل المنصة. لا تثبت قائمة أسماء الإطار دعم كل هدف لكل استراتيجية. اختر من المستهلك والحداثة وإعادة الإنتاج وأدلة التنفيذ.
يعلن التكوين المحلي اختياراً مقصوداً
يختار المقطع view صراحة لتجهيز خفيف. قد يعرض العرض صفوف المصدر الحالية عند الاستعلام، لكنه لا يجعل المصدر حديثاً ولا يضمن صورة تقرير تاريخية مستقرة. وقد تدفع عروض معقدة متراكبة عملاً كبيراً للاستعلام اللاحق. أما الجدول فيخدم القراءة المتكررة بكفاءة وقد يصبح قديماً حتى إعادة بنائه. هذه مقايضات حمل لا قاعدة عامة لتفضيل واحد. لم يُنفذ المثال، وتعتمد DDL والاستبدال على المحوّل.
{{ config(materialized='view') }}
select loan_id, branch_id, borrowed_at, returned_at
from {{ source('library', 'loans') }}
تكوين عرض تجهيز توضيحي؛ لا ينشئ عرضاً ولا يثبت حداثة المصدر أوسلوك DDL للهدف.
تنطبق مسارات المشروع على الموارد المطابقة فقط
يضبط YAML موارد مجلد staging في library_analytics. لنطاق اسم المشروع معنى؛ وقد يترك مسار خاطئ النماذج بلا أثر. تحدد + تكوين المورد في هذا السياق. قد تتقدم إعدادات أشد تخصيصاً، لكن الدمج يختلف: لا تتصرف الوسوم والخطافات والقواميس كلها كقيمة مفردة مستبدلة. افحص التكوين الفعال في الأثر والجيل المناسبين. وقد يفوت الانتباه لمسار غير مستخدم في v1؛ فلا يثبت YAML المعقول تغير المورد.
models:
library_analytics:
staging:
+materialized: view
+tags: ['staging']
جزء dbt_project.yml مقيد بالمشروع والمجلد؛ لا يثبت التكوين النهائي لكل نموذج.
إعادة استخدام ephemeral ليست جدولاً مشتركاً مخزناً
يُوسع اعتماد ephemeral عادة كـCTE داخل SQL المستهلك. وقد يظهر عمله في عدة عبارات مولدة إذا تعدد المستهلكون؛ فلا يصبح وسيطاً دائماً حُسب مرة. ولا يستعلم مستهلك قاعدة مباشرة عن علاقة لم تُنشأ. وله قيود ميزات، منها العقود، ويجب التحقق من دعم المحوّل. استخدمه إذا برر تحويل صغير قابل لإعادة الاستخدام المقايضة. شخّص المصدر والمترجم اللاحق حتى لا يخفي التجريد حساباً كبيراً أومتكرراً.
يغير التجسيد عقد التعافي والوصول
قد يحتاج تحويل view لجدول أوإعادة بناء incremental صلاحيات وتخزيناً وزمناً وتنسيقاً جديداً. full refresh عملية بيانات لا تنسيقاً بلا أثر. تحقق من معاملات وإعادة تسمية المحوّل ولا تفترض تحويلاً ذرياً للمشروع كله. احفظ مسار نشر سليماً واحسب القراء والكتّاب المتزامنين. لا يُنفذ run أوتحديث شامل أوإنشاء أومنح؛ يفحص التحقق بنية التكوين ومنطق السيناريو فقط ولا يدعي كلفة أوسرعة مستودع.
الأخطاء الشائعة وإصلاحها
لا يصيب مسار التكوين النموذج المقصود
- لماذا يحدث؟
- لا يطابق نطاق المشروع أوالمجلد المورد.
- كيف تصلحه؟
- افحص التكوين الفعال وصحح المسار.
- كيف تتجنب تكراره؟
- راجع تحذير المسار غير المستخدم وتكوين نموذج ممثل.
يُفترض تنفيذ ephemeral مرة لكل المستهلكين
- لماذا يحدث؟
- اختلط توسيع CTE بتخزين مشترك دائم.
- كيف تصلحه؟
- افحص SQL اللاحق وقيّم الحاجة لوسيط دائم.
- كيف تتجنب تكراره؟
- احسب تكرار الاستخدام وتعقيد الاستعلام.
يُعامل تغيير التجسيد كتعديل كود بلا أثر
- لماذا يحدث؟
- أُهملت دورة الكائن والصلاحيات والنشر.
- كيف تصلحه؟
- خطط لتغيير الهدف وتعافيه قبل التنفيذ.
- كيف تتجنب تكراره؟
- راجع عمليات البيانات مستقلة عن تحرير القالب.
اختبر فهمك
1. هل يجعل تحويل view إلى table مصدر الإعارات حديثاً؟
اعرض الحل المشروح
لا. يغير التخزين وتحديث النتيجة المنمذجة. يظل التسليم والحداثة مستقلين. قد يحتفظ الجدول بنتيجة ثابتة لكنه يحتاج بناء أومنطقاً تزايدياً مدعوماً لإدخال التغير اللاحق.
2. لماذا تفحص SQL المترجم لمستهلكي نموذج ephemeral؟
اعرض الحل المشروح
لأن SQL يدمج في كل مستهلك مدعوم لا علاقة مادية مشتركة. قد يظهر التكرار والربط المعقد هناك فقط. تحقق من الدعم واختر التخزين من الحمل المقاس ولا تعتبر ephemeral مؤقتاً مخزناً.
أهم ما تعلمته
- يحدد التجسيد دورة الكائن ومقايضات الأداء.
- يجب مراجعة التكوين الفعال في نطاقه الحقيقي.