embulk-filter-join_fileを使ってみた。


便利だなと思ったプラグインの使い方をまとめたメモ第一弾
(gistに書いておくとどこかに行ってしまうのでQiitaに移動)

## 名前

* プラグイン名: [embulk-filter-join_file](https://github.com/civitaspo)
* 著者: Civitaspoさん
* プラグインの用途
  * ある値を元に他の値を結合したいという時に利用するフィルタプラグイン
  * 例えば都道府県コードから、都道府県名をくっつける

## 導入

```
embulk gem install embulk-filter-join_file 
2015-11-12 12:56:02.486 +0900: Embulk v0.7.9
Successfully installed embulk-filter-join_file-0.0.1
1 gem installed
```

## 元データ

ken_codeを参照して、都道府県名を付与します。

```csv
ken_code,name
01,hokkaido
13,tokyo
14,kanagawa
17,ishikawa
20,nagano
```


## 設定の流れ

* 変換データのjsonファイルを作る
* 設定を記述
* 実行

### 変換データのjsonファイルを作る

次のようなJSONファイルをつくる、ファイル名を``master.json``とします。
長いのですべてのデータは、本文書末尾を参照してください。

```json:master.json
[
  {
    "code": "01",
    "name": "北海道"
  },
  {
    "code": "02",
    "name": "青森県"
  },
  {
    "code": "03",
    "name": "岩手県"
  },
  ...
```  

### 設定を記述 

```yaml:conf.yml
  type: file
  path_prefix: /tmp/embulk/test
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
    - {name: ken_code, type: string} # キーカラム
    - {name: name, type: string}
#
# ここからがfilterの設定
#
filters:
  - type: join_file
    # 元データにあるカラムの名前、parser内のカラム名と対応づけする
    base_column:    { name: ken_code, type: string }
    # jsonファイル内にあるカラムの名前
    counter_column: { name: code, type: string }
    # 変換ファイル
    file_path: /tmp/master.json
    # フォーマット
    file_format: json
    # マスターファイルの中で出力したいカラムを指定
    columns:
#      - { name: code, type: string }
      - { name: name, type: string }

out: {type: stdout}
```
### 実行

```
embulk preview -G conf.yml 
2015-10-15 20:02:49.354 +0900: Embulk v0.7.5
*************************** 1 ***************************
              ken_code (string) : 01
                  name (string) : hokkaido
_joined_by_embulk_name (string) : 北海道
*************************** 2 ***************************
              ken_code (string) : 13
                  name (string) : tokyo
_joined_by_embulk_name (string) : 東京都
*************************** 3 ***************************
              ken_code (string) : 14
                  name (string) : kanagawa
_joined_by_embulk_name (string) : 神奈川県
*************************** 4 ***************************
              ken_code (string) : 17
                  name (string) : ishikawa
_joined_by_embulk_name (string) : 石川県
*************************** 5 ***************************
              ken_code (string) : 20
                  name (string) : nagano
_joined_by_embulk_name (string) : 長野県
```




## 都道府県変換JSONファイル

```json
[
  {
    "code": "01",
    "name": "北海道"
  },
  {
    "code": "02",
    "name": "青森県"
  },
  {
    "code": "03",
    "name": "岩手県"
  },
  {
    "code": "04",
    "name": "宮城県"
  },
  {
    "code": "05",
    "name": "秋田県"
  },
  {
    "code": "06",
    "name": "山形県"
  },
  {
    "code": "07",
    "name": "福島県"
  },
  {
    "code": "08",
    "name": "茨城県"
  },
  {
    "code": "09",
    "name": "栃木県"
  },
  {
    "code": "10",
    "name": "群馬県"
  },
  {
    "code": "11",
    "name": "埼玉県"
  },
  {
    "code": "12",
    "name": "千葉県"
  },
  {
    "code": "13",
    "name": "東京都"
  },
  {
    "code": "14",
    "name": "神奈川県"
  },
  {
    "code": "15",
    "name": "新潟県"
  },
  {
    "code": "16",
    "name": "富山県"
  },
  {
    "code": "17",
    "name": "石川県"
  },
  {
    "code": "18",
    "name": "福井県"
  },
  {
    "code": "19",
    "name": "山梨県"
  },
  {
    "code": "20",
    "name": "長野県"
  },
  {
    "code": "21",
    "name": "岐阜県"
  },
  {
    "code": "22",
    "name": "静岡県"
  },
  {
    "code": "23",
    "name": "愛知県"
  },
  {
    "code": "24",
    "name": "三重県"
  },
  {
    "code": "25",
    "name": "滋賀県"
  },
  {
    "code": "26",
    "name": "京都府"
  },
  {
    "code": "27",
    "name": "大阪府"
  },
  {
    "code": "28",
    "name": "兵庫県"
  },
  {
    "code": "29",
    "name": "奈良県"
  },
  {
    "code": "30",
    "name": "和歌山県"
  },
  {
    "code": "31",
    "name": "鳥取県"
  },
  {
    "code": "32",
    "name": "島根県"
  },
  {
    "code": "33",
    "name": "岡山県"
  },
  {
    "code": "34",
    "name": "広島県"
  },
  {
    "code": "35",
    "name": "山口県"
  },
  {
    "code": "36",
    "name": "徳島県"
  },
  {
    "code": "37",
    "name": "香川県"
  },
  {
    "code": "38",
    "name": "愛媛県"
  },
  {
    "code": "39",
    "name": "高知県"
  },
  {
    "code": "40",
    "name": "福岡県"
  },
  {
    "code": "41",
    "name": "佐賀県"
  },
  {
    "code": "42",
    "name": "長崎県"
  },
  {
    "code": "43",
    "name": "熊本県"
  },
  {
    "code": "44",
    "name": "大分県"
  },
  {
    "code": "45",
    "name": "宮崎県"
  },
  {
    "code": "46",
    "name": "鹿児島県"
  },
  {
    "code": "47",
    "name": "沖縄県"
  }
]
```