はじめに
データ解析するにあたり、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へ接続する事ができる。