BigQueryを使ってみたので、関連情報をまとめました
GCP NoSQL を使ってデータ処理したい時
主なサービスはこの辺りだと思います。
- BigQuery: 最も古い。DWH。格安。
- Google BigQuery でヒストリカルデータ保存の料金を半分に、 クエリの速度を 10 倍に
- BigTable: 新しい。リアルタイム分散系NoSQL。高い。
- Googleがスケーラビリティとパフォーマンスの高いNoSQLデータベースCloud Bigtableをベータで提供開始
- Datastore: 新しい。NoSQLフルマネージドかつ、少し安い。
- ウェブ、モバイル アプリケーションのためのスケーラブル NoSQL データベース
- Compute Engine/Container Engine:好きなものを構築できる。使い方によっては、安く済む。
今回は、格安で比較的枯れているBigQueryを使ってみました。 以降の記事はBigQueryについてです。
オライリー本もあります。 Google BigQuery
課金について
ビッグデータをCloudサービスで使う時、課金方式をよく把握しておくのは必須です。
- データ保存による: 1TB 1ヶ月 $20
- スキャンデータ量による
- BigQueryで150万円溶かした人の顔
- 300GBに対して、フルスキャンを数百回繰り返した。(テーブル切り分けのために、
select insert
) - 価格体系が今後変わる。computing量による感じに。
- ストリーミングは課金: 10万行単位などバルクインサートより高い。
- 費用的には、Cloud Storageなどにデータを置いて、バルクインサートが良い。
- ストリーミングの方が手間は少ない(Fluentdや、以下のPandasなどで直接インサートできる)
- ストリーミングはデータ落ちなどが発生する模様。
BigQuery の課金仕様と注意点をまとめてみた(2015-07 時点)
課金対策ツール
- Table partitions Creating and Updating Date-Partitioned Tables
- Table decorator Table Decoratorを使って処理するレコード数を削減する
- テーブルサイズを小さく保つ
Dry runを使って料金計算
bq query --dry_run 'select * from table' | grep -o '[1-9][0-9]*' | awk '{print $1 / 1024 / 1024 / 1024 / 1024 * 5}'
- 同じクエリはキャッシュされて料金制限される
- カスタム割り当て機能を使う
料金予測=>即時反映されない
使い方
Python
から使う場合がメインです。
データ分析基盤としての BigQuery 運用のベストプラクティス Python使いのためのBigQuery連携
また、SDKが提供されてない言語でも、REST APIから使えます。 BigQuery クライアント ライブラリ
その場合、OAUTH2認証が必要です。
CLIで使う
Googleが提供している、基本のbq
コマンドです。
インタラクティブに使う
GCPのコンソールからのやり方です。
Jupyter(IPython)ベースのインタラクティブツールもあります。
Betaですが、Jupyterはかなり使いやすいので、こちらもオススメです。
Google Cloud Datalab 上のページのCLOUD DATALAB を起動は使えなくなってる模様。立ち上げはこちらから。dockerを使って起動する。 quickstart
アプリで使う(ライブラリ)
- Pandas:
io.gbq
パッケージがあり、read_gbq
、to_gbq
が用意されてます。pandas使っている方ならこれ一択かと。かなり使いやすいです。 - Pythonのclientライブラリ:
BigQuery-Python
があります。Pandas使ってない方はこちらが候補になると思います。使いやすいです。 - 公式API:上記でできないことがある場合以外、直接触ることはないです。ライブラリ作成者向けだと思います。
Pandas
to_gbq
でinsert
すると、ストリーミングになり、課金対象になります。
大量データを入れる場合は計算した方が良いです。
pandas連携が詳しく載ってるので再掲します。
Python使いのためのBigQuery連携 pandas.io.gbq.read_gbq pandas.io.gbq.to_gbq
Python client
BigQuery-Python PythonからBigQueryを操作するときは BigQuery-Python が便利だった
公式API
BigQuery API クイックスタート BigQuery API Client Library for Python getting_started.py Google Application Default Credentials