こんにちは、SSTDの大村です。前回はTreasure Dataにデータをアップロードしました。Treasure Dataはたくさんのデータをためておくことができる倉庫としても利用できるのですが、Treasure Dataは内部のデータを分析することもできますし、別の場所に出力することもできます。今回はTreasure Dataにアップロードしたデータを利用する方法を紹介したいと思います。
データを参照する
テーブルの一覧やデータ数を確認
テーブルのデータ数を参照するにはこれまでも利用してきましたtd tableコマンドを利用します。
$ td table:list {DB名}
DB名を記述すれば、特定のDB内のテーブル一覧、指定しなければ全テーブルの一覧が表示されます。
クエリを利用する
以前、紹介しましたようにTreasure Dataは通常のデータベースのようにSQLを利用して内容を確認することができます。正しくはHiveQL(はいぶきゅーえる)と呼ばれるHiveの操作を行うためのSQLのようなものですが、HiveQLとTreasure Dataで利用できるHiveQLについては後の記事で紹介予定です。
$ td query -d example_db -w “select count(*) from table1”
$ td query -d example_db -w -q query.txt
ここまでは前回までに紹介しましたが、結果は標準出力に表示して確認していただけでした。標準出力以外の場所にデータを出力する方法の一部を紹介します。
Treasure Dataの別テーブルに書き込む
まず、アップロードされたデータの一部を別のテーブルに書き込む方法を紹介します。
$ td query –result ‘td://@/testdb/output_table’ -w -d testdb “SELECT v[‘code’] as code, COUNT(1) as cnt FROM www_access GROUP BY v[‘code’]”
–resultオプションで書き込み先の指定を追加するだけです。‘td://@/{データベース名}/{テーブル名}’と指定します。存在しないテーブルを指定すると自動で作成されます。
Status : success
Result :
+—–+——+
| code | cnt |
+—–+——+
| 404 | 17 |
| 500 | 2 |
| 200 | 4981 |
+—–+——+
3 rows in set
$ td table:list
+———-+————–+——+———–+———+—————————+——–+
| Database | Table | Type | Count | Size | Last import | Schema |
+———-+————–+——+———–+———+—————————+——–+
| testdb | accesslog | log | 5 | 0.0 GB | 2013-04-25 17:23:08 +0900 | |
| testdb | output_table | log | 3 | 0.0 GB | | |
| testdb | www_access | log | 5,000 | 0.0 GB | 2013-04-16 17:42:00 +0900 | |
+———-+————–+——+———–+———+—————————+——–+
3 rows in set
確認のためデータを見ましょう。最初は最近入力したデータを見るtable:tailコマンドを利用してみます。
$ td table:tail testdb output_table
{“cnt”:17,”time”:1367917828,”code”:”404″}
{“cnt”:2,”time”:1367917828,”code”:”500″}
{“cnt”:4981,”time”:1367917828,”code”:”200″}
次にクエリでテーブルに入っている全件データを参照してみましょう。
$ td query -w -d testdb “select * from output_table”
(中略)
Status : success
Result :
+————————————————-+————+
| v | time |
+————————————————-+————+
| {“cnt”:”17″,”time”:”1367917828″,”code”:”404″} | 1367917828 |
| {“cnt”:”2″,”time”:”1367917828″,”code”:”500″} | 1367917828 |
| {“cnt”:”4981″,”time”:”1367917828″,”code”:”200″} | 1367917828 |
+————————————————-+————+
3 rows in set
データをファイルに出力する
最後にクエリの実行結果をファイルに出力します。ファイルに出力する場合は-fで出力形式、-oで出力ファイルのパスを指定します。
$ td query -w -d testdb -f csv -o output.csv “select * from output_table”
(中略)
OK
MapReduce time taken: 0.276 seconds
Time taken: 1.905 seconds
Status : success
Result :
written to output.csv in csv format
作成されたファイルの中身を見てみましょう。
$ cat output.csv
“{“”cnt””:””17″”,””time””:””1367917828″”,””code””:””404″”}”,1367917828
“{“”cnt””:””2″”,””time””:””1367917828″”,””code””:””500″”}”,1367917828
“{“”cnt””:””4981″”,””time””:””1367917828″”,””code””:””200″”}”,1367917828
見づらいですね。そして、CSVで開くと2列のデータになり利用しづらいです。そこで、カラム名をきちんとつけて出力してみます。
$ td query -w -d testdb -f csv -o output2.csv “select v[‘code’] as code,v[‘cnt’] as count,time from output_table”
(中略)
OK
MapReduce time taken: 16.541 seconds
Time taken: 16.809 seconds
Status : success
Result :
written to output2.csv in csv format
作成されたファイルの中身を見てみましょう。
$ cat output2.csv
404,17,1367917828
500,2,1367917828
200,4981,1367917828
利用しやすい形で出力することができました。
このようにTreasure Dataから必要な一部分を他のテーブルに書き込んだり、ファイルに出力したりすることが簡単にできます。 ファイルに限らず外部データベースなどに書き込む方法もありますので、別の回で紹介しますね。