BigQueryとは
Googleが提供しているビッグデータ解析サービスのことで、
最大の特徴は高速で低価格ということです。
カラム型データストア、ツリーアーキテクチャの仕組みでクエリを並列処理しているため、
この高速処理を実現することができています。
BigQueryの概念は下記のようになっています。
データセットとはリレーショナルデータベースにおけるデータベースのようなもので、
ユーザーはまずデータセットを作成する必要があります。
また、ジョブは非同期で実行されます。
プロジェクト
∟データセット
| ∟テーブル
| ∟テーブル
|
∟ジョブ
∟クエリ
∟インポート
∟エクスポート
∟コピー
参考
やってみたこと
サンプルデータでクエリ実行
プロジェクト作成後にGCPメニューからBigQueryを選択します。
左側に表示されている一覧にbigquery-public-data:samples
というGoogleが公開しているデータセットがあるので、
これを選択します。
テーブル一覧からwikipedia
を選択し、Query Table
ボタンをクリックします。
テキストエリアにクエリを入力してRUN QUERY
ボタンをクリックします。
デフォルトで既にSELECT文が書いてあるので、count(*)
を追記するだけで大丈夫です。
結果が表示されました。
データセットの作成
先ほどは用意されているサンプルデータを使いましたが、
今度は自分でデータセットから作成してみます。
プロジェクト名の横にある矢印をクリックし、Create new dataset
を選択します。
データセットIDを入力し、ロケーションを選択します。
データセットIDはプロジェクト内でユニークな名前にする必要があり、半角英数字とアンダースコアを使うことができます。
ロケーションはUSとEUから選択することができ、選択しないとデフォルトでUSになります。
作成するとデータセットが表示されるようになります。
テーブルの作成
作成したデータセットの横にある矢印をクリックし、Create new table
を選択します。
今回は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ファイルを選択し、テーブル名を入力します。
列を作成します。名前やタイプを入力してAdd Field
ボタンをクリックして列を作成します。
オプションも設定できますが、今回は特に設定していません。Create Table
ボタンをクリックします。
テーブルが作成され、左側の一覧に表示されます。
クエリの実行
作成したテーブル名をクリックすると、列名等が表示されます。Query Table
ボタンをクリックします。
テキストエリアにクエリを入力し、RUN QUERY
ボタンをクリックします。
結果が表示されました。
コマンドラインでの操作
まずGoogle Cloud SDKのインストールをします。
インストール方法については下記の記事に書いてあります。
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
やってみた所感
設定などが大変なのかと思っていましたが、
プロジェクトを作成するだけでクエリを実行でき、想像以上に簡単に試してみることができました。
また、コマンドラインからの操作も非常に簡単でした。
今回は少ないデータでしか試していませんが、高速にできるということで今度速度を測ってみたいと思っています。