S-JIS[2015-08-09/2021-12-19] 変更履歴

Embulk ローカルファイルの出力

Embulkのローカルファイル書き込みのメモ。


概要

ローカルファイルはデフォルトで(追加プラグイン無しで)出力できる。

ファイルの形式はフォーマッターで指定する。
圧縮して出力したい場合はエンコーダーを指定する。


ローカルファイル出力で出力されるカラム(項目)は、入力データの全カラムになる。
カラム名も入力時に付けられたカラム名が使用される。

カラム名を変えたり、カラムの並び順を変えたり、出力するカラムを選択したりしたい場合は、フィルターを使う。


csvファイルの例

config.yml:

in:
  
out:
  type: file
  path_prefix: /tmp/example/result/store_info
  file_ext: csv
  formatter:
    type: csv
    charset: UTF-8
    delimiter: ','
    newline: CRLF
    quote: '"'
    escape: '\'

実行例

$ embulk run config.yml

$ ls /tmp/example/result/
store_info000.00.csv

$ cat /tmp/example/result/store_info000.00.csv
123,aaa
456,zzz
789,"a,b c"
890,"a\"b\"c"
999,

出力先のディレクトリーは実行前に作っておく必要がある。


オプション

オプション名 説明 ymlの記述例 デフォルト値
type  
  type: file
(必須)
path_prefix 出力するファイルのパスの先頭部分。
  path_prefix: /tmp/example/result/store_info
(必須)
file_ext ファイルの拡張子。
  file_ext: csv
(必須)
formatter ファイルの形式を定義する。
CSVフォーマッターのオプション
  formatter:
    type: csv
(必須)
encoders 圧縮して出力したい場合、その形式を指定する。
(gzipの場合、レベルは0(無圧縮)〜9。デフォルトは6)
  encoders:
  - {type: gzip, level: 6}
 

CSVフォーマッターオプション

csv(あるいはtsv)ファイル用のformatterのオプション。

オプション名 説明 ymlの記述例 デフォルト値
type  
    type: csv
(必須)
delimiter データの区切り文字。
    delimiter: ','
','
quote データを囲む文字。
どのデータを囲むかはquote_policyで指定する。
    quote: '"'
'"'
quote_policy データをquoteで囲むルール。
ALL 常に囲む。
MINIMAL データに区切り文字囲む文字や改行が含まれているとき。
NONE 常に囲まない。
    quote_policy: ALL
MINIMAL
escape quoteで囲むときに使われるエスケープ文字。
(デフォルト値がCSVパーサーのescapeとは違うので注意)
    escape: '\'
'"'
header_line trueの場合、カラム名をヘッダー行として出力する。
quote_policyをALLにしていると、カラム名もquoteで囲まれる)
    header_line: false
true
null_string nullを表す文字列。
データがnullだった場合、この文字列が出力される。
quote_policyをALLにしていても、この文字列はquoteで囲まれない)
    null_string: 'NULL'
(空文字列)
newline 行の区切り文字。CRLF, LF, CRのいずれか。
    newline: CRLF
CRLF
newline_in_field データ内に改行がある場合、それに使う改行コード。CRLF, LF, CRのいずれか。
    newline_in_field: LF
LF
charset ファイルのエンコーディング。
    charset: UTF-8
UTF-8
default_timezone timestamp項目のデフォルトのタイムゾーン。
column_optionsで、項目ごとにタイムゾーンを指定することも出来る)
内部ではUTCで保持されているが、このタイムゾーンとして出力する。
    default_timezone: 'Asia/Tokyo'
UTC
column_options timestamp項目に対して出力用のフォーマットを定義する。
カラム名: {オプション}」という形式。
オプション名 説明
format 日付書式。
'%Y-%m-%d %H:%M:%S'といった形式。
timezone タイムゾーン。
default_timezone
    column_options:
      time: {format: '%Y-%m-%d %H:%M:%S'}
      purchase: {format: '%Y%m%d'}
 

※出力するカラムを選択したい場合はフィルターを使う。


timestampのformatについて

timestamp型は、Embulk内部ではエポック秒(+ナノ秒)で保持されている。[2017-07-16]
CSVパーサープラグイン(入力ファイル)でtimestamp型のformatを指定した場合、そのformatは入力の文字列をパースしてtimestampへ変換する際に使われる。
(previewで表示すると、timestampの値はタイムゾーンUTCの日時として表示される)
CSVフォーマッタープラグイン(出力ファイル)では、column_optionsでformatを指定しないと、デフォルトの形式で出力される。

つまり、パーサーのformatは入力文字列のパースに使用され、フォーマッターのformatは出力用の文字列を生成するのに使用される。
パーサーのformatで指定した形式でファイルに出力されるわけではない。
(そもそも、入力がCSVファイルでない(RDBとかの)場合はtimestampであってもパーサーにformatを指定しない(必要ない)ことがある)


Asakusa Frameworkとの連携

Asakusa Frameworkで読み込める形式のCSVファイルを作るには、以下のようなオプションを指定すればよい。[2015-09-27]

in:
  〜
out:
  type: file
  path_prefix: /hadoop/hoge
  file_ext: csv
  formatter:
    type: csv
    header_line: false
    charset: UTF-8
    delimiter: ','
    newline: CRLF
    quote: '"'
    escape: '"'
    default_timezone: 'Asia/Tokyo'

HDFSで扱う場合、HadoopのNFSマウント機能を使ってNFS上に(ローカルファイルとして)CSVファイルを出力し、AsakusaFWのDirect I/OでHDFS上のファイルとして読み込むのが一番簡単。

M3BPでは直接ローカルファイルシステム上のファイルを読み書きするので、このままでよい。[2021-12-19]


Embulk目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま