Share
Embed
〜基礎から発展まで〜 BigQuery×Looker Studio のクエリコスト削減方法!
CUEBiC Inc.
May 02, 2025
Transcript
19 slides
-
BigQueryのベストプラクティス対応_パーティション 5 パーティション 日付単位で分割することで、指定期間のデータしかスキャンしなくなる ▷未設定の場合はWHERE句でBETWEEN句などを指定したとしてもフルスキャン SELECT * FROM `project.dataset.table` WHERE
event_date = '2024-04-01' ❌ パーティションなし ✅ 日付パーティションあり 全データ (例:100GB)がスキャン対象 (WHERE句は後から適用) 1日分のデータのみスキャン (例:300MB)ス キャン量が大幅に削減 共通のクエリを実行した場合 -
BigQueryのベストプラクティス対応_クラスタリング 6 クラスタリング ブロック単位で設定することでテーブルを効果的にソートする ▷RDBでいうところのINDEXの設定に感覚としては近い。 SELECT * FROM `project.dataset.events` WHERE
user_id = 'abc123' ❌ クラスタリングなし ✅ クラスタリングあり 全データがスキャン対象となりスキャン量が 多く、速度劣化に user_idの値がまとまって格納されている の で、該当ブロックのみをスキャンして高速&低コ ストに 共通のクエリを実行した場合 -
Looker Studioを仮想的にAPI化 11 アーキテクチャ ページ内表示 パラメータをクエリストリングで連携することで、Looker Studioのカスタムクエリの集計条件 を描画前に調整し、ユーザーがみたい閾値で可視化が可能 BigQuery ページ参照
https://lookerstudio.google.com/u/0/reporting/54f a38e1-b459-4606-9a20-d86359802901/page/p_mnpnn34y nd?params={"ds76.roas_times_param":"0.5"} 表示要素演算 ユーザー フィルタ結果 -
イメージ 12 https://lookerstudio.google.com/u/0/r eporting/54fa38e1-b459-4606-9a20-d863 59802901/page/p_mnpnn34ynd?params={"d s76.organization_param":"組織B"} SELECT campaign_id, campaign_name, ad_group_id,
ad_group_name, impressions, clicks, cost, revenue, revenue / NULLIF(cost, 0) AS roas FROM your_dataset.your_table WHERE organization= @organization_param ORDER BY roas DESC 組織はデフォルト値 クエリストリングでデ フォルト値を更新 データソースを再集計 組織A 組織B -
INFORMATION SCHEMAから取得する 16 BigQuery フィルタ結果 SELECT DATETIME(creation_time, "Asia/Tokyo") AS creation_time_jst,
-- クエリ作成日時 referenced_tables, -- 参照されたテーブル job_id, -- BigQueryのジョブ ID job_type, statement_type, (SELECT l.value FROM UNNEST(labels) l WHERE l.key = "looker_studio_report_id") AS report_id, -- Looker Studioのレポート ID (SELECT l.value FROM UNNEST(labels) l WHERE l.key = "looker_studio_datasource_id") AS datasource_id, -- データソース ID user_email, -- 実行ユーザー cache_hit, -- キャッシュ使用の有無 query, -- 実行クエリ total_bytes_billed / (1024*1024*1024) AS total_gb_billed, -- 請求データ量 (GB) total_slot_ms / 1000 AS total_slot_seconds -- スロット使用時間 (秒) FROM `region-asia-northeast1`.INFORMATION_SCHEMA.JOBS WHERE DATE(creation_time, "Asia/Tokyo") BETWEEN DATE_SUB(CURRENT_DATE("Asia/Tokyo"), INTERVAL 1 DAY) AND DATE_SUB(CURRENT_DATE("Asia/Tokyo"), INTERVAL 0 DAY) -- 昨日分のクエリ AND (SELECT l.value FROM UNNEST(labels) l WHERE l.key = "requestor") = "looker_studio" -- Looker Studioのクエリに限定 ORDER BY creation_time_jst DESC;