feat(bigquery): Support queryResultsFormat and compressionCodec in query_and_wait()
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 52/100
Piste de recherche
Commencez par Client.query_and_wait(), puis suivez _job_helpers.py pour le payload de la requête BigQuery et table.py pour RowIterator et l’analyse de Arrow. Comparez le PR associé 18027 et vérifiez que les deux options sont acceptées, envoyées à l’API, et que les résultats Arrow compressés prennent en charge les cas d’utilisation indiqués de to_arrow() et to_dataframe().
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- 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
- Update underlying helper functions in
_job_helpers.pyto populate these options in the request payload sent to the BigQuery API. - Update
RowIteratorand Arrow parsing logic intable.pyto seamlessly handle Arrow record batch streams whenquery_results_format="ARROW"is specified.
Alternative Approaches Considered
- Manually constructing custom
QueryJobinstances and extracting Arrow record batches post-execution, which requires boilerplate code and loses the convenience ofquery_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
- Client.query_and_wait() accepts query_results_format and compression_codec parameters.
- The BigQuery API receives these parameters in the job execution request.
- 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
- Langage dominant
- Python
- Étoiles
- 5.4k
- Forks
- 1.8k
- Merge moyen
- 2 j 7 h
- PR mergées (30 j)
- 173
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de googleapis/google-cloud-python
-
firestore: field path with a quoted name ending in a backslash is misparsedPeut-être pris @sebxt l’a pris il y a 25 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
googleapis/google-cloud-python#18771 ·
Les mainteneurs répondent en général sous 1 jour
-
api: spanner type: feature request
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
googleapis/google-cloud-python#18584 ·
Les mainteneurs répondent en général sous 1 jour
-
auth: `impersonated_credentials` loses `subject` on copy, so `with_scopes()` and `with_quota_project()` turn off domain wide delegationPeut-être pris @Om-singhaI l’a pris il y a 55 jours. Ouverteauth priority: p2 type: bug
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
googleapis/google-cloud-python#18428 ·
Les mainteneurs répondent en général sous 1 jour
-
A client called `run_in_transaction` be stuck if Spanner is downPeut-être pris @founderinaction l’a pris il y a 7 jours. Ouvertepriority: p2 type: bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
googleapis/google-cloud-python#18375 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
ci: enable --strict flag in presubmit twine_checkPeut-être à nouveau libre @ohmayr l’a pris il y a 44 jours, et aucune pull request n’est ouverte. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 76/100
googleapis/google-cloud-python#18339 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de googleapis/google-cloud-python
Issues similaires
-
plot_graph crashes when a mesh node has no m2m edgePeut-être pris @tygvi l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
mllam/neural-lam#883 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
enhancement possible-duplicate
Difficulté 1/5 1-3 heures Accessibilité débutants 78/100
AOSSIE-Org/PictoPy#1715 · 2 commentaires ·
Les mainteneurs répondent en général sous 6 jours
-
SQLite connector omits generated columns from the catalog, and drops relationships sourced on themOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
NVIDIA/auto-ontology#511 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
ethereum/execution-specs#3996 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
cpp-best-practices/project_validator#267 ·
Les mainteneurs répondent en général sous 1 jour