feat(bigquery): Support queryResultsFormat and compressionCodec in query_and_wait()

Offen
#18,047 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
52/100
Issue-Typ
Feature
Klarheit
Größtenteils klar
Aktivitätsstatus
Ruhig
Tech-Stack
python
Bereich
api, data

Rechercherichtung

Beginne bei Client.query_and_wait(), verfolge dann _job_helpers.py für den BigQuery-Anforderungspayload und table.py für RowIterator und das Arrow-Parsing. Vergleiche den zugehörigen PR 18027 und überprüfe, dass beide Optionen akzeptiert, an die API gesendet werden und dass komprimierte Arrow-Ergebnisse die genannten Anwendungsfälle für to_arrow() und to_dataframe() unterstützen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

api: bigquery priority: p3 type: feature request
Determine this is the right repository
  • I determined this is the correct repository in which to report this feature request.
Summary of the feature request
Feature Description

Add support for query_results_format (e.g., "ARROW") and compression_codec (e.g., "LZ4_FRAME") in Client.query_and_wait() and related job helper functions in google-cloud-bigquery.

Use Case & Problem Statement

Currently, Client.query_and_wait() executes a query and fetches results, but does not allow callers to request the underlying query results format as Apache Arrow streams or specify compression options directly during the fetch process.

For high-performance data processing pipelines using Apache Arrow or PyArrow, requesting query results in Arrow format with compression significantly reduces network payload size, deserialization overhead, and total query result fetch latency.

Proposed Solution
  1. Update google.cloud.bigquery.client.Client.query_and_wait() to accept optional parameters:
    • query_results_format: Optional string specifying result serialization format (e.g. "ARROW").
    • compression_codec: Optional string specifying compression algorithm
  2. Update underlying helper functions in _job_helpers.py to populate these options in the request payload sent to the BigQuery API.
  3. Update RowIterator and Arrow parsing logic in table.py to seamlessly handle Arrow record batch streams when query_results_format="ARROW" is specified.
Alternative Approaches Considered
  • Manually constructing custom QueryJob instances and extracting Arrow record batches post-execution, which requires boilerplate code and loses the convenience of query_and_wait().
Additional Context

Related PR: https://github.com/googleapis/google-cloud-python/pull/18027

Desired code experience

from google.cloud import bigquery

client = bigquery.Client()

query = "SELECT * FROM bigquery-public-data.usa_names.usa_1910_2013 LIMIT 10000"

Request query results directly in Apache Arrow format with LZ4_FRAME compression

results = client.query_and_wait(
query,
query_results_format="ARROW",
compression_codec="LZ4_FRAME",
)

Convert directly to PyArrow Table or Pandas DataFrame

arrow_table = results.to_arrow()
df = results.to_dataframe()

Expected results
  1. Client.query_and_wait() accepts query_results_format and compression_codec parameters.
  2. The BigQuery API receives these parameters in the job execution request.
  3. Query results are returned and parsed efficiently via compressed Apache Arrow streams into the resulting RowIterator / Arrow table without client errors.
API client name and version

No response

Use case

e.g. This feature would be useful in a scenario where I need to process large amounts of data efficiently.

Additional context

https://github.com/googleapis/google-cloud-python/pull/18027

Vorherrschende Sprache
Python
Sterne
5.4k
Forks
1.8k
Ø Merge
2 T. 7 Std.
Gemergte PRs (30 T.)
173

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus googleapis/google-cloud-python

Alle Issues in googleapis/google-cloud-python

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.