[PYTHON] [Big Query] Chargez une partie des données BQ dans les pandas à grande vitesse

Contexte

Il existe plusieurs façons d'utiliser les données BigQuery dans le code Python, mais la récente ** API BigQuery Storage ** semble très bonne pour la vitesse de chargement. Page officielle: https://cloud.google.com/bigquery/docs/bigquery-storage-python-pandas?hl=ja

C'est toujours une nouvelle API, et quand j'ai essayé de faire quelque chose d'un peu inhabituel, je n'avais pas assez d'exemple de code, alors je vais le laisser. La vérification de la vitesse d'exécution, etc. sera laissée à d'autres articles.

Chose que tu veux faire

Lisez les données BigQuery directement dans Python et stockez-les dans Pandas. Cette fois, je voulais traiter un grand nombre de données, j'ai donc défini des conditions et extrait uniquement certaines données.

Préparation

Tout d'abord, installez la bibliothèque à utiliser avec pip. Il est recommandé de ** préparer un autre environnement virtuel ** par conda create etc. (Je l'ai mis dans l'environnement que j'utilise habituellement, mais il était très gênant pour moi d'obtenir une erreur car la dépendance de version entre les bibliothèques était cassée.)

la mise en oeuvre

Tout d'abord, définissez les informations d'authentification et créez un client.

python


import google.auth
from google.cloud import bigquery
from google.cloud import bigquery_storage_v1beta1

credentials, your_project_id = google.auth.default(
    scopes=["https://www.googleapis.com/auth/cloud-platform"]
)

bqclient = bigquery.Client(
    credentials=credentials,
    project=your_project_id,
)
bqstorageclient = bigquery_storage_v1beta1.BigQueryStorageClient(
    credentials=credentials
)

Enfin, lisez les données. Veuillez réécrire l'ID du projet, etc. comme il convient.

python


        print('Loading data...')
        table = bigquery_storage_v1beta1.types.TableReference()
        table.project_id = "PROJECT_ID"//ID de projet avec BQ que vous souhaitez charger
        table.dataset_id = "DATASET_ID"//ID de l'ensemble de données que vous souhaitez lire
        table.table_id = "TASBLE_ID"//ID de table que vous souhaitez lire
        
        read_options = bigquery_storage_v1beta1.types.TableReadOptions()
        #Nom de la colonne que vous souhaitez lire
        cols = ['col1', 'col2', 'col3']
        for col in cols:
            read_options.selected_fields.append(col)
        #Par exemple, "userid= "hogehoge"Si vous souhaitez affiner les données à extraire sous la condition de
        read_options.row_restriction = 'userid = "hogehoge"'
        parent = "projects/{}".format(your_project_id)
        session = bqstorageclient.create_read_session(
            table,
            parent,
            read_options=read_options,
            format_=bigquery_storage_v1beta1.enums.DataFormat.ARROW,
            sharding_strategy=(
                bigquery_storage_v1beta1.enums.ShardingStrategy.LIQUID
            ),
        )
        stream = session.streams[0]
        position = bigquery_storage_v1beta1.types.StreamPosition(stream=stream)
        reader = bqstorageclient.read_rows(position)
        
        dataframe = reader.to_dataframe(session)

        #Le datafreme contient les données lues, alors quel est le reste?

Recommended Posts

[Big Query] Chargez une partie des données BQ dans les pandas à grande vitesse
Une petite histoire qui produit des données de table au format CSV à grande vitesse
Combinez plusieurs CSV et trames de données en une seule trame de données à grande vitesse [vitesse 60x]
Transformez les données de vacances en une trame de données avec les pandas
[Memo] Chargez le csv de s3 dans les pandas avec boto3
Créez facilement un environnement GCP pour Kaggle à grande vitesse
Résumé de l'exploration d'image effectuée à la vitesse d'une seconde
Effectuer des calculs de volatilité implicite à grande vitesse (traitement des données de marché)
Une collection de méthodes utilisées lors de l'agrégation de données avec des pandas
[Application TF2.0] Un cas où l'augmentation de données à usage général a été parallélisée et réalisée à grande vitesse avec la fonction de jeu de données fort de l'exemple TF.
[Python] Comment obtenir la fraction d'un nombre naturel à grande vitesse
Script pour télécharger les fichiers journaux AWS RDS à grande vitesse