使用 BigQuery 的 ODBC 驅動程式

BigQuery 的開放式資料庫連線 (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 以上版本

    相依性:適用於 Visual Studio 2019 或 2022 的 Microsoft Visual C++ 可轉散發套件
    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 Federation 或員工身分聯盟 外部帳戶設定檔的目標對象屬性 //iam.googleapis.com/locations/global/... BYOID_AudienceUrl
    權杖擷取和環境資訊檔案 {"file":"/path/to/file"} BYOID_CredentialSource
    使用者專案 (僅限工作團隊集區) my_project BYOID_PoolUserProject
    STS 權杖類型 id_token BYOID_SubjectTokenType
    STS 權杖交換端點 https://sts.googleapis.com/v1/token BYOID_TokenUrl
    應用程式預設憑證 不適用 不適用

安裝及設定 ODBC 驅動程式

您可以使用 Windows 或非 Windows 作業系統,安裝及設定 BigQuery 的 ODBC 驅動程式。

Windows

  1. 安裝與應用程式架構對應的驅動程式:

  2. 請按照下列步驟建立資料來源名稱 (DSN):

    1. 在 Windows「開始」功能表中,前往「ODBC Data Sources」(ODBC 資料來源),然後選取與用戶端應用程式位元數相同的版本。
    2. 在「ODBC Data Source Administrator」(ODBC 資料來源管理員) 頁面中,按一下「Drivers」(驅動程式) 分頁標籤。
    3. 在已安裝的 ODBC 驅動程式清單中,找出「ODBC Driver for BigQuery」
    4. 選取「系統 DSN」分頁,為所有使用者建立 DSN,或選取「使用者 DSN」分頁,為目前使用者建立 DSN。一般建議使用系統 DSN,因為部分應用程式會使用不同的使用者帳戶載入資料,可能無法偵測到其他使用者 DSN。
    5. 按一下「新增」。
    6. 在「建立新資料來源」對話方塊中,選取「BigQuery 的 ODBC 驅動程式」,然後按一下「完成」。「BigQuery 的 ODBC 驅動程式 DSN 設定」對話方塊隨即開啟。
    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 Federation 或員工身分聯盟驗證
  • AUTH_PROPS:您向 BigQuery 驗證身分時記下的驗證資訊,格式為 property_1=value_1; property_2=value_2;...,例如 KeyFilePath=my-sa-key (如果您使用服務帳戶驗證身分)。
  • OTHER_PROPS (選用):ODBC 驅動程式的其他連線屬性,格式為 property_1=value_1; property_2=value_2;...。如需連線屬性的完整清單,請參閱「連線屬性」。

連線屬性

ODBC 驅動程式連線屬性是設定參數,您可以在建立資料庫連線時,將這些參數納入連線字串。BigQuery 的 ODBC 驅動程式支援下列連線屬性。

連線屬性 說明 預設值 資料類型 必要
AdditionalProjects 除了 ProjectId 屬性設定的主要專案外,驅動程式還可存取哪些專案,以進行查詢和中繼資料作業。 不適用 以半形逗號分隔的字串
AllowHtapiForLargeResults 決定驅動程式是否可以使用 BigQuery Storage Read API。 0 布林值
AllowLargeResults 判斷驅動程式是否在 QueryDialect 屬性設為 BIG_QUERY 時,處理大於 128 MB 的查詢結果。如果 QueryDialect 屬性設為 SQL,驅動程式一律會處理大型查詢結果。 0 布林值
BYOID_AudienceUrl 包含 Workload Identity Pool 或 Workforce Pool 的資源名稱,以及該集區中的提供者 ID。 不適用 字串 只有在OAuthMechanism=4
BYOID_CredentialSource 設定擷取權杖本身所需的資訊,以及部分環境資訊。 不適用 字串 只有在OAuthMechanism=4
BYOID_PoolUserProject 如果專案是工作團隊集區,而非工作負載身分集區,請設定專案。 不適用 字串 僅限 OAuthMechanism=4 和使用工作團隊集區時
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 整數
KeyFilePath 使用服務帳戶驗證時,服務帳戶金鑰的路徑。 不適用 字串 只有在 OAuthMechanism=0
KMSKeyName 指定加密及解密資料時要使用的 KMS 金鑰名稱。 不適用 字串
LargeResultsDataSetId 指定用於儲存大型查詢結果的目的地資料集。 不適用 字串
LargeResultsDatasetExpirationTime 指定大型結果資料集中所有資料表的生命週期 (以毫秒為單位)。 3600000 Long
Location 指定驅動程式建立或查詢資料集的位置。 不適用 字串
LogLevel 限制駕駛人在互動期間記錄的詳細資料。選擇下列其中一個選項:
  • 0OFF
  • 1ERROR
  • 2WARNING
  • 3INFO
0 整數
LogPath 指定驅動程式寫入記錄檔的目錄。 不適用 字串
LogFileCount 指定要保留的記錄檔數量上限。 0 整數
LogFileSize 指定每個記錄檔的大小上限 (以位元組為單位)。 0 Long
MaxResults 指定 BigQuery API 結果中每頁的結果數。 10000 Long
MaxThreads 定義連接器可在執行緒集區中用於並行處理的執行緒數量上限。如要將這項屬性設為非 Windows 連接器的全連接器設定,請在 googlebigqueryodbc.ini 檔案中指定。 8 整數
OAuthMechanism 驗證類型。選擇下列其中一個選項:
  • 0:服務帳戶驗證
  • 3:應用程式預設憑證驗證
  • 4:Workload Identity Federation 或員工身分聯盟驗證
不適用 整數
ProjectId 驅動程式的預設專案 ID。驅動程式會使用這個專案執行查詢,並根據資源用量計費。 不適用 字串
ProxyHost Proxy 伺服器的主機名稱或 IP 位址。 不適用 字串
ProxyPort Proxy 伺服器監聽的通訊埠號碼。 不適用 字串
ProxyPwd 透過 Proxy 伺服器連線時,用於驗證的密碼。 不適用 字串
ProxyUid 透過 Proxy 伺服器連線時,用於驗證的使用者名稱。 不適用 字串
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 指定要使用的查詢方言。使用 SQL 代表 GoogleSQL (強烈建議),使用 BIG_QUERY 代表舊版 SQL。 SQL 字串
QueryProperties 設定可修改查詢行為的屬性。 不適用 Map<String, String>
UniverseDomain 指定貴機構的 Universe 網域。 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 分析價格

後續步驟