目次

まえがき
第1章 BigQueryをつかってみよう
1.1 BigQueryの料金体系
  • 1.1.1 分析(クエリ)
  • 1.1.2 ストレージ
  • 1.1.3 データ取り込み
  • 1.1.4 データ抽出
1.2 クエリを実行する
1.3 クエリを保存する
1.4 まとめ
第2章 データを取り込んでみよう
2.1 BigQueryへのデータ取り込み方法
  • 2.1.1 BigQuery Data Transfer Service
  • 2.1.2 外部データソース
  • 2.1.3 他データセットからのテーブルコピー、CTAS
2.2 オープンデータを取り込む
  • 2.2.1 前準備
  • 2.2.2 BigQuery Data Transfer Serviceでのデータ取り込み
  • 2.2.3 外部データソースでのデータ取り込み
  • 2.2.4 一般公開データセットに対してCTASで取り込み
2.3 効率的なクエリの書き方
  • 2.3.1 必要なカラムのみ選択する
  • 2.3.2 パーティション分割を利用する
2.4 まとめ
第3章 ログを集計・分析しよう
3.1 サンプルアプリケーションの構築
3.2 BigQueryデータセットの作成
3.3 Cloud Loggingシンクの設定
3.4 ログ集計する
3.5 DBデータを取り込む
3.6 あと片付け
3.7 まとめ
DBデータの継続的な取り込み
第4章 可視化しよう
4.1 データポータルとは
4.2 COVID‑19の感染者数を可視化する
4.3 Geo Vizで地理空間データを可視化する
4.4 商品カタログ別のアクセス数を可視化する
4.5 商品カタログ別の注文数を可視化する
4.6 ダッシュボードをブラッシュアップする
4.7 料金について
4.8 BigQuery BI Engine
  • 4.8.1 BI Engineの料金
  • 4.8.2 BI Engineの有効化
4.9 まとめ
第5章 GCPのコストを可視化しよう
5.1 Cloud Billingとは
  • 5.1.1 レポートからコストを可視化する
  • 5.1.2 コストデータをBigQueryにエクスポートするメリット
5.2 エクスポートできるコストデータの種類
5.3 請求データをBigQueryにエクスポートする
5.4 よく使うカラム
5.5 クエリ例
  • 5.5.1 クレジットを含む総額の算出
  • 5.5.2 _PARTITIONTIMEカラムによるデータスキャン量の削減
5.6 GCPサービス別に前月比を可視化する
5.7 まとめ
あとがき


まえがき

本書を手に取っていただき、ありがとうございます。本書は、Google Cloudが提供しているデータウェアハウスサービス「BigQuery」をメイントピックとして扱います。BigQueryやデータ基盤について知らない方でも最初の一歩として手にとっていただけるように執筆しました。

データ基盤と聞くと、データエンジニアやデータサイエンティスト、機械学習エンジニア、会社によってはITインフラエンジニア・SREが関わることが多いと思いますが、Webエンジニアはクエリ実行することはあれどデータ基盤の構築まで踏み込むことは少ないと思います。

本書は本格的なデータ基盤の構築までは踏み込みませんが、BigQueryへのデータの投入からクエリ実行、ダッシュボードによる可視化をひととおり学べるという本です。50ページ程度のボリュームなのでサクッと読めるはずです。読みながらぜひ手を動かしてBigQueryとその周辺ツールの便利さを体験してもらえればと思っています。

本書で得られること

  • BigQueryの料金体系、クエリ実行、テーブル作成に関する基礎知識
  • CSVなどのデータファイルの取り込み
  • デモアプリをGKEクラスタで構築、アプリケーションログの取り込み
  • ダッシュボード作成、データの可視化
  • GCPコストの集計・コスト分析について

本書で得られないこと

本書では、次の内容について取り扱っていません。

  • ETL処理
  • データパイプライン、ワークフロー管理
  • リアルタイム分析
  • BigQuery、データ基盤のセキュリティ
  • 機械学習(BigQuery ML)

