dbt の実行処理がウェアハウスのコンピュート費用を密かに押し上げていませんか?
dbt はすべての処理をウェアハウス内で実行するため、差分更新で済む場所で全件リフレッシュを行ったり、毎晩テーブルを全件再構築したりしていてもエラーにはならず、消費クレジットとして静かに跳ね上がります。dbt において増分更新ロジックは手書きのオプションに過ぎません。一方、自動生成される Data Vault では、すべてのロード処理が最初から差分処理として構築されます。
このような課題はありませんか?
- 夜間の定期実行は問題なく成功しているが、新しいモデルを一切追加していないにもかかわらず、Snowflake や BigQuery の請求額が四半期ごとに増大している。
- 増分更新(Incremental)ロジックを実装するのが面倒だったため、プロジェクトの半分のモデルが毎晩全件ドロップ&再作成(Full Rebuild)されるテーブルとして構成されている。
- 上流のわずかなデータ変更が DAG 全体に波及し、パイプラインのどの部分が実際に実行を必要としていたのか誰も確信が持てない。
- 財務部門から「なぜ今月コンピュート費用が増加したのか」と問われ、パフォーマンス計測を誰も行っていないモデルの山を前に言葉に詰まる。
dbt(現在は Fivetran と同一企業)は、すべてのモデルをウェアハウス内部で実行します。これはインプレース処理の観点からは極めて理にかなったアーキテクチャです。しかし同時に、処理の非効率性が「エラー」として表面化しないという落とし穴を抱えています。過去 1 年分の履歴データを毎晩無駄に全件再計算しているモデルであっても、実行自体は正常終了(グリーン)し、その無駄なコストは月末のクラウド請求額として静かに請求されるだけです。
コンピュート費用が膨張する理由
- 全件再構築(フルリビルド)がデフォルトになりがち:
tableマテリアライゼーションは、実行ごとにテーブルを破棄して再作成します。増分更新(Incremental)に対応させるにはモデルごとの個別実装が必要であり、その作業はプロジェクトの初期段階では往々にして先送りされます。 - 増分ロジックが開発者ごとに属人化する: ユニークキーの指定、ルックバック期間、マージ戦略の書き方は開発者によって異なり、プロジェクト全体で品質のバラつきが生じます。
- DAG の実行範囲が必要以上に広がる: 1 つのインプットの変更が下流の多数のモデルの実行を誘発し、その多くは昨日と全く同じ結果を出力するために無駄なコンピュートを消費します。
- 誰もコストプロファイリングを行わない: パイプラインが成功すればタスク完了とみなされ、モデルごとのコンピュート消費量はウェアハウスの管理画面に埋もれたままになります。
これは dbt ツールの欠陥ではありません。手書きの変換ロジックの効率性は、それを書いたエンジニアがどれだけパフォーマンスチューニングに時間を割けたかに依存しているからです。
パフォーマンス効率が本来属するべき場所
- 差分ロードを唯一の標準とする: ロードパターンがモデルから自動生成されるのであれば、増分更新は納期と相談しながら書くオプションではなく、すべてのロード処理における絶対的なデフォルトとなります。
- 履歴管理を単一の場所に隔離する: 変更履歴は Satellite 内で時系列に管理されるため、データマート層が「現在の数値」を算出するために過去の履歴全体を再集計する必要はなくなります。
- ターゲットエンジンに最適化されたセットベース SQL: 開発者がモデルごとに手作業で SQL をチューニングするのではなく、プラットフォームが対象エンジンに合わせて極限まで最適化されたネイティブ SQL を一貫して生成します。
Datavault Builder による変革
Datavault Builder は、ターゲットエンジン向けに最適化された Hub、Link、Satellite のためのセットベース差分ロードを自動生成し、パイプラインの最もコンピュートを消費する部分が「変更されたデータのみ」を処理するように徹底します。
- 構造的にすべてのロードが差分処理: すでに履歴保持されているデータと照合し、新規および変更された行のみを検出して処理します。テーブルを破棄して全件再作成することは一切ありません。
- 履歴は Satellite に蓄積: 過去時点の問い合わせ(as-was)には、蓄積された変更データから直接回答できるため、毎晩過去全体を再計算する必要はありません。バイテンポラル(二重時間軸)ロードや Point-in-Time(PIT)テーブルも、マクロを手作りすることなく標準パターンとして利用できます。
- 実行範囲はモデルの依存関係に連動: 依存関係がモデルから導出されるため、変更があった箇所とその直近の影響範囲のみがロードされ、無関係な下流モデルが無駄に再実行されることはありません。
- dbt との併用時も効果を発揮: dbt での運用を継続する場合でも、Datavault Builder が生成した dbt モデルを活用でき、dbt State によるスキップ機能の恩恵を受けられます。さらにその下流の Vault 層は最初から差分処理のみを行っているため、二重の最適化が働きます。
- 予測可能なコンピュートコスト: ロード費用はウェアハウス全体の総容量ではなく、ソースデータの「変更量」にのみ比例するため、コストの推移を正確に予測・監視できます。
今すぐ判断すべきこと
過去 1 ヶ月のウェアハウスのクエリ実行履歴から、最もコンピュート費用を消費した上位 10 個のモデルを抽出してみてください。もしそれらの大半が、全件再構築されているステージングモデルや履歴計算モデルであるなら、それこそがモデル駆動型の自動生成レイヤーへ移行すべき決定的な証拠です。
貴社のデータソースで実際の動作をご確認ください
無料デモをお申し込みいただき、費用や保守工数が最もかかっているコネクタをお持ち寄りください。
データパイプラインを自社で完全に掌握する 3 つのステップ
-
全件再構築(フルリビルド)されているモデルを特定する
実行ごとのコンピュート消費量でモデルをソートします。大容量ソースのテーブルマテリアライゼーションが上位を占めていることが大半です。
-
差分ロードを自動生成する
Datavault Builder の Hub、Link、Satellite は、既存の履歴データと照合しながらロードされます。変更があったレコードのみが処理されます。
-
その上にビジネス層を実行する
データマートや指標の計算は、ソースの変更部分のみが更新されたクリーンな Vault の上で実行されます。
Datavault Builder がデータ取り込みの摩擦を解消する仕組み
-
取り込み機能を標準で統合
データベース、ファイル、REST API、NoSQL、Python ソースからのバッチ・差分・CDC ロードに対応し、Kafka などのストリームもマイクロバッチとして取り込み可能。ウェアハウス生成と同一の単一プラットフォームで完結し、追加のツール費用は不要です。
-
ベンダー仕様ではなく自社設計のスキーマ
ソーステーブルは自社で設計した Data Vault 2.0 モデルにマッピングされます。カラム追加やテーブル名変更が発生しても、マッピングを調整するだけで対応でき、ロード後のスクリプト修正作業は不要です。
-
差分(デルタ)のみを転送・処理
Hub、Link、Satellite は変更分のみを効率的にロードします。フルリロードデータはステージングに留まり、下流で毎晩再処理されるような無駄な負荷を発生させません。
-
設計段階から変更履歴を確実に保持
すべての変更履歴が到着順に記録されるため、ソース側でレコードが上書きされても過去時点の正確な状態(as-was)を遡って集計・レポーティングできます。
-
手作業でのコーディングは一切不要
ロード処理、履歴管理、データリネージはモデルからリアルタイムで自動生成され、Snowflake、Databricks、BigQuery、SQL Server、Fabric、Oracle、PostgreSQL 上でネイティブに実行されます。
-
1 つのプラットフォームで最大 9 つのツールを集約
モデリング、ETL、CI/CD、ドキュメント生成、リネージ管理を 1 つの環境に統合。要件定義から本番環境へのデプロイまでわずか 14.7 分という迅速なデリバリーを実現します。
専門家にご相談ください
弊社のセールスディレクターが 20 分間で、貴社の技術スタックに適合するか率直にお答えします。
Matt Collett
Sales Director
ご都合の良い日時をお選びください:
本シリーズで解説するその他の課題
-
dbt のトレードオフ:モデル乱立、隠れた TCO、そして自動モデリングへの転換
dbt は SQL にソフトウェアエンジニアリングの手法をもたらし、多くのチームに支持されました。しかしその代償として、コード量、運用コスト、コンピュート費用が肥大化し続ける変換レイヤーを抱え込むことになり、取り込みツールも依然として別製品のままです。自動生成される Data Vault は、そのレイヤー全体をコードベースから取り除きます。dbt を完全に置き換えることも、共存させることも可能です。
-
dbt 導入後もデータ取り込み(インジェスチョン)に悩まされていませんか?
dbt は意図してデータ変換(Transform)に特化したツールとして設計されています。生データがすでにウェアハウス内に存在することを前提としているため、データのランディングには別の製品と別個の請求書が必要になります。Fivetran と dbt Labs が合併した現在でもこの構造は変わりません。取り込みとモデリングを 1 箇所で完結させるプラットフォームなら、二重契約なしにこのギャップを埋めることができます。
-
dbt プロジェクトで誰も全容を説明できないモデルが乱立していませんか?
ref() 関数のおかげで、1 行書くだけで誰でも簡単に新しいモデルを作成できます。その結果、ガバナンスの効かない何百もの SQL ファイルがプロジェクト内に蓄積されます。上流のビジネスキーを 1 つ変更すると、その影響を受けるモデルを探し回る羽目になります。解決策はテストを増やすことではなく、構造を手作業で蓄積する代わりにモデルから自動生成することです。
よくあるご質問
- 増分モデルの実装が任意であり、モデルごとに手作業でユニークキー、フィルター条件、マージ戦略を記述しなければならないからです。実際の開発現場では、納期に追われて増分ロジックの記述が後回しにされ、全件再構築(Full Table Rebuild)のまま放置されているモデルが多数存在します。これに対し、自動生成される Satellite のロード処理は、構造的に最初から差分更新として生成されます。
- Fusion エンジンとともに導入された dbt State は、入力データに変更のないモデルの実行をスキップするため、コンピュート削減に大きく寄与します。しかし、これは「そのモデルを実行するかどうか」を判定しているに過ぎず、「実行されたときにモデルが何をするか」を変えるものではありません。一度トリガーされた全件再構築モデルは、依然として全件を再構築します。
- 生成されるロード処理は、ターゲットエンジン向けに高度にチューニングされたセットベースの差分操作です。変更されたデータのみをピンポイントで処理するため、一般的な夜間バッチにおいて処理されるデータ量はソース全体のわずかな割合に留まります。