2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google BigQuery を試してみる

Last updated at Posted at 2015-12-09

ビッグデータ。どのような技術で対応するかは悩ましいところです。

各種術一長一短ありますが、

  • データをクラウドに置いてよい
  • 原則参照系※

ということであれば、黙ってBigQueryを使えばいいと思います。

※BigQueryもStreaming Insertsを使えば挿入可能

なぜなら、

  • 速い
  • 設定が簡単

だからです。

データの準備

データの生成

Amazon EMRのImpalaのテスト用に容易されているジェネレーターが生成した1GBx3個のファイルを利用します。

ツールのダウンロード。

wget http://elasticmapreduce.s3.amazonaws.com/samples/impala/dbgen-1.0-jar-with-dependencies.jar

データの生成。

java -cp dbgen-1.0-jar-with-dependencies.jar DBGen -p ./ -b 1 -c 1 -t 1

上記の場合、books 1G,customer 1G, transanction 1Gの計3GBのデータができます。
実行にはJavaが必要です。

データのアップロード

作成したら、Google Cloud Storageにアップロードします。
ブラウザからアップロードでき、かつ、並列処理されます。便利。

bigquery

アップロードされるのを待ちます。

なんで、AzureはBLOBのアップロード機能をつけないのでしょうか。。。

BigQueryを使う

ではデータの準備ができましたので、BigQueryを使って行きます。

メニューからBigQueryを選択

BigQuery等を選択する左メニューは折りたたまれていますので、開きます。

bigquery

BigQueryを選択。

bigquery

datasetの作成

datasetを作成します。普通?で言うところのデータベース的なものです。

なおここではWebUIを使って作業しますが、CLIでも可能なので自動化ももちろん可能です。

bigquery

ここではhogedbという名前にします。

bigquery

Tableの作成

datasetが作成されたら、次にdataset内にTableを作成します。

  • books
  • customers
  • transactions

の3つを作成していきます。
datasetの右にある小さなプルダウンからcreate Tableを選択します。

books

bigquery

Table名を設定。ここではbooksとします。

bigquery

データ形式とデータの場所を選びます。
ローカルからもアップできるようです。便利。ここではCloud Storageを選択。

gs://<バケット名>/保存PATH

とシンプルでいいですね。
なお、データは「CSV」となっていますが、デリミタは後ほど選択できるようです。今回のデータはデリミタが|なので、変換するの大変・・・と思いましたが取り越し苦労でした。

bigquery

スキーマを設定します。先にデータを読み込んでプレビューしながれできれば・・・と思いますが、しかたありません。
1つうまくいかなかったことは、今回のデータには2015-12-01といったDate型が含まれていますが、唯一時間計型として容易されているTimestamp型はYYYY-MM-DD HH:MM:SSの形式じゃないと受け入れてくれません(自動的にHH:MM:SSを00:00:00とはしてくれません)。

おそらく、入力前に整形するかUDFなどを作成して対応するかのどちらかになるかと。

今回は日付はクエリで利用していないので、とりあえすStringとして取り込みます。

bigquery

デリミタやスキップする行数等を選びます。ここではスキップ等の必要はないのでデリミタだけPipeに変更します。

bigquery

customers

同様にcustomersテーブルを作成していきます。

bigquery

形式とデータの場所を指定。

bigquery

スキーマを設定。

bigquery

デリミタ等を設定。

bigquery

transactions

最後にtransactions。

bigquery

AzureのSQL Data Warehouseがtransactionsというファイル名を受け入れなかったため、transactionzというファイル名前になっていますが、BigQueryは別に関係ありません。

bigquery

スキーマを設定。

bigquery

各データが大きい場合は、並列ロードされるようです。

bigquery

取り込んだデータのサマリを見ることができます。

bigquery

クエリもUIで行うことができます。

bigquery

クエリの実行

count(単一テーブル)

クエリ

select count(*) from hogedb.books;

結果

他のDBの参考値も。SDWとはAzure SQL Data Warehouseの略。

DB Time(sec) Memo
local MySQL 10.5 noindex
SDW 100DWU 2.0 nocache
SDW 400DWU 1.0 nocache
SDW 2000DWU 1.0 nocache
BigQuery 0.9 nocache

検索(単一テーブル)

クエリ

select * from hogedb.books where isbn='2-90323-440-7';

結果

DB Time(sec) Memo
local MySQL 16.2 noindex
SDW 100DWU 4.0 nocache
SDW 400DWU 1.0 nocache
SDW 2000DWU 1.0 nocache
BigQuery 0.7 nocache

group by(単一テーブル)

クエリ

select category,count(*) from hogedb.books group by category;

結果

DB Time(sec) Memo
local MySQL 36.8 noindex
SDW 100DWU 5.0 nocache
SDW 400DWU 1.0 nocache
SDW 2000DWU 1.0 nocache
BigQuery 1.3 nocache

join(3つ結合)

クエリ

select
	hogedb.transactions.id,
	hogedb.books.isbn,
	hogedb.books.category,
	hogedb.books.price,
	hogedb.transactions.quantity,
	hogedb.customers.id,
	hogedb.customers.name
 from hogedb.transactions 
 left join each hogedb.books on hogedb.transactions.book_id = hogedb.books.id
 left join each hogedb.customers on hogedb.transactions.customer_id = hogedb.customers.id
 limit 10

結果

DB Time(sec) Memo
local MySQL 4:21.0 noindex
SDW 100DWU 1:29.0 nocache
SDW 400DWU 35.0 nocache
SDW 2000DWU 42.0 nocache
BigQuery 4.6 nocache

join + group by(3つ結合)

クエリ

select
	hogedb.customers.name,
	sum(hogedb.books.price) as sum
 from hogedb.transactions
 left join each hogedb.books on hogedb.transactions.book_id = hogedb.books.id
 left join each hogedb.customers on hogedb.transactions.customer_id = hogedb.customers.id
 group by hogedb.customers.name
 limit 10;

結果

DB Time(sec) Memo
local MySQL timeout noindex
SDW 100DWU 2:52.0 nocache
SDW 400DWU 48.0 nocache
SDW 2000DWU 1:10.0 nocache
BigQuery 8.3 nocache
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?