概要
embulk を使っていて、よくやるカラム操作をメモ的な感じでまとめる
とりあえず自分がよく使うものや、躓いたところから
もっといろいろやっているので気が向いたときに更新する
json を展開する
filters:
- type: expand_json
json_column_name: record
expanded_columns:
- {name: _id, type: string}
- {name: user_id, type: long}
- {name: created_at, type: timestamp, format: '%Y-%m-%dT%H:%M:%S.%N %z'}
カラムを追加する
自分で指定した値を追加したり、既存カラムを元にコピーしたりできる
embulk-filter-column
filters:
- type: expand_json
json_column_name: record
expanded_columns:
- {name: _id, type: string}
- {name: user_id, type: long}
- {name: created_at, type: timestamp, format: '%Y-%m-%dT%H:%M:%S.%N %z'}
- type: column
add_columns:
- {name: time, type: timestamp, default: "2015-07-13", format: "%Y-%m-%d"}
- {name: ymd, src: created_at}
既存カラムを元にフォーマットや型を変える
typecast で型を変える
embulk-filter-typecast
この例では、timestamp な created_at を ymd にコピーし、string にキャストし、最後に long にキャストしている
filters:
- type: expand_json
json_column_name: record
expanded_columns:
- {name: _id, type: string}
- {name: user_id, type: long}
- {name: created_at, type: timestamp, format: '%Y-%m-%dT%H:%M:%S.%N %z'}
- type: column
add_columns:
- {name: ymd, src: created_at}
- type: typecast
columns:
- {name: ymd, type: string, format: "%Y%m%d", timezone: "+09:00"}
- type: typecast
columns:
- {name: ymd, type: long}
カラムの順序を変える
add_columns でカラムを追加して、それを先頭に持ってきたいときなどに利用
embulk-filter-column
とりあえず最後に embulk-filter-column の columns を意図した順序にするだけのよう
filters:
- type: expand_json
json_column_name: record
expanded_columns:
- {name: _id, type: string}
- {name: user_id, type: long}
- {name: created_at, type: timestamp}
- type: column
add_columns:
- {name: ymd, src: created_at}
- type: typecast
columns:
- {name: ymd, type: string, format: "%Y%m%d", timezone: "+09:00"}
- type: typecast
columns:
- {name: ymd, type: long}
- type: column
columns:
- {name: ymd, type: long}
- {name: _id, type: string}
- {name: user_id, type: long}
- {name: created_at, type: timestamp}
json内の配列を分解する
embulk-parser-jsonpath
Twitter の Search API の例
{
"statuses" : [
{
"created_at" : "Sun Feb 25 18:11:01 +0000 2018",
"id" : 1234
"id_str" : "1234"
"text" : "おはよう"
...
},
{
"created_at" : "Sun Feb 25 18:11:01 +0000 2018",
"id" : 2345
"id_str" : "2345"
"text" : "こんにちは"
...
}
...
]
}
in:
type: http
url: ...
params:
...
parser:
type: jsonpath
root: "$.statuses"
default_timezone: "Asia/Tokyo"
columns:
- {name: "created_at", type: string}
- {name: "id", type: long}
- {name: "id_str", type: string}
- {name: "text", type: string}
method: get
これを out すると、配列の数の分のレコードが出力される。