G-gen の神谷です。本記事では、Looker Studio で BigQuery データソースを使う際のコスト最適化について説明します。
- はじめに
- BigQuery コストを調べる
- 料金削減の基本方針
- Looker Studio のキャッシュ機能
- BigQuery のキャッシュ機能
- キャッシュ以外の手法
- 補足 : Looker Studio から BigQuery のパーティションは有効なのか
- 補足 : API 上限設定
はじめに
Looker Studio とは
Google Cloud が提供する BI ツールで、様々なデータソースに接続し、簡単にダッシュボードを作ることができます。
もともとは Google Workspace 内の製品でしたが、Looker と統合し、リブランドを行っています。
詳細については当社ブログを参照してください。
料金体系
Looker Studio は無料版と Pro 版の二種類があります。
Pro 版は無料版にガバナンス機能が追加されたものであり、ユーザ単位でのサブスクリプションとして申込可能です。 性能という観点では、無料版と Pro 版で差異はありません。
いずれのプランも、ダッシュボードを作ったり閲覧者に共有するといった機能は無料ですが、裏側で実行される BigQuery からのデータ読み出し料がかかります。
Looker Studio Pro の詳細な解説は以下をご参照ください。
BigQuery コストを調べる
Looker Studio レポートでどのくらいの BigQuery コストがかかっているかを、以下の方法で調べることができます。
料金削減の基本方針
以下が料金削減の基本方針です。キャッシュの活用や、事前のデータ絞り込みが有効です。 これによって、BigQueryに対するスキャン量が減るため、料金も削減されます。
Looker Studio 側
- データの更新頻度を調整する
- 抽出されたデータソースを使用する
BigQuery 側
- BI Engine を使用して BigQuery データソースを高速化する
- マテリアライズドビュー
- パーティショニングやクラスタリングを設定し、レポートのフィルタ項目に紐付ける
- 事前集計によりデータを絞り込む
- BigQuery Editions を導入し、Baseline/Max 値を設定
Looker Studio によるキャッシュと、BigQuery によるキャッシュがそれぞれ別であるため、両者のキャッシュを上手く使うことがポイントになります。 以下が全体のイメージ図です。
詳細については後述します。
Looker Studio のキャッシュ機能
キャッシュとそれに近しい機能で、2種類あります。
コンポーネントキャッシュ(造語)
Looker Studio のキャッシュは、グラフやコンポーネント単位で保持されます。(本記事では「コンポーネントキャッシュ」と表現。造語)
キャッシュ有効化の条件
- 過去に実行されたクエリと同一のクエリであればキャッシュが使われる
- 抽出条件が異なれば別のクエリとみなされる
- キャッシュが使えない場合には、もととなるデータソースにクエリが実行される
- キャッシュが使われているかは、稲妻アイコンを見ればわかる
更新方法と頻度
- キャッシュ内のデータが更新される頻度を設定可能
- 手動更新と自動更新がある
- キャッシュが更新されると、古いキャッシュ データと記憶されているクエリはすべて破棄される
- BigQuery コネクタの場合だと「分単位: 1~50 分、時間単位: 1~12 時間」から選択可能
抽出されたデータソース
キャッシュではないが、類似の概念として「抽出されたデータソース」というスナップショット機能があります。
- 1 つあたり 100 MB 以内で複数設定可能
- 裏側では定期的にデータソースにアクセスしてスナップショットを更新できる
BigQuery のキャッシュ機能
BigQuery にもともと備わっているものと、追加で購入するものとで、3 種類あります。
BigQuery のストレージキャッシュ
- デフォルトで提供される機能
- 過去に実行されたクエリと同一のクエリであればキャッシュが使われる
参考 : キャッシュに保存されているクエリ結果を使用する
参考 : BigQueryを徹底解説!(基本編) - クエリ結果のキャッシュ
マテリアライズドビュー
キャッシュ機能を持ったビューです。ビューの裏側で定期的にキャシュを更新し、キャッシュにない部分の変更だけクエリで取りに行きます。通常のビューとは異なりいくつかの制約はありますが、要件に合うのであれば導入を検討すると良いでしょう。
BI Engine
BI Engine は BigQuery とクエリ発行側の間に存在するインメモリエンジンです。 特徴は以下の通りです。
- BI Engine に保存されたデータから結果を取得するクエリを実行する場合、データの読み取りについては課金されない
- Looker Studio の特典として、Looker Studio ユーザ全員にデフォルトで 1 GB の BI Engine キャッシュが無料で提供される
- BI Engine に有効なクエリ演算子が決まっており、このリスト以外のクエリでは効果が薄れるため、注意が必要
- BI Engine は結合が多いクエリだと効果が弱くなる
10 GB の場合
$359.28 / month
程度- Looker Studio ユーザが無料提供されるデフォルト(= 1 GB)の 10 倍の容量(= 10 GB)
- 計算式:1 GB あたり $0.0499 / hour。10 GB を1月分だと、 $0.0499 * 24 * 30 * 10 =
$359.28 / month
キャッシュ以外の手法
BigQuery Editions
BigQuery Editions を使うと、Autoscaler の効果により、デフォルト設定であるオンデマンドよりも料金が安くなる傾向があります。
必要に応じてスロットの1年/3年コミットメントを購入すると、さらに安価に利用可能になります。
パーティショニングとクラスタリング
パーティション分割テーブルやクラスタリングを利用することで BigQuery テーブルに対するフルスキャンが回避され、コスト削減に繋がります。
事前集計とカラム設計
動的集計が必要なケース(例:日付の期間指定によるユニークカウント(distinct)。小計の合計が総計にならない)以外は、raw データを扱うのではなく、なるべく事前集計をします。
日付やフィルタ項目のパターン分、あらかじめ集計しておきます。
BigQuery には「GROUP BY CUBE」構文がありませんが、「UNNEST」を使うことで実装できます。
SELECT date_, title, contributor_ip, COUNT(title) AS revision_count FROM `jkamiya.Looker Studio_test.wikipedia`, UNNEST ([date_, "9999-12-31"]) AS date_, UNNEST ([title, "ALL"]) AS title, UNNEST ([contributor_ip, "ALL"]) AS contributor_ip GROUP BY date_, title, contributor_ip ORDER BY revision_count desc
「9999-12-31」は全期間、「ALL」は全項目での集計という意味です。
Looker Studio のフィルタ項目を「UNNEST」と対応させ、BigQuery のパーティショニングやクラスタリングのカラムとして設定します。
パーティションは1つ、クラスタリングは4つまで設定可能で、併用もできます。 クラスタリングカラムは裏側でデータをソートし整理しておくことでスキャン量を減らすことができます。
設定順が重要なため、フィルタ項目でよく使うものから設定すると良いでしょう。
補足 : Looker Studio から BigQuery のパーティションは有効なのか
結論から言うと、有効です。
Looker Studio から BigQuery にアクセスする際には、以下のように Looker Studio 側で自動生成された SQL が BigQuery にクエリされます。
一見、日付パーティションである「date_」カラムで絞り込む前に「jkamiya.Looker Studio_test.wikipedia
t0」テーブルにアクセスしているため、フルスキャンをしているのではと心配になります。
しかし、BigQuery はこういった書き方でもパーティションによるスキャンが有効です。
試しに、パーティションフィルタを有効化した上で、対象箇所をコメントアウトすると、以下のようにエラーが出ます。
コメントアウトを戻すと、以下のように「924.62MB」となり、エラーも起きず、対象パーティションで絞り込まれていることがわかります。
パーティションは GROUP BY したものに対して WHERE をかけても有効です。
補足 : API 上限設定
コスト削減という主題とはそれますが、API に上限を設定することである一定以上は課金されないようにフタをすることが可能です。以下の記事を参考にしてください。
神谷 乗治 (記事一覧)
クラウドソリューション部
クラウドエンジニア。2017 年頃から Google Cloud を用いたデータ基盤構築や ML エンジニアリング、データ分析に従事。クラウドエース株式会社システム開発部マネージャーを経て現職。Google Cloud Partner Top Engineer 2023,2024、Google Cloud Champion Innovators(Database)、著書:「GCPの教科書III【Cloud AIプロダクト編】」