BigQueryの何がすごいのか?
既に語り尽くされてそうな話ではありますが、自分なりにまとめないとアタマに入らないのでドキュメントの整理も兼ねて、ポイントをまとめてみます。
BigQueryとは何か?
Google Cloud Platformでは、"BigQuery is Google's fully managed, petabyte scale, low cost analytics data warehouse." と紹介されており、主要なユースケースとして、大規模データに対するアドホックで試行錯誤を要するインタラクティブなクエリが想定されています。
Technical White Paper: An Inside Look at Google BigQueryに書かれているケースがより具体的です。
Can you imagine how Google handles this kind of Big Data during daily operations? Just to give you an idea, consider the following scenarios:
- What if a director suddenly asks, “Hey, can you give me yesterday’s number of impressions for AdWords display ads – but only in the Tokyo region?”.
- Or, “Can you quickly draw a graph of AdWords traffic trends for this particular region and for this specific time interval in a day?”
普通のウェブサービスならいざ知らず、Googleの規模でこれを実現するのはなかなか大変です。例えば、Google Searchは世界中のウェブサイトを扱っているわけで。。
で、Googleの内部で開発されたのが、Dremel という技術で、これを外部に公開したのがBigQueryです。
BigQueryの何がすごいのか?
一言で言うなら、1000億行クラスのデータセットに対して、何の事前準備もなくフルスキャンしても数十秒のオーダーで結果が返ってくること。
この事実だけを聞いても最初はピンと来なかったんですが、 Anatomy of a BigQuery Query | Google Cloud Big Data and Machine Learning Blog | Google Cloud Platformを読むと次元の違うことをやっていることがよくわかります。
詳しくは記事参照ですが、100 billion rows のテーブルに対して正規表現によるマッチを行い、30秒以内に結果を返すということは少なくとも
- About 330 100MB/sec dedicated hard-drives to read 1TB of data
- A 330 Gigabit network to shuffle the 1.25 TB of data
- 3,300 cores to uncompress 1TB of data and process 100 billion regular expressions at 1 μsec per
というリソースを同時稼働させてるということです。
この規模のリソースを事前準備なしにボタンを押すだけで扱えるとは。。。BigQuery恐るべし。。
BigQueryの中を覗く
じゃあ、一体どうやって実現しているんだろうかという疑問が湧きますが、
Technical White Paper: An Inside Look at Google BigQuery や Dremel: Interactive Analysis of Web-Scale Datasetsを読むと、BigQueryの内側を垣間見ることができます。White Paperによると、前例のないレベルのパフォーマンスは2つのコア技術により支えられているとのこと。
1. Columnar Storage
出典: Dremel: Interactive Analysis of Web-Scale Datasets
BigQueryはColumnar Storageを採用しており、アイデアそのものはデータウェアハウス向けのDBではよくある設計。 BigQuery(あるいはDremel)を特徴づけるのは、数千台のサーバーのコンピューティングパワーを活用し、クラウドサービスとして提供していること。
2. Tree Architecture
数千台のマシンでクエリを分散実行し、最終的に秒オーダーで結果を集約することが設計におけるチャレンジで、DremelではTree Architectureを採用しているらしいです。
出典: BigQuery under the hood | Google Cloud Big Data and Machine Learning Blog | Google Cloud Platform
Treeのリーフは「スロット」と呼ばれ、データの読み出しと計算を担当しており、Treeの枝は「ミキサー」と呼ばれ、集約を担当しています。
ネストされたデータ・繰り返しデータを扱える
Loading Data | BigQuery | Google Cloud Platform や Querying Nested and Repeated Fields in Legacy SQL | BigQuery | Google Cloud Platform にて紹介されていますが、BigQueryはネストや繰り返しのあるJSONを扱うことができます。
まとめというか感想
ドキュメントを読んでまとめただけですが、BigQueryの中が少し分かった気になりました。 ともかく凄いの一言に尽きます。