Embulk の embulk-input-random を用いてランダムなデータを作成する方法(CSVファイルへ書き出す)

embulk-input-random

kumagi さんによる Embulk のプラグインです。いわゆるダミーデータの作成に役立ちます。

使い方(YAML ファイルの準備)

使い方はとてもとても簡単です。以下のような YAML をまず書きましょう。ファイル名はrandom_data.ymlとします。

in:
  type: random
  rows: 10
  schema:
    # 型はこの5つしかない
    id: primary_key
    name: string
    score: integer
    rate: float
    created_at: date
out:
  type: stdout

使い方(preview して確認)

YAML が作られれば、あとは embulk コマンドをかましてやるだけです。まずはpreviewオプションで実行しましょう。以下のような出力結果になります。

$ embulk preview random_data.yml
2017-11-01 16:53:50.076 +0900: Embulk v0.8.31
2017-11-01 16:53:52.245 +0900 [INFO] (0001:preview): Loaded plugin embulk-input-random (0.0.2)
Random generation started.
Random generator input thread 0...
+---------+---------------------------------------------+------------+--------------------+-----------------------------------+
| id:long |                                 name:string | score:long |        rate:double |              created_at:timestamp |
+---------+---------------------------------------------+------------+--------------------+-----------------------------------+
|       0 | OwclBluPfkAvdmXJxROEobXmzPMqB5HLJERRCTX04m8 |        408 |  9681.222172700585 | 1970-04-02 08:01:42.173363634 UTC |
|       1 | EeeC4e3tCteuvwCYEl3__Hd1HAwKGvqEFagej5e7JWc |        349 |  7471.798180024201 | 1995-12-03 18:35:20.345740675 UTC |
|       2 | 6PKe5GTflGkNd7j33UkEQC_Qx1wd6hpPLjJB1K-aBAI |      1,627 | 1548.2911461463157 | 1977-09-04 06:59:52.403109163 UTC |
|       3 | AUpfuTu31jwExE8vjv-B1kHX3DstzpDYFNPojewqUHA |      3,991 |  4555.393417382074 | 2001-06-01 19:45:25.258410692 UTC |
|       4 | 1BUPw0bkWxXdNVeQyOV6nCVGmp_7LdhOV33arxc5-Us |      2,966 |  5929.493970725354 | 1993-09-23 08:34:58.201186418 UTC |
|       5 | OFD2kCVqeiASLcDmPtowgrTU4bo1tZK9zkeZ3fwGRnE |      3,684 | 5251.8119211079875 | 1984-12-15 21:55:44.520372331 UTC |
|       6 | EBQxCVJjb1yQLcbz1_ISByg-i5umajFlubOFkWypppw |      1,259 |  6916.227923039116 | 1973-09-02 14:15:03.875774949 UTC |
|       7 | TwBnRaD4nLyQT99EL5RnknRl5h31gR8oRWz0-e-gZZ8 |      2,022 |  9909.176099689157 | 2001-06-16 00:30:16.452547192 UTC |
|       8 | PaDOItkZ_S8rTEo10RwHGvdQ0jXuSOS6lgrhzJlRn0g |      5,439 |  9267.186037826135 | 1977-12-02 23:37:36.335263341 UTC |
|       9 | ErEH3SRUU_ozGvfZNbePCoaO1EQbbeS1cPxZ8R7evjU |        110 |   4409.92973928387 | 2010-04-21 04:48:03.777826300 UTC |
+---------+---------------------------------------------+------------+--------------------+-----------------------------------+

使い方(CSV に吐き出し)

previewでいい感じになりましたので、runで本番実行を行います。その際、CSVファイルに出力しましょう。random_data.ymloutにおけるtypeを、stdoutからfileに変更します。以下のような感じになるでしょうか。

(省略)
out:
  type: file
  path_prefix: random_data
  file_ext: csv
  formatter:
    type: csv
    header_line: true
    charset: UTF-8
    newline: LF

あとはembulk runすればよいだけです。

$ embulk run random_data.yml

これでCSVファイルが生成されました*1random_data000.00.csvを開いてみると以下のようになっており、CSVファイルとして出力されていることが分かります。

id,name,score,rate,created_at
0,6Dbs9K_UBQv4nQgXDYINzpG5THjbt_1HmQOPhBtNncc,2842,6862.609333245801,2003-12-25 14:38:17.519466 +0000
1,APq3z0cYcStu3dLnXl3jbhoIq2eyvo1Q4376KVtaSA4,2307,8905.81423668965,2000-11-25 05:32:48.572000 +0000
2,VPjGTwS88AAeykYQUcTekbiH6gJrwGJWwCfogT2J5As,9152,5281.37771506349,1974-07-25 02:52:04.670621 +0000
3,9sugggn0GAI5pZtN8BrwTZUkPis2y-8qd5_mx7e1XzA,6010,792.0590166868346,2014-02-18 07:35:18.137263 +0000
4,LkG8HR2-Nq7E-g4L7bcY1-54Bs5Sb3tAGXDjMnAYw4w,6201,1817.755597167694,1981-01-04 06:15:24.577443 +0000
5,X3P-glznz8yOaiO_xSOdnzCxyLkMYGo_f0JRKVRuNI4,9356,4091.8050228363677,1979-10-30 00:14:14.166580 +0000
6,1KuvB4jE2dxm1Q8m7TgCwnQLYE27dxTW0eoEjEocLX0,8597,1661.1748123363402,2015-09-26 14:28:20.433475 +0000
7,PFD6XHBVYYsFVQPFO6PKNZV0jmo3c4T_CpB51dREzQk,9846,1276.6595828142513,1994-10-17 02:23:37.230688 +0000
8,kewuobunpFufUnufAhcq8I8rxKRkYiMi9--rvXJWNiE,5991,5500.596087211661,1974-02-06 13:05:05.944546 +0000
9,_9mb-IhAwoVPl9x6yvzKBfughcbcW0ndiqX5VDt7hoM,6355,973.8925230727369,1973-01-04 01:53:54.936389 +0000

補足

大量のデータを扱うとき(embulk-input-randomにおいてrowsの数が大きいとき)はthreads: 8などとスレッド数をそれなりの値にしないと落ちるときがあるので注意です*2

*1:命名などの細かい設定は各自で詰めてみて下さい

*2:出力先によってはそれでも落ちます

Powered by はてなブログ