DACエンジニアブログ:アドテクゑびす界

DACのエンジニアやマーケター、アナリストが執筆するアドテクの技術系ブログです。

Google BigQuery / Tableauを使ってみた

TableauからGoogle BigQueryへ接続してみました。 弊社で利用しているTreasureDataからデータ出力してBigQueryへロード、Tableauから接続まで実際に行った手順について記載します。

TreasureDataからAmazonS3へデータ出力

まず、データが蓄積されているTreasureDataからAmazonS3へファイル出力します。 やり方は簡単で、コンソール上の"Result Export"から"AWS S3/Riak CS"を選択して、APIキーや出力先のディレクトリを選択するだけです。 Compressionオプションで"gz"を指定したのですが、これが仇になるとは。。。詳細は後述します。 (GoogleCloudStorageへ直接出力できたら嬉しいな、なんて思いつつ)

AmazonS3からGoogleCloudStorageへデータ転送

AmazonS3からGoogleCloudStorageへのデータ転送はgsutilを使います。

gsutilのインストール

[code] wget https://storage.googleapis.com/pub/gsutil.tar.gz tar xvzf gsutil.tar.gz cd ./gsutil ./gsutil config [/code]

すると認証用のURLが表示されるので、アクセスして認証コードを入れるだけです。簡単です。

configファイルの編集

インストール設定が完了すると、.botoファイルが生成されます。 AmazonS3から転送を行うためのAPIキーとシークレットキーを設定する箇所があるので設定します。

[code]

aws_access_key_id = <your aws access key ID>

aws_secret_access_key = <your aws secret access key>

[/code]

あとは以下のような感じで、S3からCloudStorageへの転送ができます。

[code] gsutil -m rsync -r s3://(bucket)/(path)/ gs://(bucket)/(path)/ [/code]

BigQueryへのロード

bqコマンドを利用するので、GoogleCloudSDKをインストールします。 インストール方法についてはhttps://cloud.google.com/sdk/に書いてあります。 ※コンソールからでもロードはできます。

ファイルについてはtsvで出力したので、以下のコマンドでロードします。

[code] bq load --source_format=CSV --field_delimiter="\t" (Dataset).(Table) gs://(bucket)/(path)/xxxxxx.gz schema.json [/code]

フォーマットとしてCSV、tsvファイルなのでデリミタとしてタブ、ロードするファイルのCloudStorageのパス、テーブルスキーマを設定しているjsonを指定します。

loadコマンドのオプションについてはここに詳細が記載されています。

実に簡単だなーと思ったら、ここでつまずきました。ロード失敗。 よくよく調べてみると、CSVフォーマットで圧縮ファイルの場合4GBが上限。 ちゃんと書いてありましたね。 https://cloud.google.com/bigquery/loading-data-into-bigquery#quota

かなり馬鹿っぽいんですが、再度ダウンロード、解凍、アップロードしなおしてなんとかロード成功。

今回ロードするファイルがいくつかあり、4GBを超えるものとそうなでないものがあったので、圧縮と非圧縮ファイルのロードのパフォーマンスを比べてみました。 結果は以下のとおりです。

ファイル 圧縮 サイズ サイズ(非圧縮) ロード時間(秒) MB/sec
001 6.25GB 26.76GB 259 105.8
002 6.25GB 26.75GB 249 110.0
003 6.25GB 26.78GB 249 110.1
004 6.25GB 26.78GB 250 109.6
005 ◯(gz) 68.51MB 294MB 35 8.4
006 ◯(gz) 145.21MB 622MB 87 7.1

圧縮と非圧縮でファイルサイズが全然違うので、これだけではなんともいえないですが、 これだけ見ると、非圧縮のほうが10倍くらい速いですね。

BigQueryを使ってみる

本当にデータがロードされたのかコンソール上からクエリを投げて確認してみます。 とりあえず、カウント。 bq1 約3億2千万レコードがロードできました。1.2秒で出力されました。

Tableauから接続

やっとここまで来ました。Tableau経由で接続してみたいと思います。

  • Tableauのデータ接続から"Google BigQuery"を選択します。
  • 認証画面が出るので、GCPが利用できるGoogleアカウントのID/パスワードを入力します。
  • プロジェクト>データセットを選択するとテーブル一覧が表示されるので選択します。

あとは他のデータソースと同じ形でいけます。 今回、BigQueryにはAudienceOneのテストデータを入れました。 なので、こんな感じでユーザの分析ができます。3億レコード入ってますがサクサクできました。

bq2

TableauからはRedshiftに接続して利用することが多かったのですが、BigQueryもアリですね。 とはいえ、レコード数が多くなるとクエリ単位に課金されてしまうので、若干コストが心配ですが。