Skip to content
Last updated

Embulk Bulk Import from CSV files

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

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

前提条件

  • Treasure Dataの基本的な知識
  • Embulkの基本的な知識
  • Embulkは、Javaアプリケーションです。Javaがインストールされていることを確認してください。
  • Installing Bulk Data Importの手順に従ってください。

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

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

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を参照してください。また、embulk-output-tdの詳細については、TD output plugin for Embulkを参照してください。

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

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

embulk guess seed.yml -o load.yml

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

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パラメータのサンプルです。

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コマンドを実行します:

td database:create dbname
td table:create dbname tblname

TD Consoleを使用してデータベースとテーブルを作成することもできます。

embulk preview load.ymlコマンドを使用してデータをプレビューできます。カラムタイプやデータが正しくない場合は、load.ymlファイルを直接編集して、再度プレビューして確認できます。guessオプションが満足のいく結果を生成しない場合は、CSV/TSV parser plugin optionsを使用して、要件に応じてload.ymlのパラメータを手動で変更できます。

embulk preview load.yml

ロードジョブの実行

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

embulk run load.yml

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