2014年7月3日木曜日

TreasureDataとMySQLからのインポート

Treasure Dataってご存知でしょうか。僕はごく最近まで全く知りませんでした。
Treasure Dataはビッグデータ解析のためのクラウドツールです。これによってビッグデータの収集・保存・解析を一手に担ってくれるのでアクセスログの解析なんかが簡単にできます。何十万何百万のレコードが書き込まれたテーブルへのクエリもそこそこ速く返ってきます。素晴らしい。
もし知らなくて興味があるって方は公式サイトからどうぞ。

今回はTreasureDataでのテーブルの作り方やサーバーからMySQLのデータをTreasureDataにアップロードする方法なんかを紹介します。TreasureDataには既に登録済みであることを前提に話を進めます。

まずTreasureDataコマンドを使うために。
(僕はRailsで開発を行っているのでそしか知らないのですが)tdというgemを入れる必要があります。 Gemfileに記述するか
gem install td
コマンドを打ち込みます。
treasure-data/td のgithubはこちらから

インストール後はtdコマンドでどんなコマンドが使えるか確認ができます。
一番最初は td account でメールアドレスとパスワードを打ちログインします。これで自分が登録しているTreasureDataにDBを作成したりテーブルを作ったりできます。

データベースの作成
td db:create my_db

テーブルの作成
td table:create my_db my_tbl

これでDBと空のテーブルがTreasureData内に作成出来ました。最後に、テーブルをTreasureDataにインポートします。
MySQLからのインポート
td --apikey my_apikey import:auto --auto-create my_db.my_table --format mysql --db-url jdbc:mysql://my_sql_host//my_sql_db --db-user my_user --db-password my_pass --time-column time my_table
そんなに難しくないです。一応気をつけなければいけないのはmy_db,my_tableはTreasureData内に作成したデータベース・テーブルでありmy_sql_host,my_sql_db,my_user,my_passはローカルにあるMySQLのホストやデータベース等になります。
APIKeyに関しては僕は最初抜きでやったら権限がないと怒られてしまったため付けました。そのユーザーの権限によっては必要がないかもしれません。
また --time-columnの欄は時刻を記録するカラムの設定です。TreasureDataは基本的に時刻のカラムを持たなければいけません。インポート元のテーブルに時刻を記録するカラムがあればそのカラム名を、なければ--time-value 0 とかでいいのかと思います。

これでMySQLのテーブルをTreasureDataへインポートできます。
MySQL以外にもTreasureDataにはCSVやjson,PostgreSQLなど様々な形式のデータをインポートできるみたいです。



今回はテーブルのインポートのみを紹介しました。実際にTreasureDataにあるデータにアクセスするさいはHiveやPigといったSQLライクな(でも結構違う)クエリを書いて投げる必要があります。僕が使っているのはHiveQLですがそれについてもまた書きたいと思っています。






久しぶりの投稿

実に4ヶ月ぶりの投稿になります。
さぼってました。その間に主戦場がAndroidからRailsへと変わったりとまた全然別の事を勉強していたのですがいかんせんゼロからのスタートだったもので書くとなると量が多くなりすぎてしまい気が引けていたのが正直なところです。

暫くはRailsやMySQL,Hive当たりを幅広く載せて定期的にアウトプットが行えればと思っています。
ということで早速次の投稿に書いていきますね。