[PYTHON] Ich habe versucht, die BigQuery-Speicher-API zu verwenden

Einführung

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.

Analyseumgebung

Google BigQuery Google Colaboratory

Referenzierte Site

Laden Sie BigQuery-Daten mithilfe der BigQuery-Speicher-API auf Pandas herunter (https://cloud.google.com/bigquery/docs/bigquery-storage-python-pandas?hl=ja).

Zieldaten

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`

1. BigQuery-Standard-API

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.

abschließend

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

Ich habe versucht, die BigQuery-Speicher-API zu verwenden
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, BigQuery ML zu verwenden
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Ich habe die Naro-Roman-API 2 ausprobiert
Ich habe die neuartige API von Naruro ausprobiert
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
[Für Anfänger] Ich habe versucht, die Tensorflow-Objekterkennungs-API zu verwenden
Ich habe versucht, YOUTUBE Data API V3 zu verwenden
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Ich habe versucht, die COTOHA-API zu berühren
Ich habe versucht, die COTOHA-API zu verwenden (es gibt auch Code auf GitHub).
Ich habe mir die Metainformationen von BigQuery angesehen und versucht, sie zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Ich habe versucht, die Detect Labels-API von AWS Rekognition zu verwenden
Ich habe in der Bibliothek nach der Verwendung der Gracenote-API gesucht
Ich habe versucht, Remote API mit GAE / J zu verwenden
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe versucht, PyCaret mit der schnellsten Geschwindigkeit zu verwenden
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, die funktionale Programmierbibliothek toolz zu verwenden
Ich habe versucht, verschiedene Sätze mit der automatischen Zusammenfassungs-API "summpy" zusammenzufassen.
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung
Ich habe versucht, easydict (Memo) zu verwenden.
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Ich habe versucht, RandomForest zu verwenden
Als ich versuchte, die Computer Vision API von Microsoft zu verwenden, erkannte ich das Galapagos-Zeichen "Stop".
Versuchen Sie es mit der Twitter-API
Ich habe versucht, Amazon Glacier zu verwenden
Ich habe versucht, die Qiita-API zu berühren
[Linux] Ich habe versucht, die genetische Statistiksoftware PLINK zu verwenden
Ich habe versucht, EKG-Daten mit der K-Shape-Methode zu gruppieren
Versuchen Sie es mit der Twitter-API
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren
Ich habe die Changefinder-Bibliothek ausprobiert!
Ich habe APN (Remote-Benachrichtigung) mithilfe der Parse.com-REST-API ausprobiert
Ich habe versucht, Git Inspector zu verwenden
Versuchen Sie es mit der PeeringDB 2.0-API
Ich habe versucht, Magenta / TensorFlow zu verwenden