مدل های شبح و تجلی شبح وار در DBT

فوریه است ، اما هر روز هالووین در انبار داده است. آیا در پروژه DBT خود ارواح دارید؟ در این صورت ، آنها می توانند روزهای بهره وری از دست رفته و هزاران دلار در محاسبه انبار داده را برای شما هزینه کنند. با این حال ، مشکل رفع آن نیز بسیار آسان است!
سناریوی مدل شبح
برای بقیه پست ، فرض کنید سناریوی زیر را داریم:
- کار تولید 1 اجرا می شود
dbt build --select tag:tag1
در یک برنامه منظم - کار تولید 2 اجرا می شود
dbt build --select tag:tag2
در یک برنامه منظم - یک مدل وجود دارد
ghost
در شاخه GIT تولیدی که برچسب گذاری نشده استtag1
یاtag2
– بنابراین هرگز در هر برنامه اجرا نمی شود و هرگز به هیچ وجه تحقق نمی یابد.
ظهور شبح وار
پرونده manifest.json
هر بار که یک دستور DBT را اجرا می کنید بازسازی می شود (با استثنائات ، به اسناد مراجعه کنید). مانیفست کامل برای همه مدل ها ایجاد می شود ، حتی اگر ساخت را محدود کنید تا فقط گره های خاصی را انتخاب کنید.
حتی اگر فقط برخی از مدل ها یا آزمایشات را اجرا می کنید ، تمام منابع در مانیفست (مگر اینکه آنها غیرفعال باشند) با بیشتر خصوصیات خود ظاهر می شوند.
از یک طرف ، این یک چیز خوب است ، زیرا ما اکنون می توانیم بدون نگرانی از اینکه منابع را از دست ندهیم ، از هر دو کار تولید آشکار شویم.
از طرف دیگر ، مدل ghost
در مانیفست هر دو شغل تولیدی به همراه مکان فرض شده آن در پایگاه داده ظاهر می شود ، حتی اگر هیچ یک از کار آن را تحقق بخشد. مانیفست تولید اکنون “شبح وار” است.
چگونه تعویق باعث می شود مشاغل CI شما سریعتر و ارزان تر شود
DBT Cloud راه اندازی مشاغل CI را آسان می کند که به تیم شما اجازه می دهد تغییرات پیشنهادی را به طور خودکار آزمایش کند ، اما این مشاغل در صورت عدم مدیریت صحیح می توانند به راحتی بسیار کند و بسیار گران شوند.
بهترین راه برای مدیریت این هزینه ها در حالی که هنوز هم مزایای کامل CI را بدست می آورد ، ترکیب انتخاب دولت و تعویق در چیزی به نام Slim CI است.
مستندات مربوط به Deferral این نمودار خوب را دارد. نمودار نشان می دهد که اگر تازه اصلاح شده اید model_c
، نیازی به بازسازی اجداد اصلاح نشده آن ندارید model_a
وت model_b
، و در عوض فقط به نسخه تولید اشاره کنید:
به عبارت دیگر ، اگر SQL خام از model_c
است ، select * from {{ ref("model_b") }}
، سپس بدون تعویق آن جمع می شود create view dev.model_c as select * from dev.model_b
، و شما همچنین باید ایجاد کنید dev_model_b
و بقیه اجداد آن. با این حال ، با تعویق ، در عوض گردآوری می شود create view dev.model_c as select * from prod.model_b
، به ما این امکان را می دهد تا از مدل های تولید استفاده مجدد کنیم و یک تن پول و زمان صرفه جویی کنیم.
چگونه مدل های ارواح به تعویق انداختن و باریک CI می شکنند
فرض کنید شما یک مدل ایجاد کرده اید ghost_child
این به مدل بستگی دارد ghost
بشر اگر سعی کنید درخواست کشش حاوی آن تغییر را از طریق فرآیند باریک CI انجام دهید ، چه اتفاقی خواهد افتاد؟
ما ثابت کرده ایم که تمام مانیفست های تولید حاوی اطلاعاتی در مورد مدل هستند ghost
گویی واقعاً وجود دارد ، حتی اگر هیچ شغلی آن را ایجاد نکرد. این بدان معنی است که روند باریک CI با کمک سعی در کامپایل خواهد داشت {{ ref("ghost") }}
به عنوان prod.ghost
بشر شیء prod.ghost
وجود ندارد ، بنابراین روند CI شما خراب و می سوزد.
در حالی که مدل های شبح شکسته نمی شوند مقایسه دولت، آنها کاملاً می شکنند به تعویق انداختنبشر حتی با وجود مدل های شبح ، هنوز هم می توان تعیین کرد که کدام مدل ها تغییر کرده اند. با این حال ، نمی توان اثبات کرد که یک مدل بدون تغییر در واقع در تولید وجود خواهد داشت.
تنها راه حل ، غیرفعال کردن تعویض کامل است. اگر علاقه دارید فقط مدل های اصلاح شده را بسازید ، باید اجرا کنید dbt build --select +state:modified
برای ساختن مدل های اصلاح شده و تمام اجداد آنها در Dev. اگر علاقه مند به آزمایش تغییرات پایین دست هستید ، باید از اپراتور “در” برای ساختن همه اجداد همه فرزندان مدل انتخاب شده استفاده کنید: dbt build --select @state:modified
بشر آنچه می تواند فقط تعداد انگشت شماری از مدل ها با تعویق باشد می تواند صدها مدل بدون تعویق تبدیل شود.
خلاصه: مدل های شبح CI شما را گران و کند می کنند
مدلهایی که در شاخه اصلی پروژه DBT شما وجود دارند اما در انبار داده ها مادی نمی شوند ، مدل های شبح هستند. آشکار کار تولید شما آنها را شامل می شود که گویی واقعاً وجود دارند ، اما خطوط لوله باریک CI هنگام تلاش برای تعویق به آنها سقوط و سوزانده می شوند. این امر شما را وادار می کند تا از تعویق دور شوید ، که می تواند باعث افزایش نمایی زمان و هزینه های CI شما شود.
یک رفع آسان!
رفع مشکل در مستندات مانیفست ذکر شده است: مدل های معلول در مانیفست ظاهر نمی شوند. مدل های شبح خود را ردیابی کرده و آنها را غیرفعال کنید. این امر بر تولید تأثیر نمی گذارد زیرا به هر حال آنها تحقق نمی یابند. سپس آنها از نمایش در مانیفست خودداری می کنند و CI باریک دوباره کار خواهد کرد! هنگامی که در آینده به مدل شبح احتیاج دارید ، می توانید آن را فعال کنید ، و سپس به عنوان بخشی از خط لوله CI خود اجرا می شود. فقط به یاد داشته باشید که قبل از ادغام با تولید ، آن را در یک برنامه اجرا کنید!