Google BigQuery: 100万行チャレンジ
CData JDBC Driver を使用して、100万行のデータを約20分で Google BigQuery にアップロードできます。
これは Google 提供のドライバーでは実現できないパフォーマンスです。
この記事のパフォーマンス指標は、2017年10月時点で利用可能な最新のドライバーで測定されたものです。最新のパフォーマンス指標については、更新版の記事をご覧ください。
BigQuery データアップロードにおける圧倒的なパフォーマンス
複数の関連記事で解説しているように、CData ドライバーはパフォーマンスにおいて業界をリードしています。CData の開発チームは、データの読み書き処理のパフォーマンス最適化に膨大な時間を費やしており、ドライバーがお客様のビジネス成功を妨げるボトルネックにならないよう努めています。
Google BigQuery においては、100万行のデータをテーブルにアップロードする処理を約20分で完了できます。Google BigQuery のドキュメントによると、Google 提供のドライバーは「BigQuery のクエリインターフェースを活用」しますが、「BigQuery の大規模インジェストメカニズムやエクスポート機能は活用しない」とされています。「少量の INSERT リクエストを発行する」ことはできますが、大規模なデータセットをロードしようとすると、BigQuery Data Manipulation Language のレート制限に達してしまいます。
テストの概要
このテスト結果を再現するには、CData JDBC Driver for Google BigQuery のトライアル版をダウンロードし、BigQuery テーブルを設定するだけです。これで、他のどのドライバーよりも高速にデータをロードする CData の違いを体験していただけます。この記事では、シンプルなカスタム Java アプリケーションを使用しました。CData ドライバーは幅広い製品ラインナップを提供しているため、Excel、SSIS、PowerShell はもちろん、JDBC、ODBC、ADO.NET をネイティブサポートする各種ツールとも連携できます。
- BigQuery テーブルを設定します。このサンプルでは、公開されている nyc-tlc プロジェクトの yellow データセットに含まれる trips テーブルをモデルにしたデータを使用しました(https://cloud.google.com/bigquery/public-data/nyc-tlc-trips)。
- CData JDBC Driver for Google BigQuery の無償トライアル版をダウンロードします。
- サンプルデータの CSV ファイルをダウンロードします。
- CSV ファイルからデータをバッチ処理し、各バッチを Google BigQuery にロードするシンプルなアプリケーションを作成します。このアプリケーションでは、PreparedStatement の addBatch() メソッドを使用して、各バッチのサイズを最大化し(これにより Google BigQuery への呼び出し回数を最小限に抑えます)ています。
サンプルコード
//1バッチの処理 Connection connection = DriverManager.getConnection("jdbc:googlebigquery:InitiateOAuth=GETANDREFRESH;QueryPassthrough=false;ProjectId=" + projectId + ";DatasetId=" + datasetId + ";Timeout=240;UseLegacySQL=false;"); String cmd = "INSERT INTO TestDataset2.nyc_yellow_trips_copy (vendor_id, pickup_datetime, dropoff_datetime, pickup_longitude, pickup_latitude, dropoff_longitude, dropoff_latitude, rate_code, passenger_count, trip_distance, payment_type, fare_amount, extra, mta_tax, imp_surcharge, tip_amount, tolls_amount, total_amount, store_and_fwd_flag) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; PreparedStatement pstmt = connection.prepareStatement(cmd); for (int row = 0; row < rows.length; row++){ String[] line = rows[row].split(","); for (int i = 0 ; i < line.length; i++) { //データ型に基づいてパラメータを追加 if ( (i < 3) || (i ==7) || (i==10) || (i==18) ) { pstmt.setString(i + 1, line[i]); } else if (i == 8) { pstmt.setInt(i+1, Integer.parseInt(line[i])); } else { pstmt.setDouble(i+1, Double.parseDouble(line[i])); } } pstmt.addBatch(); } int[] affected = pstmt.executeBatch(); - アプリケーション/ワークフローを実行します。
テスト結果
以下は、100万行を100バッチに分けてロードした結果です(1バッチあたりの最大行数は10,000行)。各バッチの処理時間(ナノ秒)と、全データセットの挿入に要した合計時間(約20分20秒)を表示しています:

詳細情報と無償トライアル
数百万件のレコードを Google BigQuery に一括アップロードできること(しかも高速に!)は、CData ドライバーを使用するメリットの一つに過ぎません。CData の高機能で高パフォーマンスなドライバーを使用すれば、クラウドベースでもオンプレミスでも、SaaS でもアプリケーションベースでも、NoSQL でも RDBMS でも、あらゆるデータに対して統一されたエクスペリエンスを得られます。さらに、ワールドクラスのサポートチームがバックアップします。Google BigQuery ドライバーの30日間無償トライアルをダウンロードして、CData の違いをぜひ体験してください。