ふくふくHukuhuku Inc.
EP.07Eng Dash 12分公開: 2026-05-10

BigQuery / Snowflake のクエリコスト:誰のクエリが高いかを見る

INFORMATION_SCHEMA.JOBS_* と ACCOUNT_USAGE.QUERY_HISTORY を掘れば、クエリ別・ユーザ別・プロジェクト別の費用が分かる。「あの人が SELECT * を流したから 1 日で予算オーバー」を防ぐ仕組み。

#BigQuery#Snowflake#DWH#コスト管理
シェア

のクエリコストは 個人別の差が極端。「1 人が `SELECT *` を 1 回実行 → $50 飛ぶ」事故が頻発する場所。 の `INFORMATION_SCHEMA.JOBS_*` と の `ACCOUNT_USAGE.QUERY_HISTORY` を集計して 誰のクエリがいくらか を見える化します。

BigQuery: JOBS_BY_PROJECT

ユーザ別の月次コスト
SQL
-- 過去 30 日のユーザ別コストSELECT  user_email,  COUNT(*) AS query_count,  SUM(total_bytes_billed) / POW(10, 12) AS tb_billed,  SUM(total_bytes_billed) / POW(10, 12) * 5.0 AS cost_usd_estimate,  -- $5/TB  SUM(total_slot_ms) / 1000 / 60 AS slot_minutesFROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECTWHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)  AND state = 'DONE'  AND statement_type = 'SELECT'GROUP BY 1ORDER BY tb_billed DESCLIMIT 30;

高コストクエリ TOP 10 を毎日 Slack 通知

前日の高コストクエリ
SQL
WITH top_queries AS (  SELECT    user_email,    job_id,    LEFT(query, 200) AS query_preview,    total_bytes_billed / POW(10, 9) AS gb_billed,    creation_time  FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT  WHERE DATE(creation_time) = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)    AND total_bytes_billed > 100 * POW(10, 9)  -- 100 GB 超)SELECT * FROM top_queriesORDER BY gb_billed DESCLIMIT 10;

Snowflake: ACCOUNT_USAGE.QUERY_HISTORY

Snowflake の月次コスト by ロール
SQL
SELECT  ROLE_NAME,  USER_NAME,  COUNT(*) AS query_count,  SUM(EXECUTION_TIME) / 1000 / 60 AS execution_minutes,  SUM(CREDITS_USED_CLOUD_SERVICES) AS creditsFROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORYWHERE START_TIME >= DATEADD(day, -30, CURRENT_DATE())GROUP BY 1, 2ORDER BY credits DESCLIMIT 30;

ダッシュに載せる指標

  • ユーザ別月次費用: 上位ヘビーユーザの実態
  • チーム別 (QUERY_TAG / labels): チームの予算消化
  • ジョブ種別: 対話的 vs バッチ vs
  • 前日 TOP 10 高コストクエリ: Slack 通知
  • フルテーブルスキャンクエリ: パーティション無視の事故
  • slot 利用率: スロットを買い過ぎ / 不足

実装パターン: 自社 DWH に取り込み

保持期限を超えて残す

INFORMATION_SCHEMA.JOBS は 180 日 までしか遡れない。毎日の集計を別テーブルに保存し、何年も遡れる長期 audit テーブル にしておくのが本番運用の前提。詳細は データ民主化 EP.10

次の話

EP.08 では、ここまでのコストを 個人別 / プロジェクト別 / チーム別 に配賦する設計を扱います。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp