# Embulk Bulk Import From Tsv Files

オープンソースの一括データローダーである *Embulk* を使用して、TSVファイルからTreasure Dataにデータをインポートできます。

![](/assets/image-20191021-194448.33463c75cf3cb8b1a37595872537be60b30cee4f234d918acbc8fa2cb005f933.d2564ff8.png)

## 前提条件

- Treasure Dataの基本的な知識。
- [Embulk](http://www.embulk.org/docs/)の基本的な知識。
- [JRuby](https://www.jruby.org/download)がインストールおよび設定されている必要があります。Embulk v0.10.50およびv0.11.0にはJRubyが含まれていないため、手動でインストールおよび設定する必要があります。(EmbulkとJRubyの設定の詳細については、[Embulk v0.11 is coming soon](https://www.embulk.org/articles/2023/04/13/embulk-v0.11-is-coming-soon.html)の「JRuby」セクションを参照してください。)


## Embulkとは

Embulkを使用すると、さまざまなデータベース、ストレージの場所、ファイル形式、クラウドサービス間でデータを転送できます。

## Embulkのインストール方法

### Linux、MacおよびBSD

EmbulkはJavaアプリケーションです。Javaがインストールされていることを確認してください。

次の4つのコマンドで、Embulkをホームディレクトリにインストールします:


```bash
curl --create-dirs -o ~/.embulk/bin/embulk -L "http://dl.embulk.org/embulk-latest.jar"
chmod +x ~/.embulk/bin/embulk
echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
```

### Windows

EmbulkはJavaアプリケーションです。Javaがインストールされていることを確認してください。

cmd.exeまたはPowerShell.exeで次のコマンドを使用して、`embulk.bat`をダウンロードできます:


```
PowerShell -Command \
  "& {Invoke-WebRequest http://dl.embulk.org/embulk-latest.jar -OutFile embulk.bat}"
```

## Treasure Data Pluginのインストール方法

pluginを使用して、さまざまなシステムやファイル形式からデータをロードできます。公開されているpluginのリストを表示するには、[カテゴリ別のpluginリスト](https://plugins.embulk.org/)を参照してください。

次のコマンドでembulk-output-td pluginをインストールします。このpluginは、レコードをTreasure Dataにインポートします。


```bash
embulk gem install embulk-output-td
```

# Seed設定ファイルの作成

お好みのテキストエディタを使用して、入力(file)および出力(TD)パラメータを定義するembulk設定ファイル(例:seed.yml)を作成します。例:


```yaml
in:
    type: file
    path_prefix: /path/to/files/sample_    # path of *.csv or *.tsv file on your local machine
out:
    type: td
    apikey: xxxxxxxxxxxx
    endpoint: api.treasuredata.com
    database: dbname
    table: tblname
    time_column: time
    mode: replace
    #by default mode: append is used, if not defined. Imported records are appended to the target table with this mode.
    #mode: replace, replaces existing target table
    default_timestamp_format: '%Y-%m-%d %H:%M:%S'
```

これはサンプルデータです。


```
id,account,time,purchase,comment
1,32864,2015-01-27 19:23:49,20150127,embulk
2,14824,2015-01-27 19:01:23,20150127,embulk jruby
3,27559,2015-01-28 02:20:02,20150128,"Embulk ""TSV"" parser plugin"
4,11270,2015-01-29 11:54:36,20150129,NULL
```

embulk-local-file-inputで使用可能な追加パラメータの詳細については、[Embulk Local file input](https://www.embulk.org/docs/built-in.html#local-file-input-plugin)を参照してください。また、embulk-output-tdの詳細については、[TD output plugin for Embulk](https://github.com/treasure-data/embulk-output-td#td-output-plugin-for-embulk)を参照してください。

## フィールドの推測(load.ymlの生成)

Embulkのguessオプションは、`seed.yml`を使用してターゲットファイルを読み取り、カラムタイプと設定を自動的に推測し、この情報を含む新しいファイル`load.yml`を作成します。


```bash
embulk guess seed.yml -o load.yml
```


```yaml
in:
  type: file
  path_prefix: /path/to/files/sample_
  'last_path:': /path/to/files/sample_02.tsv
  parser:
    charset: UTF-8
    newline: CRLF
    type: tsv
    delimiter: ','
    quote: '"'
    escape: '"'
    null_string: 'NULL'
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
      - name: id
        type: long
      - name: account
        type: long
      - name: time
        type: timestamp
        format: '%Y-%m-%d %H:%M:%S'
      - name: purchase
        type: timestamp
        format: '%Y%m%d'
      - name: comment
        type: string
  out:
    type: td
    apikey: xxxxx
    endpoint: api.treasuredata.com
    database: dbname
    table: tblname
    time_column: time
    mode: replace
    default_timestamp_format: '%Y-%m-%d %H:%M:%S'
```

存在しないテーブルが自動的に作成されるように、load.yml に "auto_create_table: true" パラメータを追加してください。

.yml ファイル内の auto_create_table パラメータのサンプルです。


```yaml
out:
  type: td
  apikey: your apikey
  endpoint: api.treasuredata.com
  database: dbname
  table: tblname
  time_column: created_at
  auto_create_table: true
  mode: append
```

ロードジョブを実行する前に、TD でデータベースとテーブルを作成する必要があります。代替方法：1) データベースを追加する必要がある場合、または 2) .yml ファイルに auto_create_table パラメータを追加せずにテーブルを追加する必要がある場合は、以下の TD コマンドを実行してください。


```bash
td database:create dbname
td table:create dbname tblname
```

[Treasure コンソール](https://console.treasuredata.com/app/databases) を使用してデータベースとテーブルを作成することもできます。

`embulk preview load.yml` コマンドを使用してデータをプレビューできます。カラムの型やデータに問題がある場合は、`load.yml` ファイルを直接編集して再度プレビューして確認できます。`guess` オプションで満足のいく結果が得られない場合は、[CSV/TSV parser plugin options](http://www.embulk.org/docs/built-in.html#csv-parser-plugin) を使用して、要件に応じて `load.yml` のパラメータを手動で変更できます。


```
embulk preview load.yml
```

## ロードジョブの実行

最後に、以下のコマンドを実行してインポートジョブを発行します。


```
embulk run load.yml
```

データのサイズによっては、ジョブの完了に数分から数時間かかる場合があります。

## 付録

Bulk Import プログラム（td-import）を使用して TSV ファイルからデータをインポートすることもできます。ただし、td-import は積極的にメンテナンスされておらず、将来的に非推奨となる可能性があることに注意してください。そのため、Embulk の使用を強く推奨します。