UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Embulk】jsonをインプットにしてMySQLに投入する

EmbulkでjsonをインプットとしてMySQLへアウトプットしたい

2年前にcsvをインプットにしたことがあるので、これを参考にjsonをインプットにする方法を調べる

uga-box.hatenablog.com

インプットとなるjsonファイルは1行1オブジェクトで配列ではない

{"id": 1, "name": "AAA"}
{"id": 2, "name": "BBB"}

このとき2年前のembulkバージョン(v0.9.12)のままだと1オブジェクトをJSON型1カラムを持つレコードとして登録された

+-----------------------+
|           record:json |
+-----------------------+
| {"id":1,"name":"AAA"} |
| {"id":2,"name":"BBB"} |
+-----------------------+

これをパースするには、バージョンをv0.9.16以上にする必要がある

ただ、いまのバージョンが古すぎてselfupdateというサブコマンドを実行してもアップデートされなかったので、最新のバイナリをダウンロードして上書きした

$ curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar"
$ source ~/.bashrc

バージョンを確認

$ embulk --version
embulk 0.9.23

v0.9.16以上なのでjsonをパースして各カラムに登録できるようになった

in:
  type: file
  path_prefix: ./input.json
  parser:
    type: json
    charset: UTF-8
    newline: LF
    root: /propertyId
    columns:
      - {name: id, type: long}
      - {name: name, type: string}
out:
  type: mysql
  host: localhost
  user: uggds
  password: password
  database: test_db
  table: test
  mode: replace
+---------+-------------+
| id:long | name:string |
+---------+-------------+
|       1 |         AAA |
|       2 |         BBB |
+---------+-------------+

他参考

https://qiita.com/kamatama_41/items/ebb2ae0548e2a4863397