- 0.178の変更点
TD
- おさらい データの抽出や可視化を行うプラットフォーム
- prestoは抽出周り
- 分散SQLエンジン
- スケールしやすい
- SQL的なインターフェイス
- コードの書けないデータアナリストが大規模なデータに対して分析を行える
- データ分析基盤としてTDはPrestoを使っている
- 1ヶ月400万クエリ
- 月間 6PB のデータ
TDでのPrestoの使い方
- presto-client-ruby(ruby clientを使っている)
- presto coordinator
- postgre sql(プラズマDB)
- presto worker
- S3(実データ)
メインは0.152で、0.178にアップデートしようとしている
0.178 新機能
- lambda expression
- filtered aggregation
- and more
lambda expression
クロージャーっぽいやつをprestoのSQLにかける
FBでは、複数カラムのなかにarrayを処理したいという要望から追加した
SELECT filter(ARRAY [], x -> true); -- [] SELECT reduce(ARRAY [], 0, (s, x) -> s + x s -> s); -- 0
filtered aggregation
サブクエリを減らせる
select sum(a) filter (where a > 0)
validate mode in explain
explainでシンタックスのチェック
explain (type validate) select ...
compressed exchange
ワーカー同士でのデータやり取りを圧縮データで行う(デフォルトはLZ4)
complex grouping operation
union all + group byと同等のことができる
select host, path, code, avg(size) from www_access group by grouping sets( (host), (path), (host,code) ); ```` - このクエリのように書けば、unionが要らなくなる。 - 既存のクエリではスキャン3回だったのが1回になる ### new functions その他 - array_overlap(x,y), array_except(x,y) - codepoint() ### Misc - IntをIntegerとして使える ### future works - FB HQでpresto meetup - disk spill - warning framework - 前のバージョンでdeprecatedなど機能はwarningを出す - cost based optimizer ### caution - deprecated.legacy-order-by - SQL準拠のせいで失敗するクエリがある - deprecated.legacy-map-subscript - Map型について、キーに値がない場合、このフラグがあるとしのげる - 0.179 - deprecated.legacy-order-by - complex grouping operation/legacy_order_byのコンボを使うとクエリがエラーになる 0.179のリリースノートを見てね!