初めまして、JWでWebエンジニアをしているJTです
今回はembulkを使って、MacからTreasure Dataへデータを転送してみます
embulkとはデータ転送ツールで、ドカッとデータを転送する事ができます
内部はJava、プラグイン周りはRubyで出来ています
ではやってみましょー
基本は以下のURLを参考に進めていきます
embulk#quick-start
*事前にJavaのインストールが必要です
インストールは2つの方法で行うことが出来ます
homebrewからインストールする方法
これだけでembulkが使えるようになります、簡単!
1 |
brew install embulk |
公式ページからjarファイルを取得しコマンドへ登録する方法
以下コマンドを叩き、embulkを利用出来るようにする
1 2 3 4 |
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 |
ターミナル閉じるたびにsourceしなきゃいけない><って方は.bash_profileに以下を追加したら幸せになります
1 2 3 |
if [ -f ~/.bashrc ]; then . ~/.bashrc fi |
では実際にembulkコマンドを叩いてみます
これでインストールが完了しました
次にTreasure Dataへの転送をするために、embulk-output-tdというプラグインをインストールします
これを入れることで、Treasure Dataへの転送が可能となります
インストールは以下コマンドから行います
*gem と書かれてありますが、Rubyのインストールは別途必要ありません
1 |
embulk gem install embulk-output-td |
これで全てインストールが完了しました!
次に転送に使用するファイルと、embulk転送設定ファイルの準備を行います
embulkの設定ファイルは、転送対象ファイルから推測してくれるguessコマンドから作成します
転送ファイル
例: sample_2016.csv
1 2 3 |
id,title,author,published 1,fizz,ほげ作者,2014-01-02 12:00:00 2,buzz,ふが作者,2015-01-12 13:00:00 |
転送ファイルの準備ができました!
次にguessコマンドを実行するために、設定ファイルの雛形を作ります
例: guess.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 |
in: type: file path_prefix: /path/to/files/sample_ # Treasure Dataへ転送するファイルのあるフォルダ default_timezone: 'Asia/Tokyo' # デフォルトがUTCになっている為、JSTの場合などは変更が必要 out: type: td apikey: xxxxxxxxxxxx # Treasure DataからのAPI key endpoint: api.treasuredata.com database: dbname # データベース名 table: tblname # テーブル名 time_column: time # インデックスに使用する時間カラム mode: append # 転送モード: append(追加), replace(置き換え) default_timestamp_format: '%Y-%m-%d %H:%M:%S' |
ここのpath_prefix、apikey、database、tableを使用する環境やDBごとに書き換えます
path_prefixは、/user/td_export/data_ のように、prefixを入れるとprefixが入ったファイル名が全て転送対象となります
出来たらembulk guessしてみましょう!
-o オプションを使う事で、推測から作成された設定ファイルの書き出しが行えます
ここで書き出す設定ファイル名はload.ymlとします
1 |
embulk guess guess.yml -o load.yml |
以下のpreviewオプションを利用する事で事前確認が出来ちゃったりします
1 |
embulk preview load.yml |
*もしpreviewで失敗した場合、設定ファイルのカラムの型をまず確認してみましょう
NULLや空白が許されるのはstring型だけらしく、long型でNULLデータが入ってくる場合などにコケます
(これ原因判明するまで時間を使ってしまいました。。)
previewで問題がなければ、では実際に転送してみましょう
以下コマンドで転送します
1 |
embulk run load.yml |
転送が終了したらTresure Data側で確認してみましょう
embulkを使うと、転送もバッチ化などが出来るのでオススメです
それではステキなembulkライフをー