Setting the statement option adbc.bigquery.sql.query.dry_run = "true" makes every query -- even SELECT 1 -- fail at execute time, before any dry-run statistics (totalBytesProcessed) are returned. The same query without the option succeeds, and the same dry run via the raw BigQuery REST API succeeds.
Root cause: a dry run never creates a job -- the REST response's jobReference has no jobId and stats come back synchronously -- so the driver's post-execute job-status poll has nothing to poll and errors out after the dry run already succeeded server-side.
Environment
- Foundry BigQuery driver v1.11.2 (via
dbc), macOS arm64
adbc-driver-manager (Python), service-account auth (json_credential_string)
Reproduction
Attached mwe.py (self-contained, uv run) runs the same dry-run query twice: raw REST (control) and the driver. creds.example.json shows the expected credentials shape.
creds.example.json
mwe.py
$ ./mwe.py creds.json ./libadbc_driver_bigquery.dylib "SELECT * FROM `<project>.<dataset>.<table>`"
rest api: OK totalBytesProcessed=124016700 jobReference={'projectId': '<project>', 'location': 'EU'}
driver : FAIL ProgrammingError: INVALID_ARGUMENT: [bq] Could not poll job status: 400 Bad Request: Invalid field selection status
Same outcome for SELECT 1 and SELECT count(*) (REST: totalBytesProcessed=0). Without dry_run, the driver runs all queries fine.
Expected
execute_query returns an empty result whose schema metadata carries the dry-run statistics, per the upstream option docs: "A valid query will return a mostly empty response with some processing statistics."
Notes
- Upstream
adbc-driver-bigquery (apache/arrow-adbc) 1.8.0 and 1.11.0 fail too, different symptom: GET /bigquery/v2/projects/<project>/queries/?alt=json&... -- empty job ID segment -> Google HTML 404. Bug predates the fork; both code paths unconditionally poll/fetch after a dry run that produces no pollable job.
dry_run is absent from docs.adbc-drivers.org/drivers/bigquery; the option string exists in the binary and is documented upstream.
Setting the statement option
adbc.bigquery.sql.query.dry_run = "true"makes every query -- evenSELECT 1-- fail at execute time, before any dry-run statistics (totalBytesProcessed) are returned. The same query without the option succeeds, and the same dry run via the raw BigQuery REST API succeeds.Root cause: a dry run never creates a job -- the REST response's
jobReferencehas nojobIdand stats come back synchronously -- so the driver's post-execute job-status poll has nothing to poll and errors out after the dry run already succeeded server-side.Environment
dbc), macOS arm64adbc-driver-manager(Python), service-account auth (json_credential_string)Reproduction
Attached
mwe.py(self-contained,uv run) runs the same dry-run query twice: raw REST (control) and the driver.creds.example.jsonshows the expected credentials shape.creds.example.json
mwe.py
Same outcome for
SELECT 1andSELECT count(*)(REST:totalBytesProcessed=0). Withoutdry_run, the driver runs all queries fine.Expected
execute_queryreturns an empty result whose schema metadata carries the dry-run statistics, per the upstream option docs: "A valid query will return a mostly empty response with some processing statistics."Notes
adbc-driver-bigquery(apache/arrow-adbc) 1.8.0 and 1.11.0 fail too, different symptom:GET /bigquery/v2/projects/<project>/queries/?alt=json&...-- empty job ID segment -> Google HTML 404. Bug predates the fork; both code paths unconditionally poll/fetch after a dry run that produces no pollable job.dry_runis absent from docs.adbc-drivers.org/drivers/bigquery; the option string exists in the binary and is documented upstream.