対象読者

  • BigQueryについて聞いたことがある程度の人、初心者
  • データ基盤、ログ基盤の構築を任されたけど何をすればいいのかわからない人

前提とする知識

  • SQLについての基礎知識

GCPアカウントのセットアップについて

本書の内容にしたがって手を動かす場合に、GCPアカウントのセットアップが必要です。初めてGCPに触られる人は次のURLから無料トライアルに登録してください。無料トライアル中は300 USDの無料クレジットが付きますので、本書で取り扱っている各種サービスを実行しても料金はかかりません。

https://console.cloud.google.com/getting-started

GCPプロジェクト

本書では「ohsawa0515-bq-nyumon」をGCPのプロジェクトIDとして説明します。各々の環境に読み替えてください。

問い合わせ先

免責事項

本書は情報の提供のみを目的としています。本書の内容を実行・適用・運用したことで何が起きようとも、それは実行・適用・運用した人自身の責任であり、著者や関係者はいかなる責任も負いません。

本書で載せている料金は特に断りがない限り、2022年9月時点の東京リージョンの料金です。料金は今後変更になる可能性があるため、GCP公式の料金表をご確認ください。

第1章
BigQueryをつかってみよう

本章では、第一歩として一般公開されているデータセットをつかってBigQueryからクエリを実行してみます。BigQueryをつかううえで俗に言う「クラウド破産」と呼ばれる多額な料金発生が気になると思いますが、料金体系を理解することで利用額をおおよそ予測できるので恐れることはありません。


キーワード:BigQueryの料金、データセット

1.1 BigQueryの料金体系

BigQueryの料金は主に分析(クエリ)、ストレージ、データ取り込み、データ抽出で発生します。

1.1.1 分析(クエリ)

BigQueryに対してSQLクエリを実行した際に発生する費用です。クエリ料金にはオンデマンドと定額の2種類の料金モデルがあります。

オンデマンド

クエリによってスキャンされたデータ量に基づいて料金が発生します。東京リージョンでは1TBあたり6 USDです(毎月1TBまで無料)。「スキャンされた」がポイントで、クエリの書き方によって料金がかかります(スキャン量を意識したクエリの書き方は「2.3 効率的なクエリの書き方」を参照)。エラーが返されたり、キャッシュから結果が返された場合は料金は発生しません(キャッシュについては「4.7 料金について」を参照)。

定額

BigQueryの定額料金はBigQuery Reservationsという機能で提供されています。スロットと呼ばれる仮想CPUの単位を事前に購入し、GCPプロジェクトに割り当てることで有効化されます。期間は秒(Flex Slots)、月、年単位で購入できます。オンデマンド料金だと事前見積もりが難しいゆえに予算管理が厳しい場合に役立ちます。

1.1.2 ストレージ

BigQueryに保存される際に発生する費用です。ストレージ料金にはアクティブストレージと長期保存の2種類があります。なお、毎月10GBまでは無料です。

アクティブストレージ

過去90日間で変更されたテーブルやパーティションはアクティブストレージとして料金が発生します。変更は追加(INSERT)と更新(UPDATE)が対象です。料金は1GBあたり0.023 USDで、Google Cloud Storage(以下、GCS)*1のStandard Storageと同じです*2

長期保存

90日間連続して変更されていないテーブルやパーティションは長期保存として料金が自動的に変更されます。料金は1GBあたり0.016 USDで、GCSのNearline Storageと同じです。パフォーマンス、可用性、耐久性についてアクティブストレージと違いはないため、ログなど長期的に保存する要件に対して有効です。

[*1] Googleが提供しているオブジェクトストレージサービス。

[*2] https://cloud.google.com/storage/pricing#asia

注意点

請求されるストレージ料金は非圧縮状態でのデータ量です。例えば、GCSに圧縮したファイルを置いてBigQueryにデータ取り込みした場合、GCSでのストレージ費用とBigQueryでのストレージ費用は必ずしも一致しません。参照する機会は少なく、コストを少しでもおさえたい場合はGCSに保存して外部テーブル*3として参照するのが良いでしょう。

[*3] https://cloud.google.com/bigquery/docs/external-data-sources

1.1.3 データ取り込み

バッチ取り込みにかかるデータ取り込みは無料です。ストリーミング(リアルタイム性を必要とする)の場合は200MBあたり0.012 USDの料金が発生します。BigQuery Storage Write APIと呼ばれる大量のデータ取り込みできるAPIを利用すると1GBあたり0.03 USD発生します。

1.1.4 データ抽出

バッチによるデータ抽出は無料です。ストリーミングの場合は1TBあたり1.32 USDかかります。BigQuery Storage Read APIと呼ばれる高速にデータ取得できるAPIを利用した場合も1TBあたり1.32 USDかかります。Pythonライブラリ(google-cloud-bigquery)を使ってデータ抽出する場合、Storage APIを暗黙的に使用している場合があります*4

[*4] https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.job.QueryJob.html?highlight=to_dataframe#google.cloud.bigquery.job.QueryJob.to_dataframe


1.2 クエリを実行する

一般公開データセットと呼ばれる、一般提供されているデータセット*5を使ってクエリを実行します。今回はCOVID-19のオープンデータを使います。

[*5] テーブルなどを束ねたもので、RDBにおけるデータベースのようなものです。

  1. BigQueryのコンソール画面*6に行き、検索窓からcovid19_open_dataと入力します。
  2. bigquery-public-dataというデータセット名の横にあるピンアイコンをクリックして固定します。こうすることで次回から簡単にデータセットにアクセスできます(図1.1)。
covid19_open_dataの表示

図1.1: covid19_open_dataの表示

[*6] https://console.cloud.google.com/bigquery

  1. covid19_open_dataテーブルをダブルクリックすると、スキーマやテーブルサイズなどの詳細、プレビューが表示されます(図1.2)。プレビューでテーブルの中身を確認できます。プレビューによるデータ閲覧は無料なので、ざっと中身を確認したい場合はSELECT文ではなくプレビューを利用しましょう。
covid19_open_dataテーブルの詳細画面

図1.2: covid19_open_dataテーブルの詳細画面

  1. 東京都の感染者数と死亡者数を取得するためにリスト1.1をクエリエディタに入力します。このときに、右上に処理されるデータ量が表示されます(図1.3)。これが請求されるデータスキャン量の目安となるため、クエリ実行前に想定以上のスキャン量がないことを必ず確認しましょう。
リスト1.1: リスト1.1: 東京都の感染者数と死亡者数を取得するクエリ
SELECT
  date,
  new_confirmed, -- 感染者数
  new_deceased,  -- 死亡者数
FROM `bigquery-public-data.covid19_open_data.covid19_open_data`
WHERE
  country_name = "Japan"
  AND location_key = "JP_13"
ORDER BY date;
データ処理量を確認できる

図1.3: データ処理量を確認できる

  1. [実行]をクリックするとクエリが実行されます。画面下部の「クエリ結果」から実行結果が表示されます。


1.3 クエリを保存する

せっかく作成したクエリを後で再利用したい場合があります。そのときはクエリを保存すると便利です。

  1. クエリエディタの上にある[保存]を選択して、[クエリを保存]をクリックします。
  2. [名前]は自分がわかりやすいものにして、[公開設定]は「個人用」にします。「プロジェクト」にすると、同じプロジェクトにアクセスできる人とクエリを共有できます。
  3. 保存した後、データセット一覧から保存したクエリが表示されます。再実行したい場合はクエリ名をダブルクリックするとクエリエディタにクエリが入力されます(図1.4)。
保存したクエリを確認できる

図1.4: 保存したクエリを確認できる

1.4 まとめ

本章では、BigQueryの料金体系を説明し、一般公開データセットをつかってクエリを実行しました。一度実行したクエリは保存できるので再利用や他の人に共有できて便利です。次章はデータセットとテーブルを作成してデータを取り込んでみます。

試し読みはここまでです。
この続きは、製品版でお楽しみください。