mysqlのデータをembulkでBigQueryへ入れredashで確認する

はじめに

データ解析するにあたり、BigQueryを使いたい事がある。mysqlからデータを取得するところをembulkを使う。embulkのインストール方法から簡単な使い方までまとめた。

embulkのインストール

embulkはJavaで作られており、一からinstallしようとすると、割と面倒。今回はDockerを使うこととする。

BigQueryの設定

APIs & Servicesでcredentialを作成する。

jsonファイルダウンロードできるので、適宜保存する。

Dockerfileを作成

GCPにプロジェクトを作り、bigqueryに権限を付与。APIで操作できるようjsonファイルを取得する。

FROM java:7
MAINTAINER sumito.tsukada "tsukada@sumito.jp"

ENV EMBULK_VERSION 0.8.39

RUN curl -L https://bintray.com/artifact/download/embulk/maven/embulk-${EMBULK_VERSION}.jar -o /opt/embulk.jar
RUN java -jar /opt/embulk.jar gem install embulk-input-mysql
RUN java -jar /opt/embulk.jar gem install embulk-output-bigquery

WORKDIR /work
ENTRYPOINT ["java", "-jar", "/opt/embulk.jar"]
CMD ["--help"]

build

# docker build -t tsukada/embulk .
Sending build context to Docker daemon  2.048kB
Step 1/9 : FROM java:7
 ---> 5dc48a6b75af
Step 2/9 : MAINTAINER sumito.tsukada "tsukada@sumito.jp"
 ---> Using cache
 ---> bc78ed50d614
Step 3/9 : ENV EMBULK_VERSION 0.8.39
 ---> Using cache
 ---> 266476a95a55
Step 4/9 : RUN curl -L https://bintray.com/artifact/download/embulk/maven/embulk-${EMBULK_VERSION}.jar -o /opt/embulk.jar
 ---> Using cache
 ---> b21e71d6ce44
Step 5/9 : RUN java -jar /opt/embulk.jar gem install embulk-input-mysql
 ---> Using cache
 ---> 2fb224b24c49
Step 6/9 : RUN java -jar /opt/embulk.jar gem install embulk-output-bigquery
 ---> Running in b27f12583137
2018-09-18 02:50:32.526 +0000: Embulk v0.8.39

********************************** INFORMATION **********************************
  Join us! Embulk-announce mailing list is up for IMPORTANT annoucement such as
    compatibility-breaking changes and key feature updates.
  https://groups.google.com/forum/#!forum/embulk-announce
*********************************************************************************
Gem plugin path is: /root/.embulk/jruby/2.3.0

Successfully installed uber-0.1.0
Successfully installed declarative-0.0.10
Successfully installed declarative-option-0.1.0
Successfully installed representable-3.0.4
Successfully installed retriable-3.1.2
Successfully installed public_suffix-3.0.3
Successfully installed addressable-2.5.2
Successfully installed mime-types-data-3.2018.0812
Successfully installed mime-types-3.2.2
Successfully installed multipart-post-2.0.0
Successfully installed faraday-0.15.2
Successfully installed multi_json-1.13.1
Successfully installed jwt-2.1.0
Successfully installed signet-0.9.2
Successfully installed memoist-0.16.0
Successfully installed os-1.0.0
Successfully installed googleauth-0.6.6
Successfully installed httpclient-2.8.3
Successfully installed google-api-client-0.24.0
Successfully installed thread_safe-0.3.6-java
Successfully installed tzinfo-1.2.5
Successfully installed time_with_zone-0.3.1
Successfully installed embulk-output-bigquery-0.4.9
23 gems installed
 ---> 74e55d0084d6
Removing intermediate container b27f12583137
Step 7/9 : WORKDIR /work
 ---> 19d9c56bf738
Removing intermediate container c73ef21e7b6c
Step 8/9 : ENTRYPOINT java -jar /opt/embulk.jar
 ---> Running in 4bca2f2ed68e
 ---> b4458584af6f
Removing intermediate container 4bca2f2ed68e
Step 9/9 : CMD --help
 ---> Running in 7fdbd68d5021
 ---> 0bfdab6b8d24
Removing intermediate container 7fdbd68d5021
Successfully built 0bfdab6b8d24
Successfully tagged tsukada/embulk:latest

embulkの設定

今回はmysqlからデータを抜き、BigQueryに入れるとする。

in:
  type: mysql
  user: redash
  password: passwd
  database: sample
  host: 127.0.0.1
  query: "select date, user from sampletable"
out:
  type: bigquery
  auth_method: json_key
  json_keyfile: tsukada-bigquery.json
  path_prefix: /tmp/
  file_ext: .csv.gz
  source_format: CSV
  project: 12345679
  dataset: table123
  auto_create_table: true
  table: user_data
  formatter: {type: csv, charset: UTF-8, delimiter: ',', header_line: false}
  encoders:
  - {type: gzip}

実行

docker run -t -v ${PWD}:/work tsukada/embulk run sample.yml

以下のようい表示されればOK

[INFO] (main): Committed.

BigQueryで確認

データが入ったという事がわかった。
また、

#standardSQL

と書いてあるが、これはコメントではなく、BigQueryが判断する重要な宣言になるので削除するとうまく動かないので注意。

 

redashでBigQueryに接続

先ほど使ったjsonファイルと接続先のプロジェクトIDを入力すると、redashからbigqueryへ接続する事ができる。