embulk-plugin-input-randomを作った

データベースを使って何かする際に、ダミーデータが超大量に欲しくなることがあるのでembulkのinput-pluginを作ってみた。

githubのリンク



何もない環境からなら

$ wget https://bintray.com/artifact/download/embulk/maven/embulk-0.2.1.jar -O embulk.jar

でembulk本体のが降ってくるのでそれを使って

$ java -jar embulk.jar gem install embulk-plugin-input-random

とすればプラグインが降ってくる。

exec: {}
in:
  type: random
  rows: 100
  schema:
    id: primary_key
    name: string
    score: integer
out:
  type: stdout

こんな感じのconfig.ymlを書いて

$ java -jar embulk.jar preview

と打てば

Random generation started.
Random generator input thread 0...
+---------+---------------------------------------------+------------+
| id:long |                                 name:string | score:long |
+---------+---------------------------------------------+------------+
|       0 | 9zfeb1fG7Ha3xxjA_UBUY3QdR1R3ltKYjADjYCthSVc |      6,180 |
|       1 | Ry68YnNi9mQQ-9EEtdftd9R21Z78dMZBDqc0IhNgI_M |      1,914 |
|       2 | DGZUeG961dILfRLx-sdcO6AJIvS6ulAj0qvffdR_uNo |      3,316 |
|       3 | spIhxVLfvd1tjDnbJZ2-nsITY8kZnL6mjpaDJ2tBf_M |      5,319 |
|       4 | ZwuViDwHONHCX47bv-tN7m48mdcr-G4d_laWBXscAUA |      5,767 |
|       5 | QM3H4QUvFSrqRAEUjbHRxnEGgSVUtfpMqh7scp-aiZk |        628 |
|       6 | oHzeKtNeULRxTn2_5SPWapSTPxTS6bTCPGZBTBKY_qo |      7,244 |
....

とこんな感じの物が画面に出てくる。
出力先を適当に書き換えてプラグインを用意すれば任意のデータベースにぶっこむ事ができる。

使い方としては以上なんだけど、これから作ろうと思っている機能についてもちょっと書く。
コンフィグの書き方として以下のような書き方ができるようにしていきたいという妄想。

in:
  type: random
  schema:
    - key: phone
      type:
        - japan-phone-number # 日本の電話番号っぽいものを生成する
    - key: name
      type:
        - japanese-human-name  # 日本人っぽい名前を生成する
        - english-human-name  # 英語圏っぽい名前を生成する
    - key: place
      type:
        - japan-prefecture  # 日本の都道府県をランダムに選ぶ
    - key: score
      type:
        random:  # 50から200までの一様分布の乱数を生成
          min: 50
          max: 200

こういう風に書いて

+---------------+-------------------+--------------+------------+
|  phone:string |       name:string | place:string | score:long |
+---------------+-------------------+--------------+------------+
|  03-1111-1111 |         佐藤 裕太 |       東京都 |        123 |
| 052-1234-5678 |         鈴木 健二 |       東京都 |         98 | 
| 090-2345-6789 | Michael Johonston |     神奈川県 |        169 |
|  03-3456-7890 |         井上 裕子 |       千葉県 |        112 |

こんな感じの物がランダム生成(全部完全に適当にランダムなので一切気にしないで)できるようになるといいかなと思っていて、次の余暇のプログラミングの時にでも作る。