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