背景
Treasure Dataにcsvファイルをimportする際にかなり手こずったのでここに書いておきます。
検索しても一連の流れを書いていてパッとわかりやすいものがなかったので、、、
目的
Treasure Dataにcsvファイルをimportする方法を説明。
今回は自分のやり方を書き記します。
やること
- JDKのインストール
- embulkのインストール(←今回のやり方では必要ありませんでした。)
- TDコマンドのインストール
- TDコマンドの実行
- 終わり
JDKのインストール
- JDKが入っているかチェック
ターミナルを開きjava -version
と打ち込みます。
↑の場合はインストールされていません。
- JDKのインストール
ちなみに、バージョン8より上はまだ対応していないので気をつけましょう。
バージョン:Java SE 8
Product:Mac OS X x64
を選択しましょう。
https://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSiteId=otnjp
クリックするとアカウント認証を求められるので持ってなければ作成しましょう。
過去バージョンをインストールする際には必要みたいです。
- では、インストールされていることを確認しましょう。
embulkのインストール
下記のコマンドをターミナルに打ち込めばOKです。
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 embulk gem install embulk-output-td
詳細は公式ドキュメントにあるのでどうぞ。
https://support.treasuredata.com/hc/en-us/articles/360001495428-Bulk-Import-from-CSV-files
TDコマンドのインストール
↓TDコマンドを使用するためにはこちらをインストールして初期設定が必要です。(初期設定はここでは割愛)
https://toolbelt.treasuredata.com/
TDコマンドの実行
↓TDコマンドの公式ドキュメントになります。
https://docs.treasuredata.com/articles/td-cli
では一気に駆け抜けてコマンドだけ書いてしまいます。
-
td table:partial_delete <DB名> <Table名> --from <UDF形式のtime> --to <UDF形式のtime>
→テーブルに余分なデータがある時はtimeを指定して削除します。 -
td import:list
→いま登録されているsession一覧を見ることが出来ます。 -
td import:create <session名> <DB名> <Table名>
→これでsessionを作成します。 -
td import:prepare <csvファイル> --format csv --columns <カラム名>,<カラム名>,・・・ --time-value <UDF形式のtime> -o parts/
→ファイルを圧縮分割してmsgpackに変換する。timeカラムがない場合はベタ打ちで指定する。 -
td import:upload <session名> <分割ファイルのパス>
→先程の変換したファイルをアップロードする。 -
td import:perform <session名>
→TDで処理を実行します。 -
td import:commit <session名>
→successになったらcommitをします。 -
td import:delete <session名>
→commitまで完了したらsessionを削除しましょう。
初めて触る際はtd import:list
を使って都度確認することで現状のステータスが把握しやすいのでおすすめです。
終わり
個人的な躓きポイントだったのは
- JDKのバージョン8までしか対応していなかったこと。
→そうとは知らずに最新バージョンをインストールして動かずあわあわしてました。 - いい感じに情報がまとまっているブログなどが少ないこと。
→ただcsvファイルをimportしたいだけだったのに、かゆい所に手が届かない。。。 - csvファイルにtimeカラムがないパターン。
→今回はuser_idをテーブルにimportしたかっただけなので、指定の仕方がよくわからず苦労しました。
ということでcsvの限定的な話をしてしまいましたが、どこかのだれかの役に立つことができれば幸いです。