Dans Procédure d'apprentissage automatique de base: (2) Préparer les données, le processus d'importation de la table créée par BigQuery dans l'environnement Pytohn au format Pandas Dataframe a été effectué. C'était.
Cependant, à mesure que la taille de la table augmente, cela prend beaucoup de temps. Peut-être que beaucoup de gens ont eu de tels problèmes. C'est là qu'un nouveau service appelé l'API BigQuery Storage est sorti.
J'ai entendu dire qu'une théorie est 7 à 8 fois plus rapide, mais qu'en est-il? J'aimerais essayer.
Google BigQuery Google Colaboratory
Télécharger les données BigQuery sur les pandas à l'aide de l'API BigQuery Storage
La table utilisée est une table d'environ 100 Mo appelée myproject.mydataset.mytable
.
Importez-le au format Pandas Dataframe avec un processus simple de récupération de tous les éléments comme indiqué ci-dessous.
query="SELECT * FROM `myproject.mydataset.mytable`
Tout d'abord, essayons d'utiliser l'API BigQuery standard que nous utilisons.
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
Le traitement a pris environ 120 secondes. Eh bien, c'est acceptable.
2.Pandas read_gbq Vous pouvez le faire avec les fonctions Pandas sans utiliser l'API BigQuery. Alors je vais essayer ça aussi.
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
Le traitement est terminé en 135 secondes environ. C'est un peu plus lent que l'API BigQuery. Même avec l'API standard de BigQuery, il semble que quelque chose ait été conçu par rapport aux fonctions de Pandas.
3.BigQuery Storage API Et c'est là que l'API BigQuery Storage, notre thème, entre en jeu. Lorsque j'ai essayé d'importer une bibliothèque avec Colab, on m'a dit qu'il n'y avait pas de bibliothèque, alors installez-la d'abord.
pip install --upgrade google-cloud-bigquery-storage
Et quand je l'installe, je reçois un message me demandant de redémarrer le runtime. Parfois, il apparaît dans d'autres bibliothèques, mais c'est un peu ennuyeux.
WARNING: The following packages were previously imported in this runtime:
[google]
You must restart the runtime in order to use newly installed versions.
Maintenant, redémarrez le runtime, importez à nouveau la bibliothèque et exécutez-la.
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
Le temps d'exécution est incroyable de 12 secondes. C'est 10 fois plus que l'API standard, pas 7 à 8 fois. J'ai pensé que c'était une coïncidence et l'ai essayé plusieurs fois, mais il a été terminé à presque cette vitesse, bien qu'il y ait eu une erreur d'environ 1 à 2 secondes.
J'ai été surpris de voir les résultats beaucoup plus rapidement que prévu. S'il est 10 fois plus rapide que d'habitude, il est possible de capturer des données telles que plusieurs Go en peu de temps. (Bien que le traitement ultérieur en Python semble être lourd)
En plus d'exécuter BigQuery normalement, cela coûte 1,10 USD par To, vous ne pouvez donc pas exploser, mais si la table est trop grande et que vous devez attendre des dizaines de minutes pour capturer les données, c'est un service que vous souhaitez utiliser.
Recommended Posts