Looker Studio + BigQuery でコストを最適化する方法

記事タイトルとURLをコピーする

G-gen の神谷です。本記事では、Looker Studio で BigQuery データソースを使う際のコスト最適化について説明します。

はじめに

Looker Studio とは

Google Cloud が提供する BI ツールで、様々なデータソースに接続し、簡単にダッシュボードを作ることができます。

もともとは Google Workspace 内の製品でしたが、Looker と統合し、リブランドを行っています。

詳細については当社ブログを参照してください。

blog.g-gen.co.jp

料金体系

Looker Studio は無料版と Pro 版の二種類があります。

Pro 版は無料版にガバナンス機能が追加されたものであり、ユーザ単位でのサブスクリプションとして申込可能です。 性能という観点では、無料版と Pro 版で差異はありません。

いずれのプランも、ダッシュボードを作ったり閲覧者に共有するといった機能は無料ですが、裏側で実行される BigQuery からのデータ読み出し料がかかります。

Looker Studio Pro の詳細な解説は以下をご参照ください。

blog.g-gen.co.jp

BigQuery コストを調べる

Looker Studio レポートでどのくらいの BigQuery コストがかかっているかを、以下の方法で調べることができます。

blog.g-gen.co.jp

料金削減の基本方針

以下が料金削減の基本方針です。キャッシュの活用や、事前のデータ絞り込みが有効です。 これによって、BigQueryに対するスキャン量が減るため、料金も削減されます。

  • Looker Studio 側

    • データの更新頻度を調整する
    • 抽出されたデータソースを使用する
  • BigQuery 側

Looker Studio によるキャッシュと、BigQuery によるキャッシュがそれぞれ別であるため、両者のキャッシュを上手く使うことがポイントになります。 以下が全体のイメージ図です。

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 とクエリ発行側の間に存在するインメモリエンジンです。 特徴は以下の通りです。

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年コミットメントを購入すると、さらに安価に利用可能になります。

blog.g-gen.co.jp

パーティショニングとクラスタリング

パーティション分割テーブルやクラスタリングを利用することで BigQuery テーブルに対するフルスキャンが回避され、コスト削減に繋がります。

blog.g-gen.co.jp

事前集計とカラム設計

動的集計が必要なケース(例:日付の期間指定によるユニークカウント(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」は全項目での集計という意味です。

BigQuery での GROUP BY CUBE の実装方法

Looker Studio のフィルタ項目を「UNNEST」と対応させ、BigQuery のパーティショニングやクラスタリングのカラムとして設定します。

パーティションは1つ、クラスタリングは4つまで設定可能で、併用もできます。 クラスタリングカラムは裏側でデータをソートし整理しておくことでスキャン量を減らすことができます。

設定順が重要なため、フィルタ項目でよく使うものから設定すると良いでしょう。

補足 : Looker Studio から BigQuery のパーティションは有効なのか

結論から言うと、有効です。

Looker Studio から BigQuery にアクセスする際には、以下のように Looker Studio 側で自動生成された SQL が BigQuery にクエリされます。

Looker Studio で自動生成された BigQuery の SQL

一見、日付パーティションである「date_」カラムで絞り込む前に「jkamiya.Looker Studio_test.wikipedia t0」テーブルにアクセスしているため、フルスキャンをしているのではと心配になります。

しかし、BigQuery はこういった書き方でもパーティションによるスキャンが有効です。

試しに、パーティションフィルタを有効化した上で、対象箇所をコメントアウトすると、以下のようにエラーが出ます。

パーティション未指定エラー

コメントアウトを戻すと、以下のように「924.62MB」となり、エラーも起きず、対象パーティションで絞り込まれていることがわかります。

日付パーティションによるスキャン

パーティションは GROUP BY したものに対して WHERE をかけても有効です。

GROUP BY したあとでもパーティションは有効

補足 : API 上限設定

コスト削減という主題とはそれますが、API に上限を設定することである一定以上は課金されないようにフタをすることが可能です。以下の記事を参考にしてください。

blog.g-gen.co.jp

神谷 乗治 (記事一覧)

クラウドソリューション部

クラウドエンジニア。2017 年頃から Google Cloud を用いたデータ基盤構築や ML エンジニアリング、データ分析に従事。クラウドエース株式会社システム開発部マネージャーを経て現職。Google Cloud Partner Top Engineer 2023、Google Cloud Champion Innovators(Database)、著書:「GCPの教科書III【Cloud AIプロダクト編】」