300個のモデルで1つ直したとき、巻き込むのは中央値6個、2分12秒でした。
ところが99%点は121個で44分22秒です。同じ操作なのに20倍の開きがあります。
1つ直せば下流すべてに伝わります。その範囲は、どの層を触ったかで20倍変わります。
dbtでは、直した内容が下流に伝わります。公式はモデルを一度直せば、その変更は依存するすべてに伝わるので、書き直すことなく正典となる業務の論理を出せると述べています。
伝わる範囲はどれくらいなのか。300通りすべてを試して数えました。
モデル 300個・6層。1つ直すと、それを参照している側をすべて作り直す 1個あたり 22秒として、300通りすべてを試した結果 やり方 作り直すモデル かかる時間 全部作り直す 300個 110分0秒 下流だけ(中央値) 6個 2分12秒 下流だけ(平均) 15.9個 5分50秒 下流だけ(90%点) 44個 16分8秒 下流だけ(99%点) 121個 44分22秒
半分の変更では6個、2分12秒で終わります。全部作り直す110分に比べれば軽いものです。
しかし99%点は121個で44分22秒です。同じ「1つ直す」なのに、20倍の開きがあります。
※ 下の層にあるモデルほど、直したときの巻き込みが大きくなる。 ※ 中央値と99%点が離れているので、平均で見積もると外れる。
平均は15.9個ですが、中央値は6個です。この2つが離れているとき、平均は使えません。
下の層は少数です。その少数を直す日だけ、ほぼ全部の作り直しに近づきます。
普段は軽い。ただし下の層を触った日だけ重い。
Change a model once and the change propagates to all its dependencies, so you can publish canonical business logic without reimplementing it.原文dbt 公式ドキュメント「What is dbt?」 この内容の有効期限2027-02-18
毎日の作り直しが費用の芯です。増える割合が小さいほど、増分にする利点が大きくなります。
dbtは、置き場の生データを作り替えます。公式はdbtは置き場の生データを、信頼できるデータ製品へと作り替えると述べています。
作り替えは毎日行います。全量と増分でどれだけ違うのか実際に計算して比べました。
元の表 5億行。1秒に 40万行を処理できる
増えた分だけを処理する場合は、毎回 45秒の下ごしらえがかかる
1日に増える割合 全量(1回) 増分(1回) 比 1年ぶんの合計時間の比
0.05% 20.8分 0.8分 27.4倍 27.4倍
0.20% 20.8分 0.8分 26.3倍 26.3倍
1.00% 20.8分 1.0分 21.7倍 21.7倍
5.00% 20.8分 1.8分 11.6倍 11.6倍
1日0.05%しか増えないなら、増分は27.4倍速く終わります。0.8分と20.8分です。
5%まで増えると11.6倍まで縮みます。増える割合が大きいほど、全量との差は小さくなります。
0.05%と0.20%は、どちらも0.8分です。処理する行数は4倍違うのに同じ時間になりました。
45秒の下ごしらえが効いています。ここより速くはならないので、細かく刻んでも意味がありません。
処理する量そのものを減らす手はParquetの記事で扱っていて、読む項目を絞ると量の比がそのまま出ます。
dbt transforms raw warehouse data into trusted data products.原文dbt 公式ドキュメント「What is dbt?」 この内容の有効期限2027-02-18
誤りが見つかったときに効きます。分けていなければ、1日ぶんの誤りでも全部を作り直します。
dbtの動かす側は、依存の図をたどって実行します。公式はdbtの動力部は、企画をまとめ上げ、作り替えの図を実行し、付随する情報を生み出すと述べています。
誤りが見つかったとき、作り直す範囲が問題になります。実際に比べて数えました。
1日1回動かす処理。1日ぶんの作り直しに 4分かかる 誤りが見つかったとき、日ごとに分けてあれば必要な日だけ、分けていなければ全部を作り直す 誤りが入っていた期間 日ごとに分ける(時間) 全部作り直す(時間) 差 30日ぶん 2.0 73.0 71.0 180日ぶん 12.0 73.0 61.0 365日ぶん 24.3 73.0 48.7 1095日ぶん 73.0 73.0 0.0
30日ぶんの誤りなら、分けてあれば2.0時間です。分けていなければ73.0時間かかります。
3年ぶん全部が誤っていた場合だけ、両者は同じになります。それ以外では必ず分けたほうが軽く済みます。
この分け方は、誤りが見つかってからでは変えられません。作るときに決めておく必要があります。
最初の節で見た層の深さも同じです。あとから浅くするのは、作り直しとほぼ同じ手間になります。
3つの計測はいずれも手元で書いた模型で、実際のdbtを動かしたものではありません。モデル300個の依存関係は生成したもので、実際の構成しだいで中央値と99%点の開きは変わります。1個22秒や1秒40万行、45秒の下ごしらえはすべて置いた値です。増える割合も一定と置いており、日によるばらつきは含めていません。ここで見せているのは、同じ「1つ直す」でも巻き込む範囲が20倍変わるという点と、増分にする利点は増える割合で決まるという点の2つです。
The dbt engine compiles your project, executes your transformation graph, and produces metadata.原文dbt 公式ドキュメント「What is dbt?」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る