Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

爆速クエリエンジン”Presto”を使いたくなる話

19,694 views

Published on

Prestoの導入メリットのほか、HiveQLからPrestoへの書き換えTipsを紹介します

Published in: Technology
  • Be the first to comment

爆速クエリエンジン”Presto”を使いたくなる話

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

×