爆速クエリエンジン”presto”を使いたくなる話
TRANSCRIPT
![Page 1: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/1.jpg)
page
Apr, 2015
24th
!
爆速クエリエンジン”Presto”を使いたくなる話
1
![Page 2: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/2.jpg)
page
1. 自己紹介
2
![Page 3: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/3.jpg)
![Page 4: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/4.jpg)
お知らせ
![Page 6: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/6.jpg)
page
1. 自己紹介 2. Prestoを使う理由 3. HiveからPrestoへの書換Tips 4. まとめ
本日の流れ
6
![Page 7: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/7.jpg)
page
2. Prestoを使う理由
7
![Page 8: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/8.jpg)
page
Prestoのメリット
8
クエリ処理が高速 トライ&エラーを繰り返しやすい 学習コストが低い
ANSI標準SQLに従って作られているため 分析・集計が捗る
WITH句・WINDOW関数が使える
![Page 9: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/9.jpg)
page
PrestoとHiveの使い分け
9
Presto 長くても2~3分で終わる集計に最適 コンパクトな処理をすばやく実行したい時
Hive 数分以上~数時間掛かるバッチクエリ メモリに乗り切らないオーダーの処理
JOIN数が多い時ないし、JOINの条件が文字列である時 結果セットが数百万行、文字列型カラム多数の時
![Page 10: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/10.jpg)
page
Prestoのスピード
10
SELECT count(1) FROM access WHERE status = … 約150億行のレコードに対して実行
Presto: 36秒
Hive: 12分20秒
![Page 11: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/11.jpg)
page
Prestoのスピード
11
![Page 12: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/12.jpg)
page
Presto雑感
12
WITH句がとても便利(可読性・UNION句での再利用性)
CASTを使うことが思いのほか多い
LIKE句よりregexp_like()が速いので積極的に使うべき
JOIN結果が数十~数百万行となるクエリで、文字列型のキーを使うとメモリを使い切って失敗する
TreasureDataにはsmart_digestがあるのでそれを使うと吉
ハッシュ関数の衝突確率を下げるため、substr()を用いた文字列の先頭一致も併せて行いましょう
![Page 13: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/13.jpg)
page
WITH句の例
13
WITH t1 AS ( SELECT ... FROM ...), t2 AS ( SELECT ... FROM ...)SELECT ...FROM t1 INNER JOIN t2 USING(id)
![Page 14: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/14.jpg)
page
WITH句の例
14
WITH t1 AS ( SELECT ... FROM ...)SELECT … FROM t1 WHERE …UNION ALLSELECT … FROM t1 WHERE …UNION ALLSELECT … FROM t1 WHERE …
![Page 15: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/15.jpg)
page
3. HiveからPrestoへの書換Tips
15
![Page 16: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/16.jpg)
page
HiveからPrestoへの書換Tips
16
正規表現のエスケープ挙動 select regexp_extract('(123)', '^\((.+)\)$', 1)
Hive: (123) Presto: 123
select regexp_extract('(123)', '^\\((.+)\\)$', 1) Hive: 123 Presto: ※空文字
![Page 17: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/17.jpg)
page
HiveからPrestoへの書換Tips
17
INT型の割り算で結果がFLOAT/DOUBLE型となるとき
select 3 / 2 as division Hive: 1.5 Presto: 1
select CAST(3 AS DOUBLE) / 2 as division Hive: 1.5 Presto: 1.5 ※ 全てがINT型とならないようにいずれかをCASTする
![Page 18: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/18.jpg)
page
HiveからPrestoへの書換Tips
18
substr()などでマルチバイト文字列を扱うとき
select substr('日本語学校', 1, 3)
Hive: 日本語
Presto: 日
!
Prestoは文字列をASCIIとして扱うためであるUTF-8文字は1文字3バイトとなる
![Page 19: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/19.jpg)
page
HiveからPrestoへの書換Tips
19
length()などでマルチバイト文字列を扱うとき
select length('日本語学校')
Hive: 5 Presto: 15 !
Prestoは文字列をASCIIとして扱うためであるUTF-8文字は1文字3バイトとなる
![Page 20: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/20.jpg)
page
HiveからPrestoへの書換Tips
20
文字列置換関数はtranslate()ではなくreplace()を使う
その他は、Qiita記事にまとめています
Hadoop利用者ならきっと知ってる、Hive/Prestoクエリ関数の挙動の違いhttp://qiita.com/y-ken/items/400b7c70c324ac67af02
![Page 21: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/21.jpg)
![Page 22: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/22.jpg)
page
4. まとめ
22
![Page 23: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/23.jpg)
page
まとめ
23
とてもクエリ実行が速いため調査・分析業務が捗る MySQLテーブルをHadoopにインポートしてJOINしている
Prestgresを用いるとPostgreSQLのように使えるので便利
TreasureDataのオプションサービス契約して良かった
![Page 24: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/24.jpg)
page
まとめ
24
2015年4月現在、マルチバイト対応が甘い リソースコントロールが甘い 重たいクエリがノードのリソースを使い切ってしまう SELECTするカラムvarchar型が多いとき、HiveQLより極端に遅くなることがあったがpresto v0.100現在は解消 日々改善・進歩しているため、今後に期待
![Page 25: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/25.jpg)
page
宣伝
25
サーバ/インフラエンジニア養成読本ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus) 出版社/メーカー: 技術評論社 定価: 本体1,980円+税
![Page 26: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/26.jpg)
お知らせ
![Page 27: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/27.jpg)
![Page 28: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/28.jpg)
![Page 29: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/29.jpg)
![Page 30: 爆速クエリエンジン”Presto”を使いたくなる話](https://reader036.vdocuments.mx/reader036/viewer/2022062514/55a706d91a28ab58348b48d0/html5/thumbnails/30.jpg)
page
Thanks!
30
ご清聴ありがとうございました。