[PYTHON] [Große Abfrage] Laden Sie einen Teil der BQ-Daten mit hoher Geschwindigkeit in Pandas

Hintergrund

Es gibt verschiedene Möglichkeiten, BigQuery-Daten in Python-Code zu verwenden, aber die kürzlich eingeführte ** BigQuery-Speicher-API ** scheint beim Laden sehr gut zu sein. Offizielle Seite: https://cloud.google.com/bigquery/docs/bigquery-storage-python-pandas?hl=ja

Es ist immer noch eine neue API, und als ich versuchte, etwas Ungewöhnliches zu tun, hatte ich nicht genug Beispielcode, also lasse ich es. Die Überprüfung der Ausführungsgeschwindigkeit usw. wird anderen Artikeln überlassen.

Was du machen willst

Lesen Sie BigQuery-Daten direkt in Python und speichern Sie sie in Pandas. Dieses Mal wollte ich eine große Anzahl von Daten verarbeiten, also habe ich Bedingungen festgelegt und nur einige Daten extrahiert.

Vorbereitung

Installieren Sie zunächst die Bibliothek, die mit pip verwendet werden soll. Es wird empfohlen, ** eine andere virtuelle Umgebung vorzubereiten ** durch conda create etc. (Ich habe es in die Umgebung gestellt, die ich normalerweise benutze, aber es war sehr mühsam für mich, einen Fehler zu erhalten, da die Versionsabhängigkeit zwischen Bibliotheken unterbrochen war.)

Implementierung

Legen Sie zunächst die Authentifizierungsinformationen fest und erstellen Sie einen 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
)

Lesen Sie zum Schluss die Daten. Bitte schreiben Sie die Projekt-ID usw. entsprechend um.

python


        print('Loading data...')
        table = bigquery_storage_v1beta1.types.TableReference()
        table.project_id = "PROJECT_ID"//Projekt-ID mit BQ, die Sie laden möchten
        table.dataset_id = "DATASET_ID"//Datensatz-ID, die Sie lesen möchten
        table.table_id = "TASBLE_ID"//Tabellen-ID, die Sie lesen möchten
        
        read_options = bigquery_storage_v1beta1.types.TableReadOptions()
        #Spaltenname, den Sie lesen möchten
        cols = ['col1', 'col2', 'col3']
        for col in cols:
            read_options.selected_fields.append(col)
        #Zum Beispiel "Benutzer-ID= "hogehoge"Wenn Sie die abzurufenden Daten unter der Bedingung eingrenzen möchten
        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)

        #Das Datenframe enthält die gelesenen Daten. Was ist der Rest?

Recommended Posts

[Große Abfrage] Laden Sie einen Teil der BQ-Daten mit hoher Geschwindigkeit in Pandas
Eine kleine Geschichte, die Tabellendaten im CSV-Format mit hoher Geschwindigkeit ausgibt
Kombinieren Sie mehrere CSVs und Datenrahmen mit hoher Geschwindigkeit zu einem Datenrahmen [60x Geschwindigkeit]
Machen Sie Urlaubsdaten mit Pandas zu einem Datenrahmen
[Memo] Lade csv von s3 mit boto3 in Pandas
Erstellen Sie einfach eine GCP-Umgebung für Kaggle mit hoher Geschwindigkeit
Zusammenfassung des mit einer Geschwindigkeit von einer Sekunde durchgeführten Bildcrawls
Berechnung der impliziten Volatilität mit hoher Geschwindigkeit durchführen (Marktdatenverarbeitung)
Eine Sammlung von Methoden, die beim Aggregieren von Daten mit Pandas verwendet werden
[TF2.0-Anwendung] Ein Fall, in dem die allgemeine Datenerweiterung mit der starken Datensatzfunktion des TF-Beispiels parallelisiert und mit hoher Geschwindigkeit realisiert wurde.
[Python] Wie man den Bruchteil einer natürlichen Zahl mit hoher Geschwindigkeit erhält
Skript zum Herunterladen von AWS RDS-Protokolldateien mit hoher Geschwindigkeit