google bigqueryについて 紹介と推測

24
Google BigQueryについて 紹介と推測 2015/01/19 #osaka_impala_meetup01 玉川竜司

Upload: -

Post on 18-Jul-2015

1.972 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Google BigQueryについて 紹介と推測

Google BigQueryについて 紹介と推測

2015/01/19 #osaka_impala_meetup01

玉川竜司

Page 2: Google BigQueryについて 紹介と推測

自己紹介• 玉川竜司

• FB: Ryuji Tamagawa

• Twitter: @tamagawa_ryuji

• 本業ソフト開発(Sky株式会社)

• 兼業翻訳者(ほぼオライリー)

Page 3: Google BigQueryについて 紹介と推測

Impalaのフリー電子書籍あります

http://www.oreilly.co.jp/books/9784873116723/

Page 4: Google BigQueryについて 紹介と推測

What’s Next • 著者の方が大変親切、かつBigQuery愛が感じられます

• 私:「ここ、動かないんだけど」Tigani:「あ、書いた時にはそれ実装される予定だったんだわ。結局ボツになって実装されなかったんで、削ってくれたらいいよ」私:「さいですか」

• たぶん3月発売!!

Page 5: Google BigQueryについて 紹介と推測

今日の内容

• BigQueryの概要

• BigQueryのいいところ

• BigQueryの気になるところ

• BigQueryの特徴的な機能から推測する実装

Page 6: Google BigQueryについて 紹介と推測

BigQueryの概要

Page 7: Google BigQueryについて 紹介と推測

BigQueryの概要• ビッグデータに対してSQLで分析を行うフルマネージドサービス

• OLTPのためのものではなく、OLAPよりのサービス

• 行を追記していくことはできるが、行の更新はできない

• 基本的には、RDBと同じデータモデル。テーブルにデータを保存していく。

• ただし、repeated fieldやrecord fieldといった拡張機能もある。この辺は、利便性とRDBとの互換性とのトレードオフ。

Page 8: Google BigQueryについて 紹介と推測

BigQueryの概要• WebのUIからインタラクティブにクエリを実行することも、APIを叩いてクエリを実行することもできる

• コマンドラインツールやPython、Javaなどのクライアントライブラリが用意されている

• データのインポートは、CSVもしくはJSONで。Google Cloud Storageを経由するか、直接APIでインポート。

• AdSenseなど、Googleの他のサービスからは直接データを渡してもらえることも

Page 9: Google BigQueryについて 紹介と推測

BigQueryの課金体系• 課金は、保存ストレージとクエリでスキャンしたデータ量に対してかかる

• ストレージ:$0.020(GB 単位/月)。 S3($0.0300 /GB)より安い

• クエリ:$5(処理容量単位: TB)

• dry-runでクエリがスキャンするデータ量を事前に確認できる

• 特定のユーザーがデータセンターのリソースを食いつぶさないように、様々な負荷制限あり

Page 10: Google BigQueryについて 紹介と推測

BigQueryのいいところ

Page 11: Google BigQueryについて 紹介と推測

BigQueryのいいところ

• お手軽(RDB/SQLが分かっていれば、ほんとにすぐに使えます)

• 速い(50GB/Secは出るらしい。インタラクティブではないけど)

• 安い(バックエンドでは圧縮保存ですが)

• Googleの強力なインフラがあって初めて上記が成り立つ

Page 12: Google BigQueryについて 紹介と推測

BigQueryのいいところ(2)• 外部連携

• ODBCドライバあります

• http://www.simba.com/connectors/google-bigquery-odbc

• Google Spreadsheet、Excel、Tableauなども連携容易

• 裏方を少し知っておくと、パフォーマンスやコスト面でメリット大

Page 13: Google BigQueryについて 紹介と推測

BigQueryの気になるところ

• アクセスの手段がBigQuery SQLに限定される

• 1つのデータソースを多元的に活用したい場合はちょっと手間かも

• 時々機嫌が悪くなる

Page 14: Google BigQueryについて 紹介と推測

BigQueryの特徴的な機能からいろいろ推測※ あくまで私の個人的な推測ですので、なんの保障もありません

Page 15: Google BigQueryについて 紹介と推測

トピック

• クエリの実行から見るGoogleのインフラ

• クエリと匿名テーブル

• 列指向ストレージと圧縮

• ストレージのバックエンド更新とスナップショットデコレータ

Page 16: Google BigQueryについて 紹介と推測

クエリの実行の様子• 簡単に言えば、クエリの内容に応じてコンピュートノードのツリーを動的に構成し、そこに大量のディスクから一気にデータを流す

• テーブルのデータは必ずフルスキャン

• 単純に見えるものの、こうすることができるのは、超高速なネットワーク、強力なストレージレイヤー、大量のリソースをバースト的に突っ込んで動的に構成できるインフラがあるからこそ

• この辺のインフラの細かいところはGoogleさんの藪の中

コンピュート ノード

コンピュート ノード

コンピュート ノード

コンピュート ノード

コンピュート ノード

コンピュート ノード

ディスク

ディスク

ディスク

ディスクディスク

ディスク

ディスク

ディスク

ディスク

ディスク

ディスク

ディスクディスク

ディスク

ディスク

ディスクディスク

ディスク

ディスク

Page 17: Google BigQueryについて 紹介と推測

クエリの実行の様子(2)• GROUP BYやJOINの処理は、コンピュートノードのメモリ容量に制約を受ける

• コンピュートノードにデータが収まらなければResource Exceed Error

• データの量や分布によって、EACHオプションを使い、シャッフルを強制しなければならないケースもある。大きいテーブル同士のJOINなど

• データの量、分布をユーザーが意識しなければならないケースは(今のところ)なくなっていない

コンピュート ノード

コンピュート ノード

コンピュート ノード

コンピュート ノード

コンピュート ノード

コンピュート ノード

ディスク

ディスク

ディスク

ディスクディスク

ディスク

ディスク

ディスク

ディスク

ディスク

ディスク

ディスクディスク

ディスク

ディスク

ディスクディスク

ディスク

ディスク

コンピュート ノード

Page 18: Google BigQueryについて 紹介と推測

クエリの実行の様子(3)• デフォルトでは、クエリが最終的に返す結果は、それほど大きくならないことが想定されている

• 大きなデータを返す場合、最終出力を複数のコンピュートノードから行ってパフォーマンスを上げることもできる(allow_large_result)

• この場合、保存先のテーブルを明示的に指定する必要があり、保存先のストレージ容量に対する課金も生ずる(destination_table)

コンピュート ノード

コンピュート ノード

コンピュート ノード

コンピュート ノード

コンピュート ノード

コンピュート ノード

ディスク

ディスク

ディスク

ディスクディスク

ディスク

ディスク

ディスク

ディスク

ディスク

ディスク

ディスクディスク

ディスク

ディスク

ディスクディスク

ディスク

ディスク

コンピュート ノード

コンピュート ノード

ディスク

ディスク

ディスク

ディスク

ディスク

ディスク

ディスク

ディスク

ディスク

ディスク

Page 19: Google BigQueryについて 紹介と推測

クエリと匿名テーブル• クエリの実体は、テーブルからデータを読み取り、データを加工し、その結果を別のテーブルに出力するジョブ

• デフォルトでは、クエリの結果は匿名テーブルに出力されている。この匿名テーブルは7日間保存され、課金されない

• この匿名テーブルの名前は、クエリの文字列、クエリが読み取るテーブルの最終更新時刻から生成されている

tablename:foo lastupdate:2015-01-20

Query: SELECT …

tablename:f( foo, 2015-01-20, SELECT…)

Page 20: Google BigQueryについて 紹介と推測

クエリと匿名テーブル(2)• クエリの実行時には、そのクエリの結果が保存されている匿名テーブルがないかがまずチェックされる

• ダッシュボードなど、頻繁に同じクエリが実行されるようなアプリケーションでは、この機能をうまく使うと、コードを単純に保ったまま、高速かつ低コストにできる

tablename:foo lastupdate:2015-01-20

Query: SELECT …

tablename:xxxxxxxxxxx

if exists f(foo, 2015-01-20, SELECT…) ?

Page 21: Google BigQueryについて 紹介と推測

列指向ストレージと圧縮• BigQueryのデータはColumnIOという列指向のフォーマットで保存される

• データは列ごとに保存され、圧縮される。もちろん、1つの列も複数のディスクに分散配置されている

• データはバックグラウンドで再編成される。そのため、圧縮後のデータ容量はユーザーから見えないところで変化しうる

• そのため、課金は非圧縮状態の容量に対して行われるので、安い感じになる

001 Osaka Tamagawa 1234

002 Tokyo Shimauchi 4321

003 Tokyo Shimauchi 2323

003 Tokyo Kobayashi 0001

004 Sapporo Sato 5678

005 Sapporo Sato 7863

Page 22: Google BigQueryについて 紹介と推測

スナップショットデコレータ• スナップショットデコレータを使うと、ある時刻のテーブル(過去7日以内)にアクセスできる。範囲指定も可能。

• SELECT foo, bar from wikipedia@1386465812000

• SELECT foo, bar from wikipedia@1386465812000-1386465899999

• 行の挿入方法は2種類用意されている。バッチ処理とストリーミング。

• ここから想像するに、ユーザーの利便性、インフラに生ずる保存のコスト、クエリのコストを最適化するために…

Page 23: Google BigQueryについて 紹介と推測

Log Structured Merge Treeみたいなことをやっている?

2015/1/10 1:00時点

~2015/1/11 1:00

~2015/1/12 1:00

} 2015/1/12 1:00時点

~2015/1/13 1:00

Page 24: Google BigQueryについて 紹介と推測

まとめ• とてもお手軽に使い始めることができるビッグデータの分析サービス

• 裏方を少し学んでおくと、便利な仕掛けがたくさんあります

• Googleのインフラはすごいけど、ストレージデバイスやコンピュートノードは、やはりコモディティ製品っぽい。どうなってるのかいろいろ想像すると楽しいです