📘

Embulk v0.11.2でMySQLからBigQueryにデータ送信

2024/02/28に公開

参考:https://github.com/bamboo-house/embulk-bigquery-test

参考記事

https://qiita.com/fjunya/items/91305f20d6891beadb16
https://qiita.com/neo_fukafukafukka/items/fb6d7d2fc59289e67560

ディレクトリ構成

% tree
.
├── conf
│   ├── embulk_guess_departments.yml
│   └── embulk_guess_employees.yml
├── docker-compose.yml
├── embulk
│   ├── Dockerfile
│   ├── embulk.properties
│   └── service_account_iam_key.json
└── mysql
    ├── Dockerfile
    ├── ddl
    │   ├── init.sql
    │   ├── insert_departments.sql
    │   └── insert_employee.sql
    └── my.cnf
  • mysql配下、conf配下、service_account_iam_keyは参考記事と一緒です。
  • conf配下のymlのhostはmysql_latestにしてください。

docker-compose.yml

version: '3'

services:
  dbserver:
    build: ./mysql
    container_name: mysql_latest
    platform: linux/amd64
    environment:
      MYSQL_DATABASE: training
      MYSQL_USER: fuka_user
      MYSQL_PASSWORD: fuka_pass
      MYSQL_ROOT_PASSWORD: root_pass
      MYSQL_PORT: 3306
    ports:
      - 3306:3306
    tty: true
  embulk:
    build: ./embulk
    container_name: embulk_lastet
    volumes:
      - ./conf:/root/conf
    tty: true

networks:
  etl_networks:

embulk/Dockerfile

FROM openjdk:8

# パッケージ管理システムのアップデート
RUN apt-get -y update && apt-get -y upgrade

# localeの設定
RUN apt-get -y install locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

# timezone (Asia/Tokyo)の設定
ENV TZ JST-9

# vim以外にも使いそうなもの一応インストール
RUN apt-get install -y vim git zip unzip less wget curl

# MySQLコンテナ接続確認するときのためにMySQL-clientをインストール
RUN apt-get install -y default-mysql-client

# jrubyをインストール
RUN curl --create-dirs -o "./jruby-complete-9.3.14.0.jar" -L "https://repo1.maven.org/maven2/org/jruby/jruby-complete/9.3.14.0/jruby-complete-9.3.14.0.jar"
RUN chmod +x ./jruby-complete-9.3.14.0.jar

# Embulkをダウンロードして実行可能にする
RUN curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-0.11.2.jar"
RUN chmod +x ~/.embulk/bin/embulk
RUN echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc

# google cloud sdkをインストール
RUN apt-get install -y python3
RUN curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-465.0.0-linux-x86_64.tar.gz
RUN tar -xf google-cloud-cli-465.0.0-linux-x86_64.tar.gz
RUN chmod +x ./google-cloud-sdk/bin/gcloud
RUN echo 'export PATH="/../google-cloud-sdk/bin:$PATH"' >> ~/.bashrc

RUN . ~/.bashrc

# embulk.propertiesとgoogle cloudサービスアカウントのキーをコピー
COPY ./embulk.properties ./root/.embulk/embulk.properties
COPY ./service_account_iam_key.json ./home/service_account_iam_key.json

# Embulk と同じバージョンを指定 (「embulk ~~」ではなく「java -jar ~~」でないと動かなかった)
RUN java -jar ~/.embulk/bin/embulk gem install embulk -v 0.11.2
RUN java -jar ~/.embulk/bin/embulk gem install msgpack

# # MySQL取得とBigQuery投入用のプラグインを入れておく
RUN java -jar ~/.embulk/bin/embulk gem install embulk-input-mysql
RUN java -jar ~/.embulk/bin/embulk gem install embulk-output-bigquery

embulk.properties

jruby=file:///jruby-complete-9.3.14.0.jar

実行

# Googleログイン
gcloud auth login

# departmentテーブルをbigqueryに注入
java -jar ~/.embulk/bin/embulk guess ~/conf/embulk_guess_departments.yml -o ~/conf/embulk_load_departments.yml
java -jar ~/.embulk/bin/embulk preview -G ~/conf/embulk_load_departments.yml
java -jar ~/.embulk/bin/embulk run ~/conf/embulk_load_departments.yml

# employeeテーブルをbigqueryに注入
java -jar ~/.embulk/bin/embulk guess ~/conf/embulk_guess_employees.yml -o ~/conf/embulk_load_employees.yml
java -jar ~/.embulk/bin/embulk preview -G ~/conf/embulk_load_employees.yml
java -jar ~/.embulk/bin/embulk run ~/conf/embulk_load_employees.yml

BigQueryの結果
o

Discussion