Python-Bibliothek auswählen
Je nach Anwendungsfall können Sie in BigQuery zwischen drei Python-Bibliotheken wä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 clientseitigem Kopieren von Daten | Open-Source-Bibliothek, die von PyData und freiwilligen Contributors verwaltet wird | Ermöglicht das Verschieben von Daten in und aus Python-DataFrames auf Clientseite. Weitere Informationen finden Sie in der Dokumentation und im Quellcode. |
google-cloud-bigquery | BigQuery-Bereitstellung, ‑Administration 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 helfen, Datenanalysen mit SQL durchzuführen.
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 Dictionary 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 flexible Serialisierung von Datum und Uhrzeit aus. Parquet ist die Standardeinstellung. 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 | Optional können Sie 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 ist. 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)