kitoketa blog

AWS/GCP、プログラミング、育成、リーダー、本の感想、などについて

Google BigQuery 基礎知識

始めに

業務で2年弱Google BigQuery(以下BigQuery)を使用したビッグデータの収集、分析業務に携わっており、この機会にBigQueryとは何か、どのような使い方ができるか、注意することは何か、なのどの基礎知識をまとめてみました。

BigQueryとは?


f:id:kitoketa:20200512213629p:plain
特徴

公式ドキュメント: https://cloud.google.com/bigquery/what-is-bigquery?hl=ja

Google Cloud Platform(GCP) で提供されるフルマネージドサーバーレスクラウド データウェアハウスです。

データウェアハウスとは?

意思決定のため、目的別に編成され統合されたデータを保管したデータベースのことです。時系列で保存するため、分析しやすいという特徴があります。

f:id:kitoketa:20200511215800p:plain

データウェアハウスとは

また、通常のRDBと異なり、列指向なので、必要な列のみを読み込むので処理が高速である。

料金

デフォルトでは、実行したクエリに対してのみ料金が発生します。

クエリの参照を必要な日付の必要な列に絞ればとても膨大なデータでも安く使えます。

※一部のみ記載。詳しくは公式ドキュメント参照してください。

オペレーション 料金
アクティブ ストレージ $0.020 per GB
クエリ(オンデマンド) $5.00 per TB

 

どんなことができる?


過去の膨大なデータを蓄積し、SQLやBIツールを使って分析することで、今後のビジネス方針の判断ができる。

データセット

テーブルをまとめる箱のようなイメージです。すべてのテーブルとviewはデータセットに属していないといけません。また、データセット単位でのアクセス権限の制御が可能です。

f:id:kitoketa:20200511232702p:plain

日付別テーブル

テーブル名に"_yyyymmdd"のサフィックスを付けるとテーブルを付けるとUI上でテーブルをまとめてくれます。日付ごとにデータを集計して、障害が起きた時にその日付テーブルだけを削除して再集計することができるので便利です。

f:id:kitoketa:20200511233422p:plain

パーティショニングテーブル

1つの大きいテーブルを小さいパーティションに分割することでクエリのパフォーマンスを向上させることができ、クエリで読み取られるバイト数を減らすことによってコストを削減できます。

f:id:kitoketa:20200512220729p:plainf:id:kitoketa:20200512224712p:plain

ユーザー定義関数

JavaScript を使用して自作の関数を作成できます。

SQLだけだとできない複雑な処理や、クエリ費用を抑えたり、高速に実行できるように事前にデータを絞り込みむことができます。

料金の節約方法


  • 必要な日付のみに絞る
  • SELECT *」はなるべく使わずに必要なカラムのみSELECTする
  • クエリのバイト数制限を指定する
  • 分析しやすく、データを絞った分析用テーブルを作る
  • 簡単にデータを見たいときはウェブUIの「プレビュー」機能を使う(無料)

    f:id:kitoketa:20200512222419p:plain

  • クエリ実行前にdry run結果を見て見積もる

    f:id:kitoketa:20200512222330p:plain

  • 分析しなくなった古いテーブルは削除する

まとめ


 ビッグデータを扱うには使いやすく、値段も安く、高速なのでBigQueryが温度感の高い選択肢になると思います。

ただ実行クエリの料金は常に気を付ける必要があり、分析する際の値段が安くなるようにしっかりテーブルの設計をする必要があります。

今後の記事では、実際に使うことの多いクエリのテクニックや、他のGCPサービスと組み合わせてどのように使っているかを書きたいと思っています。