Edited at

td import:auto コマンドを使うときに気をつけたいこと

More than 3 years have passed since last update.

TreasureDataを操作するコマンドラインツールに「tdコマンド」があります。

これを使うとデータベースの操作、クエリの実行や結果のエクスポートや、バルクインポートなどが捗ります。

http://toolbelt.treasuredata.com/

このコマンドを利用するときにハマったことを紹介します。


複数のcsvファイルを一括でインポートする方法

カラムの構成が同じファイルが複数に分かれており、それを一括で取り込みたいときに便利な方法があります。

ファイル名を指定する際、*.csvという形でワイルドカード指定が出来ます。

td import:auto --format csv --column-header --encoding Windows-31J --all-string \

--time-value `date +%s`,10 --auto-create foo_db.bar_table path/to/example_*.csv

Tips: 上記コマンド例で使っている、インポートするファイルに時刻が無い時の対処法

--time-value `date +%s`,10とすれば、10のパーティションに分かれるように良い感じにインポートできます。

細かい説明は次の通りです。


--time-value (unixtime)オプションを付与することで、任意のtimeを付与させることができます。
注意点として、TreasureDataはtimeを1時間ごとにパーティションを区切って効率的なデータ処理を行うので、
全部のデータを--time-value 0にするとクエリの効率などが悪くなります。
そのため、データの更新日などでtimeの範囲がわかるのであれば、
--time-value UNIXTIME,HOURSのように指定することで、
ある時間からHOURS時間の範囲でtimeをばらけてデータを挿入してくれます。

引用元 https://oss.sios.com/bigdata-blog/ua59up



機種依存文字を含むcsvファイルのエンコーディング指定

td importコマンドでencodingに困ったときに参考になるTipsです。

いわゆるWindowsで作成された機種依存文字を含むcsvファイルを取り込む際、Shift_JISでの指定では化けてしまいます。

しかしながらCP932と指定しても、エラーとなります。その時はWindows-31JまたはMS932を指定しましょう。



  • 動く


    • Windows-31J

    • MS932




  • 動かない


    • CP932



こうなる背景としては、td importコマンドでは裏でtd-import.jarを呼び出しており、これはJavaで書かれています。

そのためCP932ではなく、Windows-31JないしMS932を指定する必要があるようです。

少々不思議なことですが、このどちらを指定しても、結果は同じです。


Javaの世界では、IBMのCP932とWindows-31Jを区別するために、MS932という用語が使われます。

(中略)

topics13_1.png

たいていの場合はそれで問題ないかもしれませんが、プログラミングにおいて、文字コードに「Windows-31J」と指定すべきところを、「Shift_JIS」と指定したがゆえに、文字化けを引き起こすことがあります。「Windows-31J」で定義されている文字が「Shift_JIS」にはない場合です。

引用元 http://una.soragoto.net/topics/13.html



バルクインポートに関するドキュメント

次のURLから、さまざまなTipsを参照できます。

http://docs.treasuredata.com/categories/bulk-import


  • Bulk Import Overview

  • Bulk Import from CSV file

  • Bulk Import from TSV file

  • Bulk Import from JSON file

  • Bulk Import from Amazon S3

  • Bulk Import from MySQL

  • Bulk Import from PostgreSQL

  • Bulk Import from MongoDB

  • Bulk Import Internals

  • Bulk Import Tips and Tricks


あわせて読みたい