1 of 61

BigQueryと

Cloud SQLの紹介

Takashi Yokoyama @ GDG Chugoku

〜力技で大量データを解析する〜

2 of 61

参考URLなど

  • コマンドリストとサンプルデータ

3 of 61

I’m “not” professional.

  • GDDGDG Chugoku Organizer (2010-)
  • 趣味
    • Google Apps / GCP関係
    • Golang / Dart
  • プログラマ(6年)→フリーランス(5年)→臨時的任用の公務員(1年7ヶ月)→来年正式採用予定

4 of 61

About GDG Chugoku

  • Google公認のユーザ会
  • GCP(Google Cloud Platform)周りを話す人は、皆無(みんな東京県外に…)
    • BigQueryの講師。他にいませんか?
      • いません!
    • Androidはわりといる。
    • Google Mapは使う方もいるのかな…?
    • AngularJSとか、Yeomanとかはいるのかな…?

5 of 61

About GDG Chugoku

  • 横山の守備範囲
    • Android(は、最近委譲しようかと思っている)
    • Google Apps
      • Google Apps Script / Google API関連
    • GCP
      • Google App Engine / BigQuery / Cloud SQL
      • Google Compute Engine
    • 言語
      • Go / Dart / AngularJS

6 of 61

About GDG Chugoku

  • 発表したことがあるのは
    • Android(は、最近委譲しようかと思っている)
    • Google Apps
      • Google Apps Script / Google API関連
    • GCP
      • Google App Engine / BigQuery / Cloud SQL
      • Google Compute Engine
    • 言語
      • Go / Dart / AngularJS

7 of 61

初めての山口

  • GDG中国の活動は中国地方(岡山、広島、島根)
  • 山口に「味方」がいない。
    • 島根も「味方」がいない。
    • 鳥取も「味方」がいない。
      • 場所さえあれば行くことは可能。

8 of 61

初めての山口

  • Wimaxが京都よりも電波が強い
    • (建物の問題である可能性…)
  • 京都で
    • 「えっ?山口って新幹線止まるの?!」
      • 止まります!と言ってきました。
  • 良い出会いがあることを期待して。

9 of 61

BigQueryのAgenda

  • BigQueryってどんなもの?
  • Webコンソールの使い方
  • コマンドラインの使い方
  • APIの使い方(Google API Client for XX)

10 of 61

BigQuery?

  • Googleのクラウド環境で動作するデータベース
  • 追加のみ可能
    • 削除する時はテーブルごと削除
    • 保存したデータを検索するのが主な役割

11 of 61

BigQuery?

  • 0件でも、1件でも、3億件でも
    • 5秒〜7秒程度
    • 処理したデータ量が10GBを超えても。
    • なので、即答したい時には使えません。
      • 間違っても、Webアプリのフロント側のDBに使わないように…。

12 of 61

BigQuery?

  • なぜ、3億件のデータが5秒程度で検索できるのか?
    • “1TBで1秒でフルスキャンするには5000台のディスクが必要” by http://goo.gl/m6b1UC
    • ということで、”数の暴力”で全てのデータをスキャンするから。
    • indexが効く場合もあるので全てのケースではなさそう。

13 of 61

BigQuery?

  • どんな時に使うのが良いのか?
    • よく聞くうわさは、「システムのログ解析」
      • アクセスログ
      • エラーログ(500を返した時のログを見る…。など)
      • (今日のサンプルデータである)Twitterのつぶやきからキーワードの解析とか…?

14 of 61

BigQuery?

  • 別にAWSからBigQueryにデータを投入して解析だけBigQueryを使えば良い。
    • Googleのサービスと組み合わせないといけないわけではない。
  • 別にHerokuからBigQueryに(略
  • 他にも何か言おうか?

15 of 61

使いはじめる前に

16 of 61

Projectを作る

  1. https://console.developers.google.comにアクセスする
  2. もし、Billing Accountを持っていなければ

17 of 61

Projectを作る

  • Create Projectボタンを押す。

18 of 61

Projectを作る

  1. Project名、Project ID、Billing Accountを設定してCreateボタンを押す。

19 of 61

Projectを作る

  1. BigQuery APIを有効にする。
    1. APIs & Authを選択
    2. StatusのOFFボタンをクリックし、ONにする。

Sampleを試すだけならこれだけで良いですが、大きいデータを使う場合はGCSも有効にしておいて下さい。

20 of 61

Webのコンソールの使い方

21 of 61

コンソールを開く

  • Developers Consoleの左にあるサイドメニューの”BigQuery”をクリックする。
    • 別のタブ(ウインドウ)にコンソールが表示される。

22 of 61

テーブルを作る前に…

  • BigQueryは「Dataset」という単位で管理
    • RDBMSでの「Database」
  • Datasetの中にテーブルを作る。

23 of 61

データセットを作る

  • 左のメニューから下向き三角のボタンを押す。
    • Create new datasetを選択
      • データセット名を入力してOK

24 of 61

テーブルを作る

  • 左のメニューから下向き三角のボタンを押す。
    • Create new tableを選択
      • テーブル名を入力してOK

25 of 61

テーブルを作る

  • アップロードするファイルを選択

26 of 61

テーブルを作る

  • テーブルの定義を入力
    • JSON形式

27 of 61

テーブルを作る

  • Submitボタンを押す。

28 of 61

ここまでの事を

デモします

29 of 61

データ型

  • STRING:UTF-8 64KB
  • INTEGER:64bit整数/FLOAT:浮動小数点数
  • BOOLEAN
    • CSV形式:true/false or 1/0
    • JSON形式:true/false

ドキュメント:http://goo.gl/qvQYaQ

30 of 61

データ型

  • TIMESTAMP
    • 全てUTCで保存される。(タイムゾーン指定をすると、UTCに変換されて保存される)
    • フォーマット
      • Unix timestamp(1970-01-01からの秒数)
      • YYYY-MM-DD HH:mm:ss.SSS
      • YYYY-MM-DDTHH:mm:ss.SSS(Z)

ドキュメント:http://goo.gl/qvQYaQ

31 of 61

データ型

  • RECORD
    • 1個または複数のフィールドを持つコレクション
    • 公式サンプルだと「特定の人の子供の情報」を格納するなど。

ドキュメント:http://goo.gl/qvQYaQ

32 of 61

RECORD型の注意

  • RECORD型を含むテーブルは、単純に、”select * from sampletable;”というクエリで検索できない。(※2個以上ある場合
  • 「フラット化」する必要がある。
    • select * from flatten(sampletable, [対象のカラム]);

33 of 61

ここまでの事を

コマンドラインで

デモします

34 of 61

APIを実行する

  • 今回、1ヶ月ほどTwitterの投稿をBigQueryに入れてみました。

35 of 61

API実行

200件/回

1時間ごとに実行

GCE

Twitter

GCS

BigQuery

ファイルのアップロード

ファイル取り込み

Job APIを実行

クエリ実行

f1-micro

これだけ使って、かかった費用=0円

36 of 61

APIを実行する

  • Google APIs Client Libraryを使えば、実行できる。

37 of 61

APIを実行する

  • 注意点
    • Job APIを実行する(クエリ実行など)は、API実行後、Jobが完了するまで、アプリ側で状態をPollingする必要がある。
    • Tables APIなどは、すぐに結果がわかる。
      • (Stream Insertなどは待たなくても良い)

38 of 61

Google Cloud SQL編

39 of 61

Cloud SQLのAgenda

  • Cloud SQLってどんなもの?
  • Cloud SQLの使い方

40 of 61

Cloud SQLとは

  • Googleのクラウド環境で動くMySQL

mysql> select version();

+-----------+

| version() |

+-----------+

| 5.5.38 |

+-----------+

1 row in set (0.06 sec)

41 of 61

Cloud SQLとは

  • スケールしません。(instanceは1つ)
  • が、どこからでも接続できるようになる
    • バージョンアップ、メンテナンスコストの削減
  • Read Replica機能も提供(beta

42 of 61

基本、課金前提です

43 of 61

無料で使ってみたい方は

44 of 61

MySQL 5.5.38を

インストール

45 of 61

終了

46 of 61

というわけには

いかないので

47 of 61

instanceを作る

  • Developer Console
    • メニュー:Storage→Cloud SQL
    • Create an Instanceボタンをクリック

48 of 61

instanceを作る

  • 必要事項を入力してSaveボタンを押す。

49 of 61

instanceを作る

  • Statusが”Runnable”になるのを待つ。

  • 注意点
    • 同じ名前を使うことはできない。
    • 一度削除した後でもダメ(?)
      • 試しに夜に作って、消して、次の日の朝作るのはできなかった。

50 of 61

instanceの設定

  • Cloud SQLのIPアドレスをリクエスト
  • rootユーザのパスワードを設定
    • パス無しは接続できない

51 of 61

SSLの設定

  • リモートへの通信なので…。
    • SSLが使えるように設定する。

52 of 61

SSLの設定

  • 認証用のファイルをDownload
    • 適当なディレクトリに置いておく。

53 of 61

グローバルIPアドレスを登録

  • 自分のIPアドレスを登録しておく。
    • 認証された所からのみアクセス可能

54 of 61

接続

  • mysql -uroot -p -h [Cloud SQLのIP] --ssl_ca=server-ca.pem --ssl_cert=client-cert.pem --ssl_key=client-key.pem

55 of 61

ここまでの事を

デモします

56 of 61

まとめ

  • BigQueryは大量のデータを処理したい時に使う。
    • 1GBを超えるログをローカルでgrepするのと、5秒程度でわかりやすいSQLを叩いてじっくり見るのとどちらが良いですか?
      • 金がかかっても1ヶ月数十円。

57 of 61

まとめ

  • Cloud SQLは課金前提
    • サーバのメンテナンス不要
    • どこからでも接続できる。
    • 自社DBサーバをCloud SQLに移行すれば、ローカルでもリモートでもデータが参照できるようになる

58 of 61

まとめ

  • 恐らく、「ガチの運用」を知りたいかもしれないが、それをしている人は中国地方には誰も居ないと思われる。
  • 勇気を持って、導入をしてください。
    • 「課金死した」という事例は聞かないので99%大丈夫です

59 of 61

まとめ

  • 導入するための手助けはできます。
  • 導入した後の手助けもできます。
  • 導入したら、GDG中国へのフィードバックをお願いします。
    • これがないと、コミュニティ育たないので…。

60 of 61

まとめ

  • 次回のGDG中国のイベントは
    • 12/6(土)岡山県立図書館
    • http://goo.gl/vknogT

61 of 61

ご清聴ありがとうございました。