アドホックに作ったdbtのモデルのライフサイクルを管理する

背景: アドホックなモデルをいつまでも残したくない

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メッセージは日々開発時にも目にするため、アドホックに作ったライフサイクルの運用を日々の生活に入れやすくなりそうな気がしている。