by shigemk2

当面は技術的なことしか書かない

memo Presto Updates to 0.178 #prestodb

  • 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のリリースノートを見てね!