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