データ基盤コスト最適化

「Snowflakeのクレジットが月末に跳ねた」「BIが遅いのでウェアハウスを大きくしたら予算オーバー」を解消する5ステップ。コスト構造の理解、materialization選定、ウェアハウス設計、未使用モデル特定、運用ガバナンスまで。完走目安30〜35分。

全5ステップ各3問のクイズ登録不要
0 / 5 ステップ完了
1
コストの正体:何にお金がかかっているのか
未完了

クラウドDWHの課金は「ストレージ」と「コンピュート」に分かれます。dbt運用で跳ねるのはほぼコンピュート、つまり仮想ウェアハウスの稼働時間(Snowflakeならクレジット、BigQueryならスキャン量、DatabricksならDBU)。「容量を増やす」のは安いが、「動かし続ける」のは高い、と覚えておくのが第一歩です。

跳ねる典型原因は6つ。materialization選定ミス(大きなテーブルがtable)、ウェアハウスサイズ過剰、full-refreshの乱用、auto_suspendが長い、ジョブの並行衝突、使われていないGoldマートが毎晩構築。順に潰します。

2
materializationを正しく選ぶ
未完了

いちばん効くのが各モデルのmaterialization見直しです。view(実体なし)、table(毎回作り直し)、incremental(差分追記)、snapshot(履歴管理)の4つを使い分けます。「大きなテーブルがtableのまま」は典型のコスト無駄遣い。incrementalに切り替えるだけで変換時間が桁違いに下がります。

判断軸はシンプル:軽い変換と参照少ならview、中規模で複雑な更新があるならtable、大規模で追加中心ならincremental、履歴管理が要るならsnapshot。先回りで全モデルincrementalにすると運用が複雑化するので、「重くなってから切り替える」が現実的です。

3
ウェアハウスを用途と時間で分ける
未完了

1つのウェアハウスで全てをさばくと、用途の違う処理が干渉してコストが膨らみます。dbt変換用(WH_DBT_TRANSFORM)、BI参照用(WH_BI)、アドホック分析用(WH_ADHOC)と最低3つに分け、サイズと auto_suspend を用途で変えます。

dbt用はauto_suspend 60秒・サイズ小〜中、BI用はキャッシュを残すためauto_suspend 300秒・マルチクラスタで同時実行に対応。「Lで30分」と「Sで60分」はクレジット消費が同じケースもあるので、計測してから上げます。

4
使われていないモデルを止める
未完了

「念のため」作ったマートが、誰にも使われていないのに毎晩構築されている、というのは現場で頻発します。SnowflakeのACCESS_HISTORYやQUERY_HISTORYから過去30日参照されていないテーブルを洗い出し、enabled: falseで止めるか削除します。

dbtのexposuresを書いていれば「BIから参照されているか」も追跡できます。「query_tag」でモデル別クレジット消費を可視化し、「重いトップ10」に最適化の工数を集中させる、というアプローチが最も投資効率が高いです。

5
運用ガバナンス:コストを「見える状態」にする
未完了

個別の最適化が一巡したら、次は「コストが見える状態を維持する」運用に移ります。月次のクレジット消費レポート、重いクエリ上位ランキング、新規モデル追加時のコスト試算(PRレビュー時にチェック)、四半期での未使用モデル棚卸し。これらを定例化すると、再度コストが跳ねるのを未然に防げます。

カタログ(DataHub・Atlan等)と連携すると「このモデルは何のために、いくらかけて、誰のために動いているか」が見えるようになり、Data Productとしての責任分担も明確になります。コストはガバナンスの一部、と捉えるのが成熟した運用です。

学習パス完走、おめでとうございます

コスト最適化の打ち手と運用ガバナンスを一通り押さえました。自社のSnowflake/BigQueryコスト診断、dbtプロジェクトの棚卸しは、初回相談(30分・無料)をご利用ください。

初回相談(30分・無料)について