# Embulk Bulk Import from CSV files

オープンソースのバルクデータローダーであるEmbulkを使用して、CSVファイルからTreasure Dataにデータをインポートできます。Embulkを使用すると、さまざまなデータベース、ストレージの場所、ファイル形式、クラウドサービス間でデータを転送できます。

![](/assets/image-20191021-194315.1d20dc43b99774785560764470f9f3522e77b6b3188edfe480ebf89b39071dba.75c1e439.png)

Bulk Importプログラム(td-import)を使用してCSVファイルからデータをインポートすることもできます。ただし、td-importは積極的にメンテナンスされておらず、廃止の候補となっています。そのため、Embulkの使用を強くお勧めします。

## 前提条件

- Treasure Dataの基本的な知識
- [Embulk](http://www.embulk.org/docs/)の基本的な知識
- Embulkは、Javaアプリケーションです。Javaがインストールされていることを確認してください。
- [Installing Bulk Data Import](/products/customer-data-platform/integration-hub/batch/import/bulk-data-import#installing-bulk-data-import)の手順に従ってください。


## シード設定ファイルの作成

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

**例**


```yaml
in:
  type: file
  path_prefix: /path/to/files/sample_
out:
  type: td
  apikey: xxxxxxxxxxxx
  endpoint: api.treasuredata.com
  database: dbname
  table: tblname
  time_column: time
  mode: replace
  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 ""csv"" parser plugin"
4,11270,2015-01-29 11:54:36,20150129,NULL
```

embulk-local-file-inputで使用可能な追加パラメータの詳細については、[Embulk Local file input](http://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
```

生成されたload.ymlファイル。


```yaml
in:
  type: file
  path_prefix: /path/to/files/sample_
  'last_path:': /path/to/files/sample_02.csv
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    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でデータベースとテーブルを作成する必要があります。

- 代替方法:次の場合:
  - データベースを追加する必要がある場合
  - .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`のパラメータを手動で変更できます。


```bash
embulk preview load.yml
```

# ロードジョブの実行

次のコマンドを実行してインポートジョブを発行します:


```bash
embulk run load.yml
```

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