Skip to content

bigquery-storage: set gRPC keepalive by default on BigQueryReadClient #18784

Closed

Description

@ohmayr

ReadRows streams can sit idle for a long time, for example while BigQuery finishes a query job before the first row arrives. Without keepalive pings, a NAT or load balancer can drop the idle connection without telling either side.

google-cloud-bigquery works around this for Arrow query results (#18652) by building its own gRPC transport with grpc.keepalive_time_ms and grpc.keepalive_timeout_ms (_create_bqstorage_transport). As suggested in review on #18652, this belongs in google-cloud-bigquery-storage, so every long ReadRows read gets it.

Proposal: when the caller doesn't pass a transport or channel, BigQueryReadClient adds keepalive options to its default gRPC channel.

Open question: this changes the default channel for all bigquery-storage users, so the values and the default need agreement from the bigquery-storage owners.

Once this is released and google-cloud-bigquery requires it, google-cloud-bigquery can drop _create_bqstorage_transport (tracked in #18785).

Activity

  1. added
    type: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.
    api: bigquerystorageIssues related to the BigQuery Storage API.
    on Oct 20, 2026
  2. self-assigned this
    on Oct 20, 2026
  3. added a commit that references this issue on Oct 21, 2026
    31d9365
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

api: bigquerystorageIssues related to the BigQuery Storage API.type: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions