In Grundlegendes maschinelles Lernverfahren: ② Daten vorbereiten wurde der Vorgang des Importierens der von BigQuery erstellten Tabelle in die Pytohn-Umgebung im Pandas Dataframe-Format ausgeführt. Es war.
Mit zunehmender Größe der Tabelle nimmt dies jedoch viel Zeit in Anspruch. Vielleicht hatten viele Leute solche Probleme. Hier kam ein neuer Dienst namens BigQuery Storage API heraus.
Ich habe gehört, dass eine Theorie 7 bis 8 Mal schneller ist, aber was ist damit? Ich würde gerne ausprobieren.
Google BigQuery Google Colaboratory
Laden Sie BigQuery-Daten mithilfe der BigQuery-Speicher-API auf Pandas herunter (https://cloud.google.com/bigquery/docs/bigquery-storage-python-pandas?hl=ja).
Die verwendete Tabelle ist eine Tabelle von ungefähr 100 MB mit dem Namen "myproject.mydataset.mytable". Importieren Sie es im Pandas Dataframe-Format mit einem einfachen Vorgang zum Abrufen aller Elemente, wie unten gezeigt.
query="SELECT * FROM `myproject.mydataset.mytable`
Versuchen wir zunächst, die von uns verwendete Standard-BigQuery-API zu verwenden.
import time
from google.cloud import bigquery
start = time.time()
client = bigquery.Client(project="myproject")
df = client.query(query).to_dataframe()
elapsed_time = time.time() - start
Die Verarbeitung dauerte ca. 120 Sekunden. Nun, das ist akzeptabel.
2.Pandas read_gbq Sie können dies mit Pandas-Funktionen tun, ohne die BigQuery-API zu verwenden. Also werde ich das auch versuchen.
import time
import pandas as pd
start = time.time()
df = pd.io.gbq.read_gbq(query, project_id="myproject", dialect="standard")
elapsed_time = time.time() - start
Die Verarbeitung ist in ca. 135 Sekunden abgeschlossen. Es ist etwas langsamer als die BigQuery-API. Selbst mit der Standard-API von BigQuery scheint im Vergleich zu den Funktionen von Pandas etwas entwickelt worden zu sein.
3.BigQuery Storage API Und hier kommt die BigQuery Storage API, unser Thema, ins Spiel. Als ich versuchte, eine Bibliothek mit Colab zu importieren, wurde mir gesagt, dass es keine Bibliothek gibt, also zuerst installieren.
pip install --upgrade google-cloud-bigquery-storage
Und wenn ich es installiere, erhalte ich eine Meldung, in der ich aufgefordert werde, die Laufzeit neu zu starten. Manchmal erscheint es in anderen Bibliotheken, aber es ist ein bisschen nervig.
WARNING: The following packages were previously imported in this runtime:
[google]
You must restart the runtime in order to use newly installed versions.
Starten Sie nun die Laufzeit neu, importieren Sie die Bibliothek erneut und führen Sie sie aus.
import time
from google.cloud import bigquery
from google.cloud import bigquery_storage
start = time.time()
client = bigquery.Client(project="myproject")
bqstorageclient = bigquery_storage.BigQueryStorageClient()
df3 = (
client.query(query)
.result()
.to_dataframe(bqstorage_client=bqstorageclient)
)
elapsed_time = time.time() - start
Die Ausführungszeit beträgt erstaunliche 12 Sekunden. Es ist 10-mal mehr als die Standard-API, nicht 7- bis 8-mal. Ich dachte, es sei ein Zufall und versuchte es mehrmals, aber es wurde mit fast dieser Geschwindigkeit abgeschlossen, obwohl ein Fehler von etwa 1 bis 2 Sekunden auftrat.
Ich war überrascht, die Ergebnisse viel schneller als erwartet zu sehen. Wenn es zehnmal schneller als gewöhnlich ist, ist es möglich, Daten wie mehrere GB in kurzer Zeit zu erfassen. (Obwohl die nachfolgende Verarbeitung in Python schwer zu sein scheint)
Zusätzlich zum normalen Ausführen von BigQuery kostet es 1,10 US-Dollar pro TB, sodass Sie nicht ausbrechen können. Wenn die Tabelle jedoch zu groß ist und Sie zehn Minuten warten müssen, um die Daten zu erfassen, ist dies ein Dienst, den Sie verwenden möchten.
Recommended Posts