BigQuery 用の ODBC ドライバを使用する
BigQuery 用の Open Database Connectivity(ODBC)ドライバを使用すると、Java 以外のアプリケーションを BigQuery に接続して、任意のツールとインフラストラクチャで BigQuery の機能を使用できます。Java アプリケーションを BigQuery に接続するには、BigQuery 用の JDBC ドライバを使用します。
BigQuery 用の ODBC ドライバは、Apache 2.0 ライセンスで使用できます。
始める前に
ODBC ドライバとドライバ マネージャーについて理解しておいてください。
オペレーティング システムが次の要件を満たしていることを確認します。
オペレーティング システム サポートされているアーキテクチャ 最小バージョンと依存関係 Windows 32 ビット(x86)、64 ビット(x64) バージョン: Windows 10、Windows Server 2016 以降
依存関係: Microsoft Visual C++ 再頒布可能パッケージ(Visual Studio 2019 または 2022 用)macOS 64 ビット(x86_64)、ARM64(Apple シリコン) バージョン: macOS 12(Monterey)以降
依存関係: ODBC ドライバ マネージャー(unixODBC など)。インストール ディレクトリをDYLD_LIBRARY_PATHに追加してください。Linux 64 ビット(x86_64) バージョン: glibc 2.27 以降(Ubuntu 20.04 LTS 以降、Debian 11 以降など)を含むディストリビューション
依存関係: ODBC ドライバ マネージャー(unixODBC など)。インストール ディレクトリをLD_LIBRARY_PATHに追加してください。BigQuery に対して認証し、次の情報をメモします。この情報は、後で BigQuery 用 ODBC ドライバとの接続を確立するときに使用します。使用する認証方法に対応する情報のみをメモする必要があります。
認証方法 認証情報 例 接続プロパティ(後で設定) 標準サービス アカウント サービス アカウント キー(JSON オブジェクト) my-sa-keyKeyFilePathWorkload Identity 連携または Workforce Identity 連携 外部アカウント構成ファイルのオーディエンス プロパティ //iam.googleapis.com/locations/global/...BYOID_AudienceUrlトークン取得と環境情報ファイル {"file":"/path/to/file"}BYOID_CredentialSourceユーザー プロジェクト(Workforce プールの場合のみ) my_projectBYOID_PoolUserProjectSTS トークンのタイプ id_tokenBYOID_SubjectTokenTypeSTS トークン交換エンドポイント https://sts.googleapis.com/v1/tokenBYOID_TokenUrlアプリケーションのデフォルト認証情報 なし なし なし
ODBC ドライバをインストールして構成する
BigQuery 用の ODBC ドライバは、Windows オペレーティング システムと Windows 以外のオペレーティング システムのどちらでもインストールして構成できます。
Windows
アプリケーションのアーキテクチャに対応するドライバをインストールします。
- 32 ビット アプリケーション用の
ODBCDriverforBigQuery_windows_x86.msiファイルをダウンロードします。 - 64 ビット アプリケーション用の
ODBCDriverforBigQuery_windows_x64.msiファイルをダウンロードします。
- 32 ビット アプリケーション用の
次の手順でデータソース名(DSN)を作成します。
- Windows の [スタート] メニューから [ODBC データソース] に移動し、クライアント アプリケーションと同じビット数のバージョンを選択します。
- [ODBC データソース アドミニストレータ] ページで、[ドライバ] タブをクリックします。
- インストールされている ODBC ドライバのリストで、[ODBC Driver for BigQuery] を見つけます。
- [システム DSN] タブを選択してすべてのユーザーの DSN を作成するか、[ユーザー DSN] タブを選択して現在のユーザーの DSN を作成します。一般に、システム DSN が推奨されます。一部のアプリケーションは異なるユーザー アカウントを使用してデータを読み込み、他のユーザー DSN を検出しない可能性があるためです。
- [追加] をクリックします。
- [新しいデータソースの作成] ダイアログで、[ODBC Driver for BigQuery] を選択し、[完了] をクリックします。[ODBC Driver for BigQuery DSN Setup] ダイアログが開きます。
- [データソース名] フィールドに、DSN の名前を入力します。
- 接続プロパティを追加します。プロパティの一覧については、接続プロパティをご覧ください。
Windows 以外
オペレーティング システムに対応するドライバをインストールします。
- Linux 用の
ODBCDriverforBigQuery_linux_latest.zipファイルをダウンロードします。 - macOS 用の
ODBCDriverforBigQuery_macos_latest.tar.gzファイルをダウンロードします。
- Linux 用の
ダウンロードした ZIP ファイルまたは TAR ファイルの内容を抽出します。
ZIP ファイルまたは TAR ファイルの内容を、コネクタをインストールするディレクトリに移動します。BigQuery 用の ODBC ドライバの共有オブジェクト パスは
INSTALL_DIR/lib/libgoogle_cloud_odbc_bq_driver.soです。ここで、INSTALL_DIRはインストール ディレクトリです。コネクタの新しいパスを反映するように
.iniファイルを更新します。次の例では、Linux システムの
.iniファイルを更新します。unzip linux_odbc-driver.VERSION.zip -d linux_odbc-driver.VERSION/ cd ./linux_odbc-driver.VERSION export INSTALL_DIR=$(pwd) export ODBCINI=$INSTALL_DIR/odbc.ini export ODBCINSTINI=$INSTALL_DIR/odbcinst.ini export GOOGLEBIGQUERYODBCINI=$INSTALL_DIR/googlebigqueryodbc.ini
VERSIONはドライバのバージョンに置き換えます。
接続を確立する
BigQuery 用 ODBC ドライバを使用してアプリケーションと BigQuery の間に接続を確立するには、接続文字列を特定します。DSN を使用して接続プロパティをすでに構成している場合は、この手順をスキップできます。
接続文字列の形式は次のとおりです。
Driver=ODBC Driver for BigQuery;ProjectId=PROJECT_ID;OAuthType=AUTH_TYPE;AUTH_PROPS;OTHER_PROPS
次のように置き換えます。
PROJECT_ID: BigQuery プロジェクトの ID。AUTH_TYPE: 使用した認証のタイプを指定する数値。次のいずれかを選択します。0: サービス アカウント認証用3: アプリケーションのデフォルト認証情報による認証の場合4: Workload Identity 連携または Workforce Identity 連携の認証の場合
AUTH_PROPS: BigQuery への認証時にメモした認証情報。property_1=value_1; property_2=value_2;...形式で指定します。たとえば、サービス アカウントで認証した場合はKeyFilePath=my-sa-keyです。OTHER_PROPS(省略可):property_1=value_1; property_2=value_2;...形式で指定された ODBC ドライバの追加の接続プロパティ。接続プロパティの一覧については、接続プロパティをご覧ください。
接続プロパティ
ODBC ドライバの接続プロパティは、データベースへの接続を確立するときに接続文字列に含める構成パラメータです。BigQuery 用の ODBC ドライバは、次の接続プロパティをサポートしています。
| 接続プロパティ | 説明 | デフォルト値 | データの種類 | 必須 |
|---|---|---|---|---|
AdditionalProjects |
ProjectId プロパティで設定されたプライマリ プロジェクトに加えて、ドライバがクエリとメタデータ オペレーションでアクセスできるプロジェクト。 |
なし | カンマ区切りの文字列 | いいえ |
AllowHtapiForLargeResults |
ドライバが BigQuery Storage Read API を使用できるかどうかを決定します。 | 0 |
ブール値 | いいえ |
AllowLargeResults |
QueryDialect プロパティが BIG_QUERY に設定されている場合に、ドライバが 128 MB を超えるクエリ結果を処理するかどうかを決定します。QueryDialect プロパティが SQL に設定されている場合、ドライバは常に大規模なクエリ結果を処理します。 |
0 |
ブール値 | いいえ |
BYOID_AudienceUrl |
Workload Identity プールまたは Workforce プールのリソース名と、そのプール内のプロバイダ ID が含まれます。 | なし | 文字列 | OAuthMechanism=4 の場合のみ |
BYOID_CredentialSource |
トークン自体を取得するために必要な情報と、環境情報を設定します。 | なし | 文字列 | OAuthMechanism=4 の場合のみ |
BYOID_PoolUserProject |
Workload Identity プールではなく Workforce Pool の場合は、プロジェクトを設定します。 | なし | 文字列 | OAuthMechanism=4 を使用し、Workforce Pool を使用している場合のみ |
BYOID_SubjectTokenType |
Oauth2.0 トークン交換仕様に基づいて STS トークンタイプを設定します。推定値は次のとおりです。
|
なし | 文字列 | OAuthMechanism=4 の場合のみ |
BYOID_TokenUrl |
STS トークン交換エンドポイントを設定します。 | https://sts.googleapis.com/v1/token |
文字列 | いいえ |
DefaultDataset |
データセットを明示的に指定せずにクエリを実行するときに、ドライバが自動的に参照するプロジェクト内の指定されたデータセットとして機能します。 | なし | 文字列 | いいえ |
FilterTablesOnDefaultDataset |
テーブルまたは列のメタデータ メソッドが返すメタデータのスコープを決定します。false の場合、フィルタリングは行われません。フィルタリングを有効にするには、DefaultDataset プロパティも設定する必要があります。 |
FALSE |
ブール値 | いいえ |
EnableSession |
接続がセッションを開始するかどうかを決定します。有効にすると、その特定の接続で実行される最初のクエリがセッションを開始し、ドライバはセッション ID を後続のすべてのクエリに渡します。 | 0 |
ブール値 | いいえ |
JobCreationMode |
低遅延クエリパスを有効にします。次のいずれかを選択します。
|
2 |
Integer | いいえ |
KeyFilePath |
サービス アカウント認証を使用する場合のサービス アカウント キーのパス。 | なし | 文字列 |
OAuthMechanism=0 の場合のみ
|
KMSKeyName |
データの暗号化と復号に使用する KMS 鍵の名前を指定します。 | なし | 文字列 | いいえ |
LargeResultsDataSetId |
大規模なクエリ結果を格納する宛先データセットを指定します。 | なし | 文字列 | いいえ |
LargeResultsDatasetExpirationTime |
大規模な結果データセット内のすべてのテーブルの有効期間をミリ秒単位で指定します。 | 3600000 |
長い | いいえ |
Location |
ドライバがデータセットを作成またはクエリするロケーションを指定します。 | なし | 文字列 | いいえ |
LogLevel |
やり取り中にドライバが記録する詳細を制限します。次のいずれかを選択します。
|
0 |
Integer | いいえ |
LogPath |
ドライバがログファイルを書き込むディレクトリを指定します。 | なし | 文字列 | いいえ |
LogFileCount |
保持するログファイルの最大数を指定します。 | 0 |
Integer | いいえ |
LogFileSize |
各ログファイルの最大サイズをバイト単位で指定します。 | 0 |
長い | いいえ |
MaxResults |
BigQuery API の結果のページあたりの結果数を指定します。 | 10000 |
長い | いいえ |
MaxThreads |
コネクタがスレッドプールで同時処理に使用できるスレッドの最大数を定義します。このプロパティを Windows 以外のコネクタのコネクタ全体の設定として構成するには、googlebigqueryodbc.ini ファイルで指定します。 |
8 |
Integer | いいえ |
OAuthMechanism |
認証タイプ。次のいずれかを選択します。
|
なし | Integer | ○ |
ProjectId |
ドライバのデフォルト プロジェクト ID。ドライバはこのプロジェクトを使用してクエリを実行し、リソース使用量に対して課金します。 | なし | 文字列 | ○ |
ProxyHost |
プロキシ サーバーのホスト名または IP アドレス。 | なし | 文字列 | いいえ |
ProxyPort |
プロキシ サーバーがリッスンしているポート番号。 | なし | 文字列 | いいえ |
ProxyPwd |
プロキシ サーバー経由で接続する際の認証に使用するパスワード。 | なし | 文字列 | いいえ |
ProxyUid |
プロキシ サーバー経由で接続する際の認証に使用するユーザー名。 | なし | 文字列 | いいえ |
PrivateServiceConnectUris |
デフォルトのエンドポイントを上書きするカスタム エンドポイント。例:
|
なし | カンマ区切りの文字列 | いいえ |
QueryDialect |
使用するクエリ言語を指定します。GoogleSQL(強く推奨)には SQL を使用し、レガシー SQL には BIG_QUERY を使用します。 |
SQL |
文字列 | いいえ |
QueryProperties |
クエリの動作を変更できるプロパティを構成します。 | なし | Map<String, String> | いいえ |
UniverseDomain |
組織のユニバース ドメインを指定します。 | googleapis.com |
文字列 | いいえ |
UseQueryCache |
BigQuery でクエリ キャッシュ機能が有効になります。 | true |
ブール値 | いいえ |
データ型マッピング
BigQuery 用の ODBC ドライバを介してクエリを実行すると、次のデータ型マッピングが行われます。
| GoogleSQL 型 | ODBC SQL 型 |
|---|---|
INT64 | SQL_BIGINT |
BOOL | SQL_BIT |
DATE | SQL_TYPE_DATE |
FLOAT64 | SQL_DOUBLE |
TIME | SQL_TYPE_TIME |
TIMESTAMP | SQL_TYPE_TIMESTAMP |
DATETIME | SQL_TYPE_TIMESTAMP |
BYTES | SQL_VARBINARY |
STRING | SQL_VARCHAR |
ARRAY | SQL_VARCHAR |
STRUCT | SQL_VARCHAR |
INTERVAL | SQL_VARCHAR |
JSON | SQL_VARCHAR |
GEOGRAPHY | SQL_VARCHAR |
RANGE | SQL_VARCHAR |
NUMERIC | SQL_NUMERIC |
BIGNUMERIC | SQL_NUMERIC |
例
次の例は、ODBC ドライバでパラメータ化クエリと複数ステートメント スクリプトを使用する方法を示しています。
パラメータ化されたクエリ
// 1. Prepare statement std::string insert_stmt = "INSERT INTO MyTable VALUES (?, ?, ?)"; status = SQLPrepare(hstmt, (SQLCHAR*)insert_stmt.c_str(), SQL_NTS); // 2. Bind parameters std::string str_val = "example_string"; long long int_val = 12345; double float_val = 1.2345; // Bind string field status = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, (SQLPOINTER)str_val.c_str(), str_val.size(), NULL); // Bind integer field status = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_UBIGINT, SQL_BIGINT, 0, 0, &int_val, 0, NULL); // Bind float field status = SQLBindParameter( hstmt, 3, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &float_val, 0, NULL); // 3. Execute statement status = SQLExecute(hstmt);
複数ステートメント スクリプト
// 1. Prepare and execute the multi-statement script std::string query = "CREATE OR REPLACE TABLE MyTable (StringField STRING, IntegerField INTEGER); " "INSERT INTO MyTable VALUES ('example', 123); " "SELECT * FROM MyTable;"; status = SQLExecDirect(hstmt, (SQLCHAR*)query.c_str(), SQL_NTS); // 2. Process results for each statement using SQLMoreResults do { SQLSMALLINT num_cols; status = SQLNumResultCols(hstmt, &num_cols); if (num_cols > 0) { // This is a result-returning statement (e.g., SELECT) while (SQLFetch(hstmt) == SQL_SUCCESS) { // Process rows... } } else { // This is a non-result statement (e.g., CREATE, INSERT) SQLLEN row_count; SQLRowCount(hstmt, &row_count); // Process affected rows... } } while (SQLMoreResults(hstmt) == SQL_SUCCESS);
料金
BigQuery 用の ODBC ドライバは無料でダウンロードできます。ただし、ドライバを使用する場合は、標準の BigQuery 分析料金が適用されます。
次のステップ
- BigQuery 用の JDBC ドライバの詳細を確認する。
- 他の BigQuery デベロッパー ツールを確認する。