Kekeの日記

エンジニア、読書なんでも

Embulkを使ってMySQLのデータを並列処理で転送する

f:id:bobchan1915:20181005114932p:plain

本記事

本記事はFluntdのバッジ版にあたるEmbulkを使ってMySQLにあるデータを転送してみようと思います。

目次

Embulkについて

Embulkとは

まず、Embulkが何かを説明します。

Embulkとは、異なるデータソース、クラウド、ファイルストレージ間での転送を手助けするオープンソースなバルクデータローダーです。

f:id:bobchan1915:20181005125235p:plain

特徴

以下のような特徴があります。

  • 自動的に入力ファイルのフォーマットを推論してくれる
  • 大きなビッグデータを転送するために分散、並列化して実行できる
  • All-or-Nothingデータ転送制御
  • 停止して、再開できる
  • RubyのGemによってプラグインが公開されている

Install方法

以下のコマンドでインストールします。

$ curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar"
$ chmod +x ~/.embulk/bin/embulk
$ echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

Pluginのインストール方法

以下のようにしてプラグインをインストールします。

この例ではmysqlプラグインをインストールしています。

embulk gem install embulk-input-mysql

/var/root/.embulk/lib/gemsのディレクトリにgemはインストールされています。

ワークフロー

以下のようにワークフローは構成されています。

f:id:bobchan1915:20181005133838p:plain

設定方法

設定ファイル

以下のようにconfig.yamlを作成します。

in:
  type: mysql
  user: user
  password: pass
  database: db
  table: table
  host: hostname
  select: "*"

out:
  type: file
  path_prefix: sample_
  file_ext: csv
  formatter:
    type: csv
    timezone: Asia/Tokyo

以下のリポジトリで、何が設定項目としてあるのかが設定できます。

github.com

大事なのは(in || out).typeでプラグインをタイプを指定することくらいです。

あとはプラグイン次第なので、そのときそのとき対応するようになります。

embulk-input-mysql

以下のようにembulk-input-mysqlには主な設定項目があります。

  • query: クエリを書く
  • queryが設定されていなかったら
    • table: デーブル名を指定
    • select: 項目を,で区切って指定
    • where: 条件

以下は公式Exampleです。

in:
  type: mysql
  host: localhost
  user: myuser
  password: ""
  database: my_database
  table: my_table
  select: "col1, col2, col3"
  where: "col4 != 'a'"
  order_by: "col1 DESC"

mysql->csvを実行する

以下のコマンドで実行します。

embulk. run config.yaml

すると以下のようにsample_001.csvというものができています。

id,name,userId,amount,username,created_at,updated_at,desc
50,payment,ueauoeuiae,0,Kuku,2018-10-04 01:24:25.000000 +0000,2018-10-04 01:24:25.000000 +0000,テスト
51,payment,ueoaipeoie,1961,Popo,2018-10-04 01:27:24.000000 +0000,2018-10-04 01:27:24.000000 +0000,イトヨ
52,payment,eoueoiaeuia,50565,Popo,2018-10-04 01:28:37.000000 +0000,2018-10-04 01:28:37.000000 +0000,食洗機
53,payment,eoaieuieoie,13824,Popo,2018-10-04 01:28:56.000000 +0000,2018-10-04 01:28:56.000000 +0000,ホームベーカリー
54,payment,U44e80f652a7db5f23c1f7fd1b679371d,1470,Popo,2018-10-04 09:41:55.000000 +0000,2018-10-04 09:41:55.000000 +0000,まいばす

まとめ

この記事でおおまかなEmbulkの使い方を学ぶことができました。

特にGCPの無料枠をいろんなアカウントで使いまわしているため、無料枠が切れるとMySQLのデータを転送しないといけません。

Embulkを使うと簡単にできるので、もっと勉強して使いまわしたいと思います。