BigQueryを使ってみました

BigQueryとは



Googleが提供しているビッグデータ解析サービスのことで、
最大の特徴は高速で低価格ということです。
カラム型データストア、ツリーアーキテクチャの仕組みでクエリを並列処理しているため、
この高速処理を実現することができています。





BigQueryの概念は下記のようになっています。

データセットとはリレーショナルデータベースにおけるデータベースのようなもので、
ユーザーはまずデータセットを作成する必要があります。
また、ジョブは非同期で実行されます。




プロジェクト
 ∟データセット
 | ∟テーブル
 | ∟テーブル
 |
 ∟ジョブ
  ∟クエリ
  ∟インポート
  ∟エクスポート
  ∟コピー






参考



cloud.google.com



はじめの一歩が踏み出せない人のためのBigQuery入門|apps-gcp.com|G Suite(旧:Google Apps) やGoogle Cloud Platform サービスについて紹介します






やってみたこと










サンプルデータでクエリ実行



プロジェクト作成後にGCPメニューからBigQueryを選択します。

左側に表示されている一覧にbigquery-public-data:samplesというGoogleが公開しているデータセットがあるので、
これを選択します。



f:id:mtomitomi:20180228123943p:plain





テーブル一覧からwikipediaを選択し、Query Tableボタンをクリックします。



f:id:mtomitomi:20180228124350p:plain





テキストエリアにクエリを入力してRUN QUERYボタンをクリックします。

デフォルトで既にSELECT文が書いてあるので、count(*)を追記するだけで大丈夫です。



f:id:mtomitomi:20180228124615p:plain





結果が表示されました。



f:id:mtomitomi:20180228124902p:plain







データセットの作成



先ほどは用意されているサンプルデータを使いましたが、
今度は自分でデータセットから作成してみます。
プロジェクト名の横にある矢印をクリックし、Create new datasetを選択します。



f:id:mtomitomi:20180228124933p:plain





データセットIDを入力し、ロケーションを選択します。

データセットIDはプロジェクト内でユニークな名前にする必要があり、半角英数字とアンダースコアを使うことができます。
ロケーションはUSとEUから選択することができ、選択しないとデフォルトでUSになります。



f:id:mtomitomi:20180228125223p:plain





作成するとデータセットが表示されるようになります。



f:id:mtomitomi:20180228125858p:plain







テーブルの作成



作成したデータセットの横にある矢印をクリックし、Create new tableを選択します。



f:id:mtomitomi:20180228130001p:plain





今回はCSVファイルをインポートしてテーブルデータとして登録したいので、
下記のインポート用CSVファイルを作成して任意の場所に保存しておきます。



family.csv



namihei,isono,54
fune,isono,52
wakame,isono,9
katsuo,isono,11
sazae,isono,24
masuo,isono,28
tarao,isono,3
tama,isono,9





Choose fileボタンをクリックしてCSVファイルを選択し、テーブル名を入力します。



f:id:mtomitomi:20180228130615p:plain





列を作成します。名前やタイプを入力してAdd Fieldボタンをクリックして列を作成します。



f:id:mtomitomi:20180228130720p:plain





オプションも設定できますが、今回は特に設定していません。
Create Tableボタンをクリックします。



f:id:mtomitomi:20180228130910p:plain





テーブルが作成され、左側の一覧に表示されます。



f:id:mtomitomi:20180228131003p:plain







クエリの実行



作成したテーブル名をクリックすると、列名等が表示されます。

Query Tableボタンをクリックします。



f:id:mtomitomi:20180228131119p:plain





テキストエリアにクエリを入力し、RUN QUERYボタンをクリックします。



f:id:mtomitomi:20180228131245p:plain





結果が表示されました。



f:id:mtomitomi:20180228131419p:plain







コマンドラインでの操作



まずGoogle Cloud SDKのインストールをします。
インストール方法については下記の記事に書いてあります。



mtomitomi.hatenablog.com





BigQueryではbqコマンドを使用します。

下記コマンドを入力するとデータセット一覧を確認することができます。
途中でプロジェクトを聞かれるので、対象のプロジェクトを数字で入力します。




$ bq ls


List of projects:
# projectId friendlyName
--- --------------------- ------------------
1 gcp-test-XXXXXX gcp-test
2 pure-polymer-XXXXXX My First Project
Found multiple projects. Please enter a selection for
which should be the default, or leave blank to not
set a default.

Enter a selection (1 - 2): 1





データセット一覧が表示されました。




BigQuery configuration complete! Type "bq" to get started.

datasetId
---------------
first_dataset





クエリを実行してみます。
bq query "{クエリの文字列}"で実行できます。




$ bq query "select * from first_dataset.family where age > 20"

Waiting on bqjob_r19311ce8b09c51f0_00000161da60f1e4_1 ... (0s) Current status: DONE
+------------+-----------+-----+
| first_name | last_name | age |
+------------+-----------+-----+
| sazae | isono | 24 |
| masuo | isono | 28 |
| fune | isono | 52 |
| namihei | isono | 54 |
+------------+-----------+-----+





テーブル詳細を確認してみます。

bq show {データセット名.テーブル名}で表示させることができます。




$ bq show first_dataset.family

Last modified Schema Total Rows Total Bytes Expiration Time Partitioning Labels kmsKeyName
----------------- ----------------------- ------------ ------------- ------------ ------------------- -------- ------------
28 Feb 11:48:24 |- first_name: string 8 178
|- last_name: string
|- age: integer





データセットのテーブルを確認してみます。

bq show {テーブル名}で確認することができます。
プロジェクトを指定する場合はbq show {プロジェクト名:テーブル名}です。




$ bq show first_dataset

Dataset gcp-test-XXXXXX:first_dataset

Last modified ACLs Labels
----------------- ----------------------------- --------
28 Feb 11:32:47 Owners:
projectOwners,
XXXXXXXXX@gmail.com
Writers:
projectWriters
Readers:
projectReaders







やってみた所感



設定などが大変なのかと思っていましたが、
プロジェクトを作成するだけでクエリを実行でき、想像以上に簡単に試してみることができました。
また、コマンドラインからの操作も非常に簡単でした。

今回は少ないデータでしか試していませんが、高速にできるということで今度速度を測ってみたいと思っています。