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.
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.
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.)
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?