BigQuery 用 JDBC および ODBC ドライバーの比較
この記事のパフォーマンス指標は、2017年5月時点で入手可能な最新のドライバーを使用して測定されたものです。最新のパフォーマンス指標については、更新版の記事をご覧ください。
BigQuery は「Google が提供するフルマネージド型のペタバイト規模の低コストエンタープライズデータウェアハウス」であり、データを保存・アクセスするための堅牢で広く利用されている方法を提供します。多くの企業にとって、Google BigQuery はクラウドベースの分析プラットフォームの第一選択肢です。BigQuery はクラウドベースであるため、データベース管理者は不要で、インフラストラクチャを維持する必要もありません。
準備
この記事では、Google がサポートする ODBC Driver for Google BigQuery 2.0.6.10111 と CData Software ODBC Driver for Google BigQuery 20162、および Google がサポートする JDBC Driver for Google BigQuery 1.0.6.10081 と CData Software JDBC Driver for Google BigQuery 20163 を比較します。再現可能な比較を提供するため、公開されている nyc-tlc プロジェクト4の yellow データセット内の trips テーブル(テーブル ID: nyc-tlc:yellow.trips)をプライベートデータセットにコピーしました。わかりやすくするため、テストテーブルの名前を nyc_yellow_trips に変更しました。
テストマシンの仕様は以下のとおりです。
オペレーティングシステム: Windows 7 Ultimate, SP1
プロセッサ: Intel® CoreTM i3-2120 CPU @ 3.30GHz
搭載メモリ (RAM): 8.00 GB
システムの種類: 64 ビットオペレーティングシステム
ドライバー同士を横並びで比較しているため、マシン自体のパフォーマンスは比較的重要ではありません。重要なのは、ドライバー間の相対的な比較です。
比較
テーブルの詳細は以下のとおりです。
| テーブルサイズ | テーブルの行数 | カラム数 | ||
|---|---|---|---|---|
| 130 GB | 1,108,779,463 | 19 |
この調査の主な目的は、ドライバーの相対的なパフォーマンスを比較することでした。各ドライバーで同じクエリを実行して比較を行いました。実行したクエリは以下のとおりです。
- SELECT * FROM nyc_yellow_trips LIMIT 100000
- SELECT * FROM nyc_yellow_trips LIMIT 1000000
- SELECT * FROM nyc_yellow_trips LIMIT 10000000
結果
ODBC ドライバーについては、ADO.NET コンソールアプリケーションから DSN を使用して BigQuery に接続し、上記のクエリを繰り返し実行しました。結果は読み取られ、各行ごとに新しい文字列変数に格納されました。以下のグラフに表示されている時間は平均値に基づいており、ネットワークトラフィックの急増などによる外れ値を平準化するためのものです。
| ドライバー別クエリ時間(秒) | ||||
|---|---|---|---|---|
| クエリ | Google ODBC | CData ODBC | Google JDBC | CData JDBC |
| 1 (100,000 行) | 34.07 | 16.68 (+104%) | 71.63 | 18.99 (+277%) |
| 2 (1,000,000 行) | 461.63 | 233.56 (+98%) | 318.04 | 149.11 (+113%) |
| 3 (10,000,000 行) | * | 1,748.94 | ** | 1,771.29 |
* Google ODBC ドライバーでは、System.StackOverflowException が発生し、1,000万行を取得できませんでした。
** Google JDBC ドライバーでは、1,000万行について一貫した結果を得ることができませんでした。"Error fetching results from server." や "Error trying to obtain Google BigQuery object." などのエラーが頻繁に発生しました。
結果からわかるように、CData ドライバーは大規模な結果セットを処理する際に Google ドライバーを大幅に上回り、定期的に2倍の速さで結果を取得・処理しました。注目すべき点として、CData ドライバーは1,000万行を一貫して処理できましたが、Google ODBC ドライバーはそれほど大きな結果セットを処理できず、Google JDBC ドライバーもまれにしか処理できませんでした。
各クエリの平均実行時間を以下のグラフで比較しています。
結論
CData ドライバーのパフォーマンスは、Google がサポートするドライバーを大きく上回っています。CData の開発者は、Google から返される結果の処理パフォーマンスを最適化するために膨大な時間を費やしてきました。その結果、ドライバーの制約はネットワークトラフィックとサーバー処理時間のみとなっています。このパフォーマンスの優位性は、特に大量のデータを処理する必要がある場合に顕著です。
参考資料
- Google ドライバー
- CData ODBC ドライバー
- CData JDBC ドライバー
- https://cloud.google.com/bigquery/public-data/nyc-tlc-trips
関連記事
- Google BigQuery: 100万行チャレンジ - CData JDBC ドライバーを使用して Google BigQuery に100万行をアップロードするチャレンジに取り組みました。

