BigQuery Python: Queries Work Through the Proxy, Downloads Fail
Check whether the BigQuery Python result download creates a Storage API client independently of the query’s HTTP path.
A query can complete successfully and still fail while downloading its result into pandas. The BigQuery Python library can use a separate BigQuery Storage API client for that download.
The RowIterator.to_dataframe interface documents create_bqstorage_client, which defaults to true, and a bqstorage_client argument. Read those settings alongside the dependencies present in the application. Success on the ordinary query path does not prove that the optional download transport has the same proxy support or configuration.
| Stage | What to inspect |
|---|---|
| Credential acquisition | The credential transport and identity endpoint |
| Submitting and polling a query | The BigQuery client's request path |
| Downloading through Storage API | The Storage API client and its transport |
For a controlled comparison, the documented create_bqstorage_client=False option avoids automatically creating that extra client. That can help identify which path fails. It is a transport choice with performance implications, not evidence that the proxy itself was repaired.
If the application supplies its own Storage API client, configure that client deliberately. Do not assume a custom HTTP object attached to another client reconfigures it.
Older examples discuss obsolete httplib2 implementations or private constructor hooks. Match the integration to the installed library generation, and retain the failure stage in the report. A DataFrame conversion error and a rejected network connection are different outcomes even when they occur in the same method call.