Treasure Data内のデータの出力

こんにちは、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から必要な一部分を他のテーブルに書き込んだり、ファイルに出力したりすることが簡単にできます。 ファイルに限らず外部データベースなどに書き込む方法もありますので、別の回で紹介しますね。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です