背景
既にあるデータをTreasureData
にアップロードしたいなと思い、Treasuredata
が提供しているCLIツール(TD-CLI)
を使ってアップロードしてみたのでメモとして残しておく。
以下前提条件。
-
TD-CLI
がインストールされていること。
TD-CLI
のインストール方法や基本的な使い方はTreasureData使ってみたを参照のこと。
以下環境情報。
- ubuntu: 12.04
- TD-CLI: 0.11.3
データ準備
まずはアップロードしたいデータを準備する。
今回はApacheログ
形式である以下のデータを準備した。
$ cat /tmp/www_access.tsv | head -2
host path method referer code agent time
48.45.67.130 /category/computers GET - 200 Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 2013-05-14 16:53:22
$ cat /tmp/www_access.tsv | wc -l
1001
$
DB/Table作成
データの投げ先であるTreasureData
上にDB
とTable
を作成しておく。
$ td account -f # 念のためログイン
Enter your Treasure Data credentials.
Email: td@treasuredata.com
Password (typing will be hidden):
Authenticated successfully.
Use 'td db:create <db_name>' to create a database.
$
$ td db:create apache_sample
Database 'apache_sample' is created.
Use 'td table:create apache_sample <table_name>' to create a table.
$ td table:create apache_sample access
Table 'apache_sample.access' is created.
$
ここではapache_sample
というDB
にaccess
というTable
を作成している。
データアップロード
さてこれでデータアップロードする準備ができたので以下のコマンドでアップロードする。
Options
$ td import:auto --format tsv --auto-create apache_sample.access --parallel 8 --prepare-parallel 8 --column-header -o /ext4/td_out/ --time-column 'time' --time-format "%Y-%m-%d %H:%M:%S" /tmp/www_access.tsv
上記のオプションのざっとした説明は以下。
Option | 説明 |
---|---|
import:atuo |
TD-CLI のアップロードにはいくつかのステップがありauto オプションを指定することでその全てのステップを自動的に実行してくれる。 |
--fromt tsv | アップロードデータがTSV 形式であることを意味する。CSV 形式の場合はここをcsvとする。 |
--auto-create | なんだっけ・・・忘れたorz |
apache_sample.access | データアップロード先 |
--parallel 8 | データアプロードの並行スレッド数 |
--prepare-parallel 8 | データをMessagePack 形式に加工する際の並行スレッド数 |
--column-header |
TreasureData 上でのカラム名をアップロード対象ファイルの一行目の値を利用するように指定する。 |
-o /ext4/td_out |
MessagePack 形式ファイルの出力先Directory
|
--time-column 'time' | 時刻カラムの指定 |
--time-format "%Y-%m-%d %H:%M:%S" | 指定した時刻カラムのフォーマット |
/tmp/www_access.tsv | アップロード対象ファイル |
TreasureData
の中で時刻というのは重要なため--time-column
は必須であるため注意すること。
--parallel
を指定することでデータアップロードの並行数が増えるのでアップロード時間がある程度短縮される。
実行ログ
コマンドを実行すると以下のような実行ログが出力される。
Uploading prepared sources
Session : apache_sample_access_2014_09_10_1410349386586
Source : /tmp/www_access.tsv (193315 bytes)
Converting '/tmp/www_access.tsv'...
sample row: {"time":1368518002,"host":"48.45.67.130","path":"\/category\/computers","method":"GET","code":200,"referer":"-","agent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko\/20100101 Firefox\/10.0.1"}
Uploading /ext4/td_out/www_access_tsv_0.msgpack.gz (19489 bytes)...
....省略
Prepare status:
Elapsed time: 9 sec.
Source : /tmp/www_access.tsv
Status : SUCCESS
Read lines : 1001
Valid rows : 1000
Invalid rows : 0
Converted Files : /ext4/td_out/www_access_tsv_0.msgpack.gz (19489 bytes)
Next steps:
=> execute following 'td import:upload' command. if the bulk import session is not created yet, please create it with 'td import:create <session> <database> <table>' command.
$ td import:upload <session> '/ext4/td_out/www_access_tsv_0.msgpack.gz'
Upload status:
Elapsed time: 18 sec.
Source : /ext4/td_out/www_access_tsv_0.msgpack.gz
Status : SUCCESS
Part name : www_access_tsv_0_msgpack_gz
Size : 19489
Retry count : 0
Next Steps:
=> execute 'td import:perform apache_sample_access_2014_09_10_1410349386586'.
Freeze bulk import session apache_sample_access_2014_09_10_1410349386586
Perform bulk import session apache_sample_access_2014_09_10_1410349386586
Show status of bulk import session apache_sample_access_2014_09_10_1410349386586
Performing job ID : 40448
Name : apache_sample_access_2014_09_10_1410349386586
Status : performing
Wait apache_sample_access_2014_09_10_1410349386586 bulk import session performing...
Show error records of bulk import session apache_sample_access_2014_09_10_1410349386586
Performing job ID : 40448
Valid parts : 1
Error parts : 0
Valid records : 1000
Error records : 0
いくつかのStepを踏んで処理をしていることがわかる。
確認してみる
以下のコマンドでデータが正常に入っているか確認する。
$ td table:show apache_sample access
Name : apache_sample.access
Type : log
Count : 1000
Schema : (
host:string
path:string
method:string
referer:string
code:long
agent:string
)
$
$ td query -w -t hive -d apache_sample "SELECT * FROM access LIMIT 10"
...省略
+-----------------+------------------------+--------+--------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+
| host | path | method | referer | code | agent | v | time |
+-----------------+------------------------+--------+--------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+
| 48.45.67.130 | /category/computers | GET | - | 200 | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 | {"code":"200","time":"1368518002","method":"GET","agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1","referer":"-","path":"/category/computers","host":"48.45.67.130"} | 1368518002 |
| 124.192.166.98 | /search/?c=Giftcards | POST | /category/sports | 200 | Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) | {"code":"200","time":"1368518002","method":"POST","agent":"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)","referer":"/category/sports","path":"/search/?c=Giftcards","host":"124.192.166.98"} | 1368518002 |
| 176.183.137.115 | /category/finance | GET | - | 200 | Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) | {"code":"200","time":"1368518002","method":"GET","agent":"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)","referer":"-","path":"/category/finance","host":"176.183.137.115"} | 1368518002 |
| 192.183.92.55 | /item/software/4777 | GET | - | 200 | Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3 | {"code":"200","time":"1368518002","method":"GET","agent":"Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3","referer":"-","path":"/item/software/4777","host":"192.183.92.55"} | 1368518002 |
| 48.66.40.214 | /category/networking | GET | - | 200 | Mozilla/5.0 (Windows NT 6.0; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 | {"code":"200","time":"1368518002","method":"GET","agent":"Mozilla/5.0 (Windows NT 6.0; rv:10.0.1) Gecko/20100101 Firefox/10.0.1","referer":"-","path":"/category/networking","host":"48.66.40.214"} | 1368518002 |
| 144.132.188.212 | /item/electronics/2649 | GET | /item/electronics/1996 | 200 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0.1) Gecko/20100101 Firefox/9.0.1 | {"code":"200","time":"1368518002","method":"GET","agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0.1) Gecko/20100101 Firefox/9.0.1","referer":"/item/electronics/1996","path":"/item/electronics/2649","host":"144.132.188.212"} | 1368518002 |
| 36.171.84.59 | /category/finance | GET | - | 200 | Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11 | {"code":"200","time":"1368518002","method":"GET","agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11","referer":"-","path":"/category/finance","host":"36.171.84.59"} | 1368518002 |
| 204.204.116.114 | /item/toys/3282 | GET | - | 200 | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 | {"code":"200","time":"1368518002","method":"GET","agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1","referer":"-","path":"/item/toys/3282","host":"204.204.116.114"} | 1368518002 |
| 100.27.141.84 | /item/software/2012 | GET | /category/cameras?from=0 | 200 | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 | {"code":"200","time":"1368518002","method":"GET","agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1","referer":"/category/cameras?from=0","path":"/item/software/2012","host":"100.27.141.84"} | 1368518002 |
| 96.195.97.82 | /category/garden | GET | - | 200 | Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; YTB730; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C) | {"code":"200","time":"1368518002","method":"GET","agent":"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; YTB730; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)","referer":"-","path":"/category/garden","host":"96.195.97.82"} | 1368518002 |
+-----------------+------------------------+--------+--------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+
10 rows in set
$
time
カラムにUnix時間で値が格納されていることがわかる。
正常っぽい。
TSV
以外の形式のインポートについてはTreasureData
のDoccumentサイトを参照のこと。
MySQL
からはJDBC経由で直接データを入れられるらしい。
おしまい。