Open-Source-Python-Bibliotheken verwenden
Sie können in BigQuery je nach Anwendungsfall aus drei Python-Bibliotheken auswählen.
| Anwendungsfall | Wird verwaltet von | Beschreibung | |
|---|---|---|---|
| BigQuery DataFrames | Python-basierte Datenverarbeitung und ML-Vorgänge mit serverseitiger Verarbeitung (z. B. mit Slots) | Pandas- und scikit-learn-APIs, die mit serverseitigem Pushdown implementiert wurden. Weitere Informationen finden Sie unter Einführung in BigQuery DataFrames. | |
| pandas-gbq | Python-basierte Datenverarbeitung mit clientseitiger Datenkopie | Open-Source-Bibliothek, die von PyData und freiwilligen Contributors verwaltet wird | Ermöglicht das Verschieben von Daten zu und von Python-DataFrames auf der Clientseite. Weitere Informationen finden Sie in der Dokumentation und im Quellcode. |
| google-cloud-bigquery | BigQuery-Bereitstellung, ‑Verwaltung und SQL-basierte Abfragen | Open-Source-Bibliothek, die von Google verwaltet wird | Python-Paket, das alle BigQuery APIs umschließt. Weitere Informationen finden Sie in der Dokumentation und im Quellcode. |
pandas-gbq und google-cloud-bigquery verwenden
Die pandas-gbq-Bibliothek bietet eine einfache Schnittstelle zum Ausführen von Abfragen und zum Hochladen von pandas-DataFrames in BigQuery. Es ist ein dünner Wrapper
für die BigQuery-Clientbibliothek,
google-cloud-bigquery. Beide Bibliotheken sollen Ihnen bei der Datenanalyse mit SQL helfen.
Bibliotheken installieren
Um die Codebeispiele in diesem Leitfaden zu verwenden, installieren Sie das Paket pandas-gbq und die BigQuery-Python-Clientbibliotheken.
Installieren Sie die Pakete pandas-gbq und google-cloud-bigquery.
pip install --upgrade pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
Abfragen ausführen
Beide Bibliotheken unterstützen das Abfragen von in BigQuery gespeicherten Daten. Die wichtigsten Unterschiede zwischen den Bibliotheken sind:
| pandas-gbq | google-cloud-bigquery | |
|---|---|---|
| Standardmäßige SQL-Syntax | GoogleSQL (konfigurierbar mit pandas_gbq.context.dialect) |
GoogleSQL |
| Abfragekonfiguration | Wird als Wörterbuch im Format einer Abfrageanfrage gesendet. | Verwendet die Klasse QueryJobConfig. Sie enthält Attribute für die verschiedenen API-Konfigurationsoptionen. |
Daten mit der GoogleSQL-Syntax abfragen
Im folgenden Beispiel wird gezeigt, wie eine GoogleSQL-Abfrage mit und ohne explizite Angabe eines Projekts ausgeführt wird. Falls kein Projekt angegeben ist, wird das Projekt in beiden Bibliotheken anhand der Standardanmeldedaten ermittelt.
pandas-gbq :
google-cloud-bigquery :
Daten mit der Legacy-SQL-Syntax abfragen
Im folgenden Beispiel wird gezeigt, wie eine Abfrage mit der Legacy-SQL-Syntax ausgeführt wird. Eine Anleitung zum Aktualisieren Ihrer Abfragen auf GoogleSQL finden Sie im GoogleSQL-Migrationsleitfaden.
pandas-gbq :
google-cloud-bigquery :
Mit der BigQuery Storage API umfangreiche Ergebnisse herunterladen
Verwenden Sie die BigQuery Storage API, um umfangreiche Ergebnisse 15- bis 31 Mal schneller herunterzuladen.
pandas-gbq :
google-cloud-bigquery :
Abfrage mit einer Konfiguration ausführen
Das Senden einer Konfiguration mit einer BigQuery API-Anfrage ist für bestimmte komplexe Vorgänge erforderlich, beispielsweise für das Ausführen einer parametrisierten Abfrage oder das Angeben einer Zieltabelle zum Speichern der Abfrageergebnisse. In pandas-gbq muss die
Konfiguration als Wörterbuch im Format einer Abfrageanfrage gesendet werden.
In google-cloud-bigquery werden Jobkonfigurationsklassen bereitgestellt, beispielsweise QueryJobConfig, die die erforderlichen Attribute zur Konfiguration komplexer Jobs enthalten.
Im folgenden Beispiel wird gezeigt, wie eine Abfrage mit benannten Parametern ausgeführt wird.
pandas-gbq :
google-cloud-bigquery :
pandas-DataFrame in eine BigQuery-Tabelle laden
Beide Bibliotheken unterstützen das Hochladen von Daten aus einem pandas DataFrame in eine neue BigQuery-Tabelle. Die Hauptunterschiede sind:
| pandas-gbq | google-cloud-bigquery | |
|---|---|---|
| Unterstützte Typen | Konvertiert den DataFrame in das CSV-Format, bevor er an die API gesendet wird. Dabei werden keine verschachtelten oder Array-Werte unterstützt. | Konvertiert den DataFrame in das Parquet- oder CSV-Format, bevor er an die API gesendet wird. Dabei werden verschachtelte und Array-Werte unterstützt. Wählen Sie Parquet für Struktur- und Array-Werte und CSV für die Flexibilität bei der Datums- und Zeitserialisierung aus. Parquet ist die Standardauswahl. Die Installation von pyarrow, der Parquet-Engine zum Senden der DataFrame-Daten an die BigQuery API, ist erforderlich, wenn Sie den DataFrame in eine Tabelle laden möchten. |
| Ladekonfiguration | Sie können optional ein Tabellenschema angeben. | Verwendet die Klasse LoadJobConfig. Sie enthält Attribute für die verschiedenen API-Konfigurationsoptionen. |
pandas-gbq :
google-cloud-bigquery :
google-cloud-bigquery weist die pyarrow-Bibliothek an, einen pandas-DataFrame in eine Parquet-Datei zu serialisieren.
Installieren Sie das Paket pyarrow:
pip install pyarrow
Von pandas-gbq nicht unterstützte Funktionen
Die pandas-gbq-Bibliothek bietet zwar eine nützliche Schnittstelle zum Abfragen und Schreiben von Daten in Tabellen, sie deckt jedoch viele Features der BigQuery API nicht ab. Dazu gehören unter anderem:
- Datasets verwalten, einschließlich Datasets erstellen, Dataset-Attribute aktualisieren und Datasets löschen
- Laden von Daten in BigQuery aus anderen Formaten als pandas-DataFrames oder aus pandas-DataFrames mit JSON Spalten
- Tabellen verwalten, einschließlich Tabellen in einem Dataset auflisten, Tabellendaten kopieren und Tabellen löschen
- BigQuery-Daten direkt nach Google Cloud Storage exportieren
Fehler im Verbindungspool beheben
Fehlerstring: Connection pool is full, discarding connection: bigquery.googleapis.com.
Connection pool size: 10
Wenn Sie das Standard-BigQuery-Clientobjekt in Python verwenden, sind Sie
auf maximal 10 Threads beschränkt, da die Standardpoolgröße für den Python HTTPAdapter
10 beträgt. Wenn Sie mehr als 10 Verbindungen verwenden möchten, erstellen Sie ein benutzerdefiniertes requests.adapters.HTTPAdapter-Objekt. Beispiel:
client = bigquery.Client() adapter = requests.adapters.HTTPAdapter(pool_connections=128, pool_maxsize=128,max_retries=3) client._http.mount("https://",adapter) client._http._auth_request.session.mount("https://",adapter) query_job = client.query(QUERY)