Presto Viewとかその辺の話を書いてみる
以前Hiveでの集計処理とかPrestoについての話を
PrestoとかAnsibleとかその辺の話を軽く書いてみる - wyukawa’s blog
で書いたのですが、今はこんな感じでやっているよーという話を書きます。
最近やっていることは、
- Presto CLIでデータの中身を確認しつつHiveQLを書いてETL処理を作る。
- Hiveでの集計結果はHiveテーブルでそれを見やすいようにPresto Viewを作る。作らない場合もある。
- HiveテーブルもしくはPresto ViewをPrestogres経由でBIツールで表示する。
という感じです。
例えばOS別、国別のPV, UUを求めたい場合なんかは下記のようにHiveQLを書いています。
SELECT '2014-08-24', os, country, COUNT(*), COUNT(DISTINCT userid) FROM ... GROUP BY os, country WITH CUBE
そうすると結果は下記のような感じになります。WITH CUBEを使うことによってos別、country別集計結果以外にもos別集計結果(iOSのpv, uuとか)、country別集計結果(JPのpv, uuとか)、全体でのpv, uuといった値を求めることができます。列でNULLになっているところが部分和、総和の部分です。os, countryのそれぞれのカラムにNULLがあると紛らわしいのでそこは空文字に置換したりしてます。
date | os | country | pv | uu |
---|---|---|---|---|
2014-08-24 | iOS | JP | 100 | 30 |
2014-08-24 | Android | JP | 200 | 70 |
2014-08-24 | Android | US | 300 | 80 |
...
2014-08-24 | NULL | JP | 200 | 70 |
...
2014-08-24 | iOS | NULL | 1000 | 300 |
2014-08-24 | Android | NULL | 2000 | 700 |
...
2014-08-24 | NULL | NULL | 10000 | 7000 |
このままBIツールからレポーティングしてもいいんですが、縦持ちを横持ちにして下記のように表示したいというケースもあるのでそういう場合はPresto Viewを作って、Prestogres経由でBIツールで表示しています。
date | iOS_pv | Android_pv | total |
---|---|---|---|
2014-08-24 | 1000 | 2000 | 3000 |
Hive ViewだとPrestoからアクセスできない、つまりPrestogres経由でBIツールで表示できないのでPresto Viewを作っています。
PrestoでViewを作成するとその情報はconnector側のメタストアに保存されます。Hiveの場合はHiveのメタストアに保存されます。ソースをチラ見した限りだとViewDefinitionというオブジェクトをJSONでシリアライズしたものをbase64エンコードして「/* Presto View: 」と「 */」でかこって保存しているようです。コメントとして保存しているという感じのようです。なのでHiveからPresto Viewの中身を見ることは出来ませんが、Hiveでshow tablesするとPresto Viewも表示されます。
そんな感じでやってますが、今のところPrestoで障害が起きたということはありません。PrestoのJMXの項目のいくつかとJVMをモニタリングしてますが、特に変わった挙動もありません。まあ障害が無いのでほとんど見てないというのが実態です。
データをGUIで見るためにいくつかツールも試したのですが、SQL Workbench/JとSQuirreLはなんかうまくいかずDbVisualizerはうまくいきました。Presto CLIだけでもなんとかなるとは思います。
まあ、そんな感じです。