BigQuery 用の ODBC ドライバを使用する

BigQuery 用の Open Database Connectivity(ODBC)ドライバを使用すると、Java 以外のアプリケーションを BigQuery に接続して、任意のツールとインフラストラクチャで BigQuery の機能を使用できます。Java アプリケーションを BigQuery に接続するには、BigQuery 用の JDBC ドライバを使用します。

BigQuery 用の ODBC ドライバは、Apache 2.0 ライセンスで使用できます。

始める前に

  1. ODBC ドライバとドライバ マネージャーについて理解しておいてください。

  2. オペレーティング システムが次の要件を満たしていることを確認します。

    オペレーティング システム サポートされているアーキテクチャ 最小バージョンと依存関係
    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 に追加してください。
  3. BigQuery に対して認証し、次の情報をメモします。この情報は、後で BigQuery 用 ODBC ドライバとの接続を確立するときに使用します。使用する認証方法に対応する情報のみをメモする必要があります。

    認証方法 認証情報 接続プロパティ(後で設定)
    標準サービス アカウント サービス アカウント キー(JSON オブジェクト) my-sa-key KeyFilePath
    Workload Identity 連携または Workforce Identity 連携 外部アカウント構成ファイルのオーディエンス プロパティ //iam.googleapis.com/locations/global/... BYOID_AudienceUrl
    トークン取得と環境情報ファイル {"file":"/path/to/file"} BYOID_CredentialSource
    ユーザー プロジェクト(Workforce プールの場合のみ) my_project BYOID_PoolUserProject
    STS トークンのタイプ id_token BYOID_SubjectTokenType
    STS トークン交換エンドポイント https://sts.googleapis.com/v1/token BYOID_TokenUrl
    アプリケーションのデフォルト認証情報 なし なし なし

ODBC ドライバをインストールして構成する

BigQuery 用の ODBC ドライバは、Windows オペレーティング システムと Windows 以外のオペレーティング システムのどちらでもインストールして構成できます。

Windows

  1. アプリケーションのアーキテクチャに対応するドライバをインストールします。

  2. 次の手順でデータソース名(DSN)を作成します。

    1. Windows の [スタート] メニューから [ODBC データソース] に移動し、クライアント アプリケーションと同じビット数のバージョンを選択します。
    2. [ODBC データソース アドミニストレータ] ページで、[ドライバ] タブをクリックします。
    3. インストールされている ODBC ドライバのリストで、[ODBC Driver for BigQuery] を見つけます。
    4. [システム DSN] タブを選択してすべてのユーザーの DSN を作成するか、[ユーザー DSN] タブを選択して現在のユーザーの DSN を作成します。一般に、システム DSN が推奨されます。一部のアプリケーションは異なるユーザー アカウントを使用してデータを読み込み、他のユーザー DSN を検出しない可能性があるためです。
    5. [追加] をクリックします。
    6. [新しいデータソースの作成] ダイアログで、[ODBC Driver for BigQuery] を選択し、[完了] をクリックします。[ODBC Driver for BigQuery DSN Setup] ダイアログが開きます。
    7. [データソース名] フィールドに、DSN の名前を入力します。
    8. 接続プロパティを追加します。プロパティの一覧については、接続プロパティをご覧ください。

Windows 以外

  1. オペレーティング システムに対応するドライバをインストールします。

  2. ダウンロードした ZIP ファイルまたは TAR ファイルの内容を抽出します。

  3. ZIP ファイルまたは TAR ファイルの内容を、コネクタをインストールするディレクトリに移動します。BigQuery 用の ODBC ドライバの共有オブジェクト パスは INSTALL_DIR/lib/libgoogle_cloud_odbc_bq_driver.so です。ここで、INSTALL_DIR はインストール ディレクトリです。

  4. コネクタの新しいパスを反映するように .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 トークンタイプを設定します。推定値は次のとおりです。
  • urn:ietf:params:oauth:token-type:jwt
  • urn:ietf:params:oauth:token-type:id_token
  • urn:ietf:params:oauth:token-type:saml2
  • urn:ietf:params:aws:token-type:aws4_request
なし 文字列 OAuthMechanism=4 の場合のみ
BYOID_TokenUrl STS トークン交換エンドポイントを設定します。 https://sts.googleapis.com/v1/token 文字列 いいえ
DefaultDataset データセットを明示的に指定せずにクエリを実行するときに、ドライバが自動的に参照するプロジェクト内の指定されたデータセットとして機能します。 なし 文字列 いいえ
FilterTablesOnDefaultDataset テーブルまたは列のメタデータ メソッドが返すメタデータのスコープを決定します。false の場合、フィルタリングは行われません。フィルタリングを有効にするには、DefaultDataset プロパティも設定する必要があります。 FALSE ブール値 いいえ
EnableSession 接続がセッションを開始するかどうかを決定します。有効にすると、その特定の接続で実行される最初のクエリがセッションを開始し、ドライバはセッション ID を後続のすべてのクエリに渡します。 0 ブール値 いいえ
JobCreationMode 低遅延クエリパスを有効にします。次のいずれかを選択します。
  • 1: ドライバがすべてのクエリのジョブを作成する(JOB_CREATION_REQUIRED
  • 2: ドライバがジョブなしでクエリを実行する(JOB_CREATION_OPTIONAL
2 Integer いいえ
KeyFilePath サービス アカウント認証を使用する場合のサービス アカウント キーのパス。 なし 文字列 OAuthMechanism=0 の場合のみ
KMSKeyName データの暗号化と復号に使用する KMS 鍵の名前を指定します。 なし 文字列 いいえ
LargeResultsDataSetId 大規模なクエリ結果を格納する宛先データセットを指定します。 なし 文字列 いいえ
LargeResultsDatasetExpirationTime 大規模な結果データセット内のすべてのテーブルの有効期間をミリ秒単位で指定します。 3600000 長い いいえ
Location ドライバがデータセットを作成またはクエリするロケーションを指定します。 なし 文字列 いいえ
LogLevel やり取り中にドライバが記録する詳細を制限します。次のいずれかを選択します。
  • 0: OFF
  • 1: ERROR
  • 2: WARNING
  • 3: INFO
0 Integer いいえ
LogPath ドライバがログファイルを書き込むディレクトリを指定します。 なし 文字列 いいえ
LogFileCount 保持するログファイルの最大数を指定します。 0 Integer いいえ
LogFileSize 各ログファイルの最大サイズをバイト単位で指定します。 0 長い いいえ
MaxResults BigQuery API の結果のページあたりの結果数を指定します。 10000 長い いいえ
MaxThreads コネクタがスレッドプールで同時処理に使用できるスレッドの最大数を定義します。このプロパティを Windows 以外のコネクタのコネクタ全体の設定として構成するには、googlebigqueryodbc.ini ファイルで指定します。 8 Integer いいえ
OAuthMechanism 認証タイプ。次のいずれかを選択します。
  • 0: サービス アカウント認証
  • 3: アプリケーションのデフォルト認証情報による認証
  • 4: Workload Identity 連携または Workforce Identity 連携の認証
なし Integer
ProjectId ドライバのデフォルト プロジェクト ID。ドライバはこのプロジェクトを使用してクエリを実行し、リソース使用量に対して課金します。 なし 文字列
ProxyHost プロキシ サーバーのホスト名または IP アドレス。 なし 文字列 いいえ
ProxyPort プロキシ サーバーがリッスンしているポート番号。 なし 文字列 いいえ
ProxyPwd プロキシ サーバー経由で接続する際の認証に使用するパスワード。 なし 文字列 いいえ
ProxyUid プロキシ サーバー経由で接続する際の認証に使用するユーザー名。 なし 文字列 いいえ
PrivateServiceConnectUris デフォルトのエンドポイントを上書きするカスタム エンドポイント。例:
  • BIGQUERY=https://bigquery.us-east4.rep.googleapis.com/
  • READ_API=bigquerystorage.us-east4.rep.googleapis.com
  • OAUTH2=oauth2.us-east4.rep.googleapis.com
なし カンマ区切りの文字列 いいえ
QueryDialect 使用するクエリ言語を指定します。GoogleSQL(強く推奨)には SQL を使用し、レガシー SQL には BIG_QUERY を使用します。 SQL 文字列 いいえ
QueryProperties クエリの動作を変更できるプロパティを構成します。 なし Map<String, String> いいえ
UniverseDomain 組織のユニバース ドメインを指定します。 googleapis.com 文字列 いいえ
UseQueryCache BigQuery でクエリ キャッシュ機能が有効になります。 true ブール値 いいえ

データ型マッピング

BigQuery 用の ODBC ドライバを介してクエリを実行すると、次のデータ型マッピングが行われます。

GoogleSQL 型 ODBC SQL 型
INT64SQL_BIGINT
BOOLSQL_BIT
DATESQL_TYPE_DATE
FLOAT64SQL_DOUBLE
TIMESQL_TYPE_TIME
TIMESTAMPSQL_TYPE_TIMESTAMP
DATETIMESQL_TYPE_TIMESTAMP
BYTESSQL_VARBINARY
STRINGSQL_VARCHAR
ARRAYSQL_VARCHAR
STRUCTSQL_VARCHAR
INTERVALSQL_VARCHAR
JSONSQL_VARCHAR
GEOGRAPHYSQL_VARCHAR
RANGESQL_VARCHAR
NUMERICSQL_NUMERIC
BIGNUMERICSQL_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 分析料金が適用されます。

次のステップ