水曜日, 11月 03, 2010

BigQueryを試してみた

GoogleさんからBigQueryの利用OKがメール出来たので、(公開されているお試し手順に沿って)自らuploadしたデータに検索ができる、までを確認しました。

また、このときPythonが手元にない環境だったので、先に作ったcygwin環境のシェル+curlでお手軽に試せることも分かりました。
- - -
①操作用Tokenを取得
curl -X POST -d accountType=HOSTED_OR_GOOGLE -d Email=tf0054@gmail.com -d Passwd=xxx -d service=ndev -d source=google-bigquery-manualimport-1 -H "Content-Type: application/x-www-form-urlencoded" https://www.google.com/accounts/ClientLogin

xxxの部分はご自分のpwに変えて下さい。このcurlコマンド実行で得られるレスポンスにある、AUTH=yyyのyyy部分ががTokenになります。けっこう長いです。

②各種操作用シェルスクリプトを保存
Librariesのページにあるシェルをファイルに落とします。

check_import_status.sh
createtable.sh
delete_table.sh
import.sh
query.sh

このとき、curlからhttpsアクセスをするので、(私の環境では)各シェルの中にあるcurlのオプションに、"-k"を足す必要がありました。

③SSAのサンプルデータをダウンロード&配置
本家には日本からアクセスできなさそう?なので、ココからダウンロードし、以下絵の感じに「tf0054/yob1880.txt」として管理画面からupload。


④テーブルを作成
$ ./createtable.sh tf0054/tables/babynames

上のGoogleStorage管理画面キャプチャのとおりですが、ここの階層にあるディレクトリは自動的に掘られるようです(上記tablesなど)。

⑤データをインポート
$ ./import.sh tf0054/tables/babynames tf0054/yob1880.txt

これまでにGoogleStorageへ上げたデータがあれば、それをBigQueryで見られるようにする(BigQueryの管理下に置く)ことができました。

⑥インポート処理状況を確認
$ ./check_import_status.sh tf0054/tables/babynames b85867e864bf1259

先のインポートコマンド投入時にもらえるレスポンスに、ジョブIDがもらえるのでそれを最終パラメータにします。

⑦セレクトしてみる
$ ./query.sh "SELECT name,count FROM [tf0054/tables/babynames] WHERE gender = 'F' ORDER BY count DESC LIMIT 5;"

テーブル名はカギ括弧に括って記述し、さらにGoogleStorage的にはフルパスで参照する感じになりました。
- - -

レスポンスがJSONでもらえるだけど、見た目には分かりずらい。Parseエラーなどになっていないことを随時確認しましょう。例えば⑦の結果は以下です。

{"result":{"kind":"bigquery#queryResults","fields":[{"id":"name","type":"string"},{"id":"COUNT","type":"integer"}],"rows":[{"f":[{"v":"Mary"},{"v":"7065"}]},{"f":[{"v":"Anna"},{"v":"2604"}]},{"f":[{"v":"Emma"},{"v":"2003"}]},{"f":[{"v":"Elizabeth"},{"v":"1939"}]},{"f":[{"v":"Minnie"},{"v":"1746"}]}]}}

何やら可能性を感じますが、Hadoop上のHIVE、みたいな位置づけですね(でも、だとするとGoogleStorageがHadoopにあたるものとなる、、、のでしょうか)。また、対応できているSQL(?)の情報も公開されていました。