背景: アドホックなモデルをいつまでも残したくない
dbtを使う場合、ある程度規則に沿ったレイヤリングの元に運用されることが多いと思う(例: staging / raw vault / fact & dim / martなど)。品質が必要な場合はこのレイヤリングに沿ってモデルを作ることになるが、急なビジネス要求によってこのレイヤリングに沿わないアドホックなモデルを作らなければならない場面は現実的にそれなりにあると思う(例)。こういった要求を受け入れつつ、アドホックなモデルをいつまでも運用しない形にしたい。
アドホックなモデルがいつから運用されているか機械的に把握する
ひとまずアドホックなモデルがいつから運用されているかを簡単に知りたい。アドホックなモデルの数が多い場合、それらを手動で洗い出すのは面倒なので、機械的に出したい。テーブルが洗い替えされる場合、INFORMATION_SCHEMAではいつからそのテーブルが存在するかは分からないため、今回はelementaryを使ってその情報を取り出すことにした(see also Elementaryを用いたデータ品質の可視化とデータ基盤の運用改善)。
SELECT dbt_models.name, MIN(dbt_run_results.generated_at) AS generated_at, FROM `my-project.my_elementary.dbt_run_results` AS dbt_run_results LEFT OUTER JOIN `my-project.my_elementary.dbt_models` AS dbt_models USING (unique_id) WHERE resource_type = "model" AND path LIKE "adhoc/%.sql" GROUP BY dbt_models.name ORDER BY generated_at LIMIT 1000
アドホックなモデルにdeprecation_dateを付与する
ずっと前からいるアドホックなモデルは正式に管理されているモデルに格上げするか、廃止するかを検討したい。例えば、アドホックなモデルを作ってから半年後にこれらを判断したいとしよう。
dbtだとdeprecation_dateという情報をモデルに追加することができ、deprecation_date
以降はdbtを実行するときにwarningを出すことができる。
version: 2 models: - name: my_model description: deprecating in the future deprecation_date: 2999-01-01 00:00:00.00+00:00
warningメッセージは日々開発時にも目にするため、アドホックに作ったライフサイクルの運用を日々の生活に入れやすくなりそうな気がしている。