Embulk の input および filter プラグインでの「型」は、その場面を「抜け出す」ときの型を指定する

追記

追試してみたところ、本記事の内容はちょこちょこ間違っていると思われますので参考程度にご覧ください。

具体例

標題が分かりにくいので、具体例を示します。「その場面」とか、「抜け出す」とか、独自用語を使ってしまっていますが、そこは察してください。

CSV の input プラグイン

組み込みプラグインである CSV の input プラグインの場合を考えます。まず、input する CSV のデータが以下のようなものであると仮定します。

id,first_name,age,gender
1,kenji,23,male
2,takako,21,female
3,taro,22.0,male
4,tomoyo,24.0,female

これを Embulk に input する場合の設定ファイル(一部)は、以下のように書かないとエラーになります*1

    columns:
    - {name: id, type: long}
    - {name: first_name, type: string}
    - {name: age, type: string}
    - {name: gender, type: string}

ポイントは、name: agetypetype: stringとしている箇所です。入力元の CSV ファイルにおいて、first_nametarotomoyoの二人については、age22.024.0のように小数点込みの数字になっています*2

この場合、人情としては - {name: age, type: long}としたいところですが、それではエラーになります*3inputから出て行くときのデータの「型」に合致していないとダメです。「指定した『型』に変換するように設定する箇所」ではないということです。

filter プラグイン(ここでは embulk-filter-script_ruby を用います)

filter プラグインの場合も input プラグインの場合と同様です。そこを抜けるときにどのような「型」を持っているかを指定します。出て行く際に指定した「型」に変換してくれるという設定項目ではありません

実運用の例

上記のような「型」の指定方法なので、運用によっては「型」を厳密に書かなくていい箇所が生まれます。

どういうことかというと、例えば、「CSV input→filter→output」という過程を経る場合、filter で出す際にまとめて型を指定すればいいので、CSV input の時点での「型」は全て string にしてしまえるということです。

CSVは単なるテキストファイルですので、実装としてもその方が明快だと思います。

もしかして

この事実にハマっていたのって私だけでしょうか……。

*1:いや、ここだけではエラーにならないかも

*2:それの是非は置いとくとして

*3:いや、ここだけではエラーにならないかも

Powered by はてなブログ