All notable customer-facing changes to the Google Cloud BigQuery JDBC driver (google-cloud-bigquery-jdbc) are documented below.
- Client-side usage telemetry (opt-out): Starting in version 1.7.0, the driver collects anonymous client-side usage and diagnostic telemetry by default to help improve driver reliability.
- No identifiable information collected: Telemetry never collects personally identifiable information (PII), credentials, project IDs, SQL query text, query parameter values, dataset or table names, database schema information, or query result data.
- What is collected: Anonymous environment metadata (driver version, JVM major version, OS platform/version, and a locally generated anonymous correlation ID), connection outcome and authentication method type, high-level operation categories (such as
SELECT,INSERT,CREATE TABLE), execution substrate used (REST vs. Storage APIs), latency distributions, feature usage counters, and internal error codes. Collection runs asynchronously in the background and fails silently if network access is restricted. - How to disable telemetry: You can opt out and disable telemetry for the entire JVM lifecycle using any of the following methods:
- Connection string property: Append
EnableDiagnosticTelemetry=0;(orEnableDiagnosticTelemetry=false;) to your JDBC URL:jdbc:bigquery://https://bigquery.googleapis.com:443;ProjectId=<PROJECT_ID>;OAuthType=<AUTH_TYPE>;EnableDiagnosticTelemetry=0; - Environment variable:
export BIGQUERY_JDBC_TELEMETRY_ENABLED=false - JVM system property:
-DBIGQUERY_JDBC_TELEMETRY_ENABLED=false
- Connection string property: Append
- Public JDBC methods (
execute*,next,commit,rollback,close, and getters) now consistently throw checkedSQLExceptioninstead of uncheckedRuntimeExceptionorIllegalStateExceptionto comply with the JDBC specification. ResultSet.getString()andgetObject(..., String.class)now formatTIMESTAMPvalues (including nested values inARRAYandSTRUCT) in UTC rather than the local JVM timezone.
- Enabled Post-Quantum Cryptography (PQC) TLS cipher suites (
X25519MLKEM768andMLKEM1024) by default across direct and proxied connections. - Exposed
QueryStatisticsonBigQueryResultSetfor fast-path (jobless) queries.
- Preserved exact UTC instants when binding
Timestamp,Instant,OffsetDateTime, andZonedDateTimeparameters (includingCalendaroverloads), and boundLocalDateTimeasSTRINGfor compatibility withDATETIMEcolumns. - Honored
Calendartimezones and fixedClassCastExceptionerrors inResultSettemporal getters (getDate,getTime,getTimestamp). - Corrected the timezone offset direction in
PreparedStatement.setTime(..., Calendar). - Preserved microsecond precision for
TIMEvalues (including insideARRAYandSTRUCT) when callinggetString()or converting toLocalTime. - Formatted nested
ARRAYfields insideSTRUCTvalues as valid JSON strings inStruct.toString()andResultSet.getString(). - Stopped background producer threads, cancelled active gRPC streams, and released Arrow buffer memory immediately when
ResultSet.close()is called. - Fixed memory leaks in
ResultSetGC finalizer queues and per-connection logger registrations during long-running sessions. - Preserved default BigQuery SDK HTTP connect and read timeouts when custom timeout properties are not specified.
- Capped the Storage Read API Arrow batch queue at 32 batches per
ResultSetto bound heap memory usage on large result sets.
- Added pre-execution parameter type and count inference via dry-run in
PreparedStatement, populatinggetParameterMetaData()andgetMetaData()prior to execution while ignoring?characters inside string literals.
- Automatically terminated active BigQuery sessions when closing the JDBC
Connection.
(Includes changes from interim version 1.4.1)
- Added end-to-end support for picosecond-precision timestamps (
TIMESTAMP(12)) via theEnableTimestampPicosconnection property across REST JSON, Storage Read API (Arrow), nestedARRAY/STRUCT/RANGEtypes,PreparedStatementparameters, and metadata APIs. - Added support for colon-delimited project qualifiers (
project:datasetandproject:warehouse.namespace) in theDefaultDatasetconnection property for Lakehouse and multi-catalog environments.
- Fixed SQL
NULLhandling inResultSetprimitive getters (getInt,getLong,getBoolean, etc.) andgetBlob/getClobto return JDBC-compliant defaults (0,false,null) instead of throwingNullPointerException. - Handled
nullparameter bindings properly during Storage Write API bulk inserts. - Fixed automatic fallback from the Storage Read API to the REST API when permission errors occur.
- Preserved local wall-clock time without unintended UTC shifts when reading
DATETIMEvalues insideARRAYandRANGEcolumns. - Enforced strict numeric overflow and underflow bounds checking and rejected invalid cross-temporal coercions (
DatetoTimeand vice versa) inResultSetgetters. - Resolved statement types via
getJobfallback to avoid unnecessary post-execution dry-run queries for DDL statements.
- Eliminated redundant synchronous
jobs.getRPC calls on the fast query execution path.
- Unified SQL and Java type mapping and coercion across read, write, and metadata paths through a centralized type registry.
- Fixed session ID propagation across sequential statements when
EnableSession=1is enabled. - Propagated connection proxy settings (
ProxyHost,ProxyPort) to OpenTelemetry span exporters. - Prevented OpenTelemetry log handlers from being detached when driver logger levels or handlers are reconfigured.
- Fixed exact schema name matching in
DatabaseMetaData.getExportedKeys()catalog fallback queries.
- Eliminated pre-execution dry-run RPCs previously used to classify statement types and DML row counts.
- Accelerated
DatabaseMetaDataqueries and prevented thread-pool starvation deadlocks using a two-tier parallel execution model.
- Added a comprehensive
USER_GUIDE.mddetailing connection URL properties, authentication methods, and custom endpoint configuration.
DatabaseMetaDatamethods now throw aSQLExceptionon403 Forbiddenaccess errors and project-level404 Not Founderrors instead of silently returning empty results.
- Added OpenTelemetry distributed tracing, metrics, and Cloud Logging support, including automatic trace and span ID injection into local log files.
- Added
SSLTrustStoreTypeandSSLTrustStoreProviderconnection properties for custom TLS trustStore configurations. - Implemented
ParameterMetaDatawith dynamicIN,OUT, andINOUTparameter mode support and completedPreparedStatementparameter setter methods.
- Fixed Storage Write API bulk inserts in custom endpoint and VPC-SC environments by routing
JsonStreamWriterthrough the configured client settings. - Fixed timezone coercion,
Calendardefensive copying, andwasNull()state tracking acrossPreparedStatementandCallableStatement.
- Accelerated
DatabaseMetaDataconstraint queries (getPrimaryKeys,getImportedKeys,getExportedKeys,getCrossReference) using native BigQuery API and hybrid metadata lookups. - Reduced memory footprint during JSON result set streaming.
- Added the
EnableProjectDiscoveryconnection property to allowDatabaseMetaData(getCatalogs,getSchemas,getTables) to discover datasets across all accessible Google Cloud projects. - Respected standard JVM trustStore system properties (
javax.net.ssl.trustStoreand related properties) by default for TLS connections. - Implemented
ResultSetfetch size, fetch direction, and SQL warning methods (getFetchSize,setFetchSize,getFetchDirection,setFetchDirection,getWarnings,clearWarnings).
- Prevented unintended transaction rollbacks when closing statements in manual commit mode (
autoCommit=false). - Propagated connection proxy settings (
ProxyHost,ProxyPort,ProxyUid,ProxyPwd) to Google Auth Library requests for OAuth token retrieval. - Fixed large result destination table handling (
AllowLargeResults,LargeResultsDataset,LargeResultsTable) inPreparedStatementand automatically matched dataset location when creating temporary datasets. - Corrected
FilterTablesOnDefaultDatasetfallback behavior when empty strings or wildcard patterns are supplied toDatabaseMetaData. - Fixed
BigQueryDriverto report accurate major and minor driver version numbers instead of0.0. - Shaded
org.slf4jclasses in the standalone uber JAR to prevent classpath conflicts with host applications. - Preserved accurate page row counts across paginated REST
TableResultresponses. - Propagated thread interruptions and exceptions in background metadata fetchers as
SQLExceptioninstead of returning truncated results.
- Isolated query and metadata thread pools per connection using daemon threads to prevent cross-connection blocking and allow clean JVM shutdown.
- Optimized
DatabaseMetaDatacatalog and schema enumeration with parallel project scanning, API field masking, and cached job statistics. - Eliminated eager stack-trace walking overhead during result set type coercion when SLF4J logging bridges are active.
(Version 0.11.0 was promoted to 1.0.0 GA with identical functionality)
- Validated integer connection properties and
DataSourcesetters at configuration time, rejecting negative values with a driver exception.
- Implemented JDBC 4.2
ResultSet.getObject(column, Class<T>)type conversion support. - Added support for executing
EXPORT DATA,EXPORT MODEL, andLOAD DATASQL statements. - Implemented JDBC
Wrappermethods (unwrapandisWrapperFor) acrossConnection,Statement,ResultSet,DataSource,DatabaseMetaData, andResultSetMetaData. - Completed per-connection log isolation across background worker threads and result sets.
- Fixed manual commit mode (
autoCommit=false) query failures when operating on datasets in non-US regions. - Added automatic fallback to the REST API when the Storage Read API is blocked by IAM permission errors.
- Fixed timezone shifts when converting epoch values to
java.sql.Timeandjava.sql.Timestampin Arrow and JSON result sets. - Standardized precision, scale, and SQL type mappings for numeric, temporal,
STRING(NVARCHAR),GEOGRAPHY,JSON, andINTERVALtypes inResultSetMetaDataandDatabaseMetaData. - Added support for backslash (
\) escape characters inDatabaseMetaDatawildcard pattern filters. - Isolated
Statementinstances perDatabaseMetaDataquery to prevent state interference across concurrent metadata calls. - Initialized driver logging prior to JDBC URL parsing so connection string warnings and errors are captured in logs.
- Updated standalone uber JAR shading rules to prevent dependency conflicts.
- Tuned Storage Read API eligibility heuristics and increased the default
HighThroughputMinTableSizethreshold to 10,000 rows to avoid gRPC session overhead on small results.
- Added per-connection log files using unique UUID connection identifiers so concurrent connections can write isolated diagnostic logs.
- Bypassed dry-run job creation when authenticating with read-only OAuth tokens (
bigquery.readonlyscope).
- Added support for Service Account Impersonation when authenticating with Application Default Credentials (ADC).
- Provided default OAuth client ID and secret values to simplify user OAuth authentication flows.
- Improved
DatabaseMetaDatacompliance and implementedStruct.getSQLTypeName()for nestedSTRUCTvalues. - Enhanced driver exception messages and logs to include full causal chains, stack traces, and originating caller context.
- Added the Google Drive OAuth scope across all credential types to support querying Drive-backed external tables.
- Scoped
DatabaseMetaDatainstances to their parentConnectionand lazily initialized internalStatementresources.
- Refined dependency bundling and shading rules in the standalone uber JAR artifact.
- Fixed
Statement.getMoreResults()to consistently advance past the current result cursor. - Ignored unrecognized properties in the JDBC connection URL with a warning instead of failing the connection.
- Unshaded
com.google.cloud.bigquerySDK classes in the uber JAR to maintain compatibility with applications using the BigQuery client library.
- Synchronized all supported connection properties across JDBC URLs,
BigQueryConnection, andDataSourcegetters and setters.
- Reduced connection initialization latency by optimizing credential creation and connection setup.
- Enforced strict JDBC URL syntax validation, rejecting malformed connection strings instead of silently ignoring invalid segments.
- Added support for escaping special characters in JDBC URL property values.
- Added automatic stream retry handling for transient failures in the BigQuery Storage Read API (Arrow).
- Enabled gRPC keep-alive pings for the BigQuery Storage Read API to prevent idle stream disconnects on long-running reads.
- Added the
RequestReasonconnection property to attach audit reasons to BigQuery API requests. - Added
HttpConnectTimeoutandHttpReadTimeoutconnection properties to configure REST transport timeouts.
- Returned
nullfromDriver.connect()when given a non-BigQuery JDBC URL, allowingDriverManagerto delegate to other registered JDBC drivers.
- Avoided eager string formatting in disabled log statements to reduce CPU and allocation overhead.
- Initial preview release of the official Google Cloud BigQuery JDBC driver (
google-cloud-bigquery-jdbc), supporting SQL query execution,PreparedStatementandCallableStatement, multi-statement transactions, Google Cloud authentication flows, the High-Throughput Storage Read API (Arrow), and the Storage Write API.