GCPアカウントなしでも使えるBigQueryの始め方

### 目次
- BigQueryとは
- 無料利用枠について
- サンドボックスを使ってみる
- コストを抑える工夫
- まとめ
- 参考文献、BigQuery関連資料

### はじめに

BigQueryに興味があったものの、12ヶ月分の無料利用枠を開始するのが勿体なく手を出せずにいたところ、以下のニュースを見たのでやや遅ればせながらBigQueryを試しに触ってみたので自分用の備忘録としてまとめておきます。

**[クレジットカードは不要 : クエリを無料で試せる BigQuery サンドボックス](https://cloudplatform-jp.googleblog.com/2019/03/query-without-a-credit-card-introducing-bigquery-sandbox.html)**
>BigQuery サンドボックスは BigQuery を無料で試せるオプションです。
>クエリ データ処理を毎月 1 TB まで、ストレージを同 10 GB まで無料で利用できます。すべてのテーブルとパーティションには 60 日間の有効期限があります。


### BigQueryとは
BigQueryとはGoogleCloudPlatformが提供するデータウェアハウスのことで、SQLで操作が可能です。他サービスとの比較は特にしませんが、メリットと思われる部分をいくつか上げておきます。

- **大容量のデータでも超高速な処理が可能**
    - ギガバイト〜ペタバイト規模のデータを扱える
- **容量制限がなく、容量に悩む心配がない**
- **料金が安い**
    - ストレージの料金
        - アクティブストレージ(過去90日間で変更されたテーブルorパーティションに格納されたデータ)の料金 (2019/04/28現在)
            - 1ヶ月あたり$0.023/GB
            - 毎月10GBまで無料
        - 長期ストレージ(過去90日間で変更されなかったデータ)の料金
            - 1ヶ月あたり$0.010/GB
            - 毎月10GBまで無料
    - クエリの料金
        - 「オンデマンド料金」「定額料金」の2種類から選択可能。デフォルトではオンデマンド料金になっている
        - オンデマンド料金ではデータが保存された場所に関係なく、「処理されたバイト数」に基づいて請求される
            - 1ヶ月あたり$5.00/TB
        - テーブルの分割とクラスタ化により、クエリで処理されるデータ量を減らすことが可能なので、工夫次第で更に費用を抑えることができる
- **BigQueryMLを利用すれば機械学習モデル構築も可能**

### 無料利用枠について
GCPには12ヶ月分の無料利用枠があります。また、それとは別に有効期限なしの無料利用枠があります。

- **12ヶ月の無料利用枠**
    - GCPアカウント登録から12ヶ月は300ドル分無料で使うことができる
    - ほぼすべてのGCPプロダクトが対象
- **有効期限なしの無料利用枠(Always Free)**
    - 特定のサービスについて一定の範囲内での利用が無料になるというもの
        - App Engine、Cloud Datastoreなど。BigQueryも含まれる
        - BigQueryの無料利用枠は、クエリデータ処理1TB/月、ストレージ10GB/月。(テーブルとパーティションには60日間の有効期限がある)

(参考)[Google Cloud Platform の無料枠](https://cloud.google.com/free/?hl=ja)
(参考)[よくある質問 Google Cloud Platformの無料利用枠](https://cloud.google.com/free/docs/frequently-asked-questions?hl=ja)
(参考)[Always Free の使用制限](https://cloud.google.com/free/docs/always-free-usage-limits?hl=ja)

### BigQueryサンドボックスを使ってみる
※ GCPアカウントは不要ですが、Googleアカウントは必要です
今回は集計そのものというより、BigQueryの使い方把握が目的なので、とりあえず一般公開データセットを使って色々試してみます。

- STEP1：[Google Cloud Console](https://console.cloud.google.com/)へアクセスし、ページ左のメニューから「BigQuery」をクリック。以下の画面になっていればOK。(※画像は新しいUIで、古いUIの場合もある)
![スクリーンショット 2019-04-28 17.51.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395388/4027fdc7-9fcf-3e16-2553-ef0fb08cdd75.png)
- STEP2：プロジェクトを選択
    - 画面上部の▼印をクリックし、BigQueryを使うプロジェクトを選択する。今回はBigQuery練習用にプロジェクトを新規作成して選択。
- STEP3：一般公開データセットを調べる
    - 画面左端の「リソース」→「データを追加」→「一般公開データセットを調べる」からデータセットを調べることができる
    - ビットコイン取引のデータやシカゴのタクシーに関するデータなど、色々なデータセットが公開されている
    - 今回は気分でstackoverflowのデータを選択
- STEP4：クエリ実行
    - 一般公開データについてはすぐに使用可能で、画面左端の検索窓から検索して、テーブル構造を確認することができる
![スクリーンショット 2019-04-28 18.08.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395388/1eb97983-a203-c3fa-e5dd-c47ea19e873a.png)
    - SQLを記述すると、実行前でも右下にデータ処理量(緑色の文字)が表示されるので安心できる
![スクリーンショット 2019-04-28 18.15.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395388/45c0f434-fdda-b1b8-6a52-3848d2dcfabe.png)   
    - クエリテキストの一部分のみの実行も可能
        - 下図のようにSQLの一部分を選択すると、「実行」ボタン右側の▼印がクリック可能になり、選択範囲のみを実行できるようになる
![スクリーンショット 2019-04-28 18.17.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395388/b1c03e4d-4977-8699-c37e-4c2522c05ae7.png)

### コストを抑える工夫
無料利用枠といえど、実務で使うことを想定して低コストなクエリを書けると嬉しいです。
**[BigQuery のおすすめの方法: 費用を抑える](https://cloud.google.com/bigquery/docs/best-practices-costs?hl=ja)**に詳しく載っているようですが、2、3点抜粋しておきます。

- プレビューのためのクエリ実行は避ける
    - プレビューが見たい場合は、ウェブUIから「テーブルの詳細」→「プレビュー」を選択すればOK
- select * は避けてなるべくカラム選択する
- limitを使っても費用削減効果はない

### まとめ
公式ドキュメントの数が多く、GCP初心者としてはサンドボックスに辿り着くまでに少々時間を要しましたが、BigQueryを使いだすと公式ドキュメントが充実している点が逆にありがたいですね。会社ではAWS Athenaを導入しているのですが、普段Rばかり書いているのでプライベートで気軽にSQLを試す環境としても便利そうだと思いました。


### 参考文献、BigQuery関連資料

- [[1]GoogleCloud公式, BigQueryとは](https://cloud.google.com/bigquery/what-is-bigquery?hl=ja)
- [[2]GoogleCloud公式, BigQueryの料金](https://cloud.google.com/bigquery/pricing?hl=ja)
- [[3]GoogleCloud公式, BigQueryのおすすめの方法: 費用を抑える](https://cloud.google.com/bigquery/docs/best-practices-costs?hl=ja)
- [[4]GoogleCloud公式, BigQuery に申し込む](https://cloud.google.com/bigquery/sign-up?hl=ja)
- [[5]GoogleCloud公式, BigQueryドキュメント](https://cloud.google.com/bigquery/docs/?hl=ja)
- [[6]GoogleCloud公式, BigQuery入門ガイド](https://cloud.google.com/bigquery/docs/how-to?hl=ja)
- [[7]GoogleCloud公式, BigQueryチュートリアル](https://cloud.google.com/bigquery/docs/tutorials?hl=ja)
- [[8]GoogleCloud公式, BigQueryサンドボックスの使用](https://cloud.google.com/bigquery/docs/sandbox)
- [[9]Lightning Talk: DeNA and BigQuery](https://www.youtube.com/watch?v=A6z8ybD8_cU&hl=ja)
- [[10]
Tomohiro Shinden(2015), これでBigQueryをドヤ顔で語れる！BigQueryの基本](https://www.slideshare.net/newta/bigquery-56438380)