برنامه نویسی

مدل های شبح و تجلی شبح وار در 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، و در عوض فقط به نسخه تولید اشاره کنید:

نمودار نشان می دهد که چگونه Model_c اصلاح شده در DEV می تواند به جای ساختن یک مدل جدید اصلاح نشده در DEV ، به مدل اصلاح نشده در Prod بستگی داشته باشد

به عبارت دیگر ، اگر 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 خود اجرا می شود. فقط به یاد داشته باشید که قبل از ادغام با تولید ، آن را در یک برنامه اجرا کنید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا