使用适用于 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++ Redistributable for Visual Studio 2019 或 2022macOS 64 位 (x86_64)、ARM64 (Apple Silicon) 版本: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 进行身份验证,并记下以下信息,以便稍后在通过 ODBC 驱动程序与 BigQuery 建立连接时使用。您只需记下与您使用的身份验证方法对应的信息。
身份验证方法 身份验证信息 示例 连接属性(稍后设置) 标准服务账号 服务账号密钥(JSON 对象) my-sa-keyKeyFilePath工作负载身份联合或员工身份联合 外部账号配置文件中的受众群体属性 //iam.googleapis.com/locations/global/...BYOID_AudienceUrl令牌检索和环境信息文件 {"file":"/path/to/file"}BYOID_CredentialSource用户项目(仅限员工池) my_projectBYOID_PoolUserProjectSTS 令牌类型 id_tokenBYOID_SubjectTokenTypeSTS 令牌交换端点 https://sts.googleapis.com/v1/tokenBYOID_TokenUrl应用默认凭证 无 不适用 不适用
安装和配置 ODBC 驱动程序
您可以使用 Windows 或非 Windows 操作系统来安装和配置适用于 BigQuery 的 ODBC 驱动程序。
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。
- 点击 Add(添加)。
- 在创建新数据源对话框中,选择 ODBC Driver for BigQuery,然后点击完成。系统随即会打开 ODBC Driver for BigQuery DSN 设置对话框。
- 在数据源名称字段中,为 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:用于工作负载身份联合或员工身份联合身份验证
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 |
包含工作负载身份池或员工池的资源名称以及相应池中的提供方标识符。 | 不适用 | 字符串 | 仅当 OAuthMechanism=4 时 |
BYOID_CredentialSource |
设置检索令牌本身所需的信息,以及一些环境信息。 | 不适用 | 字符串 | 仅当 OAuthMechanism=4 时 |
BYOID_PoolUserProject |
当项目是员工身份池而不是 Workload Identity 池时,设置项目。 | 不适用 | 字符串 | 仅当 OAuthMechanism=4 且使用员工池时 |
BYOID_SubjectTokenType |
根据 OAuth 2.0 令牌交换规范设置 STS 令牌类型。预期值包括:
|
不适用 | 字符串 | 仅当 OAuthMechanism=4 时 |
BYOID_TokenUrl |
设置 STS 令牌交换端点。 | https://sts.googleapis.com/v1/token |
字符串 | 否 |
DefaultDataset |
充当项目中的指定数据集,当您执行查询而不明确指定数据集时,驱动程序会自动引用该数据集。 | 不适用 | 字符串 | 否 |
FilterTablesOnDefaultDataset |
确定表或列元数据方法返回的元数据的范围。如果为 false,则不进行过滤。您还必须设置 DefaultDataset 属性以启用过滤功能。
|
FALSE |
布尔值 | 否 |
EnableSession |
确定连接是否启动会话。启用后,相应连接运行的第一个查询会启动会话,并且驱动程序会将该会话 ID 传递给所有后续查询。 | 0 |
布尔值 | 否 |
JobCreationMode |
用于启用低延迟查询路径。选择以下任一选项:
|
2 |
整数 | 否 |
KeyFilePath |
使用服务账号身份验证时,服务账号密钥的路径。 | 不适用 | 字符串 |
仅当 OAuthMechanism=0
|
KMSKeyName |
指定在加密和解密数据时要使用的 KMS 密钥的名称。 | 不适用 | 字符串 | 否 |
LargeResultsDataSetId |
指定用于存储大型查询结果的目标数据集。 | 不适用 | 字符串 | 否 |
LargeResultsDatasetExpirationTime |
指定大型结果数据集中的所有表的生命周期(以毫秒为单位)。 | 3600000 |
长 | 否 |
Location |
指定驱动程序创建或查询数据集的位置。 | 不适用 | 字符串 | 否 |
LogLevel |
限制驱动程序在互动期间记录的详细信息。选择以下任一选项:
|
0 |
整数 | 否 |
LogPath |
指定驱动程序写入日志文件的目录。 | 不适用 | 字符串 | 否 |
LogFileCount |
指定要保留的日志文件数量上限。 | 0 |
整数 | 否 |
LogFileSize |
指定每个日志文件的最大大小(以字节为单位)。 | 0 |
长 | 否 |
MaxResults |
指定 BigQuery API 结果中每页的结果数。 | 10000 |
长 | 否 |
MaxThreads |
定义连接器可在线程池中用于并发处理的线程数量上限。如需将此属性配置为非 Windows 连接器的连接器级设置,请在 googlebigqueryodbc.ini 文件中指定此属性。
|
8 |
整数 | 否 |
OAuthMechanism |
身份验证类型。选择以下任一选项:
|
不适用 | 整数 | 是 |
ProjectId |
驱动程序的默认项目 ID。驱动程序使用此项目执行查询,并根据资源使用情况向此项目收取费用。 | 不适用 | 字符串 | 是 |
ProxyHost |
代理服务器的主机名或 IP 地址。 | 不适用 | 字符串 | 否 |
ProxyPort |
代理服务器正在监听的端口号。 | 不适用 | 字符串 | 否 |
ProxyPwd |
通过代理服务器连接时用于身份验证的密码。 | 不适用 | 字符串 | 否 |
ProxyUid |
通过代理服务器连接时用于身份验证的用户名。 | 不适用 | 字符串 | 否 |
PrivateServiceConnectUris |
用于覆盖默认端点的自定义端点。示例:
|
不适用 | 以逗号分隔的字符串 | 否 |
QueryDialect |
指定要使用的查询方言。使用 SQL 表示 GoogleSQL(强烈推荐),使用 BIG_QUERY 表示旧版 SQL。
|
SQL |
字符串 | 否 |
QueryProperties |
配置可修改查询行为的属性。 | 不适用 | Map<String, String> | 否 |
UniverseDomain |
指定组织的 Universe 网域。 | 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 开发者工具。