[PYTHON] J'ai essayé d'utiliser l'API BigQuery Storage

introduction

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.

Environnement d'analyse

Google BigQuery Google Colaboratory

Site référencé

Télécharger les données BigQuery sur les pandas à l'aide de l'API BigQuery Storage

Données cibles

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`

1. API standard de BigQuery

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.

en conclusion

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

J'ai essayé d'utiliser l'API BigQuery Storage
J'ai essayé d'utiliser l'API checkio
J'ai essayé d'utiliser BigQuery ML
J'ai essayé d'utiliser l'API Google Cloud Vision
J'ai essayé le roman Naro API 2
J'ai essayé l'API du roman Naruro
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
[Pour les débutants] J'ai essayé d'utiliser l'API Tensorflow Object Detection
J'ai essayé d'utiliser l'API de données YOUTUBE V3
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
J'ai essayé de toucher l'API COTOHA
J'ai essayé d'utiliser l'API COTOHA (il y a aussi du code sur GitHub)
J'ai regardé les méta-informations de BigQuery et essayé de les utiliser
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser la fenêtre de temps
J'ai essayé d'utiliser l'API Detect Labels d'AWS Rekognition
J'ai recherché dans la bibliothèque l'utilisation de l'API Gracenote
J'ai essayé d'utiliser l'API à distance avec GAE / J
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé d'utiliser PyCaret à la vitesse la plus rapide
J'ai essayé d'utiliser le module Datetime de Python
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé d'utiliser la bibliothèque de programmation fonctionnelle toolz
J'ai essayé de résumer diverses phrases à l'aide de l'API de synthèse automatique "summpy"
[J'ai essayé d'utiliser Pythonista 3] Introduction
J'ai essayé d'utiliser easydict (mémo).
J'ai essayé la reconnaissance faciale avec Face ++
J'ai essayé d'utiliser RandomForest
Lorsque j'ai essayé d'utiliser l'API Computer Vision de Microsoft, j'ai reconnu le signe Galapagos "Stop"
Essayez d'utiliser l'API Twitter
J'ai essayé d'utiliser Amazon Glacier
J'ai essayé de toucher l'API Qiita
[Linux] J'ai essayé d'utiliser le logiciel de statistiques génétiques PLINK
J'ai essayé de regrouper les données ECG en utilisant la méthode K-Shape
Essayez d'utiliser l'API Twitter
J'ai essayé d'approcher la fonction sin en utilisant le chainer
J'ai essayé la bibliothèque changefinder!
J'ai essayé APN (notification à distance) à l'aide de l'API REST Parse.com
J'ai essayé d'utiliser git inspector
Essayez d'utiliser l'API PeeringDB 2.0
J'ai essayé d'utiliser magenta / TensorFlow