BigQuery aloja varios conjuntos de datos públicos que están disponibles para que el público en general los consulte. En este instructivo, crearás un flujo de trabajo que ejecuta varios trabajos de consulta de BigQuery en paralelo, lo que demuestra una mejora en el rendimiento en comparación con la ejecución de los trabajos de forma serial, uno tras otro.
Objetivos
En este instructivo, realizarás las siguientes acciones:- Ejecuta una consulta en un conjunto de datos públicos de Wikipedia para determinar los títulos más vistos en un mes específico.
- Implementa y ejecuta un flujo de trabajo que ejecute varios trabajos de consulta de BigQuery de forma serial, uno tras otro.
- Implementa y ejecuta un flujo de trabajo que ejecute los trabajos de BigQuery con iteración paralela y en el que los bucles
for
comunes se ejecuten en paralelo.
Puedes ejecutar los siguientes comandos en la consola de Google Cloud o con Google Cloud CLI en la terminal o en Cloud Shell.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
Es posible que las restricciones de seguridad que define tu organización no te permitan completar los siguientes pasos. Para obtener información sobre la solución de problemas, consulta Desarrolla aplicaciones en un entorno Google Cloud restringido.
Console
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: BigQuery > BigQuery Job User, Logging > Logs Writer.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: BigQuery > BigQuery Job User, Logging > Logs Writer.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
gcloud
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: roles/bigquery.jobUser, roles/logging.logWriter.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
-
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: roles/bigquery.jobUser, roles/logging.logWriter.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
-
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
Ejecuta un trabajo de consulta de BigQuery
En BigQuery, puedes ejecutar un trabajo de consulta interactivo (a pedido). Para obtener más información, consulta Ejecuta trabajos de consulta interactivos y por lotes.
Console
En la consola de Google Cloud , ve a la página BigQuery.
Ingresa la siguiente consulta en SQL en BigQuery en el área de texto del Editor de consultas:
SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews.201207h` GROUP BY TITLE ORDER BY SUM(views) DESC LIMIT 100
Haz clic en Ejecutar.
bq
En tu terminal, ingresa el siguiente comando bq query
para ejecutar una consulta interactiva con la sintaxis de SQL estándar:
bq query \
--use_legacy_sql=false \
'SELECT
TITLE, SUM(views)
FROM
`bigquery-samples.wikipedia_pageviews.201207h`
GROUP BY
TITLE
ORDER BY
SUM(views) DESC
LIMIT 100'
Esto ejecuta una consulta que devuelve los 100 títulos de Wikipedia con más vistas en un mes específico y escribe el resultado en una tabla temporal.
Observa cuánto tiempo tarda en ejecutarse la consulta.
Implementa un flujo de trabajo que ejecuta varias consultas de forma serial
La definición de un flujo de trabajo está compuesta por una serie de pasos descritos con la sintaxis de Workflows. Después de crear un flujo de trabajo, debes implementarlo para que esté disponible para su ejecución. El paso de implementación también valida que se pueda ejecutar el archivo de origen.
El siguiente flujo de trabajo define una lista de cinco tablas para ejecutar una consulta con el conector de BigQuery de Workflows. Las consultas se ejecutan de forma serial, una después de la otra, y los títulos más vistos de cada tabla se guardan en un mapa de resultados.
Console
En la consola de Google Cloud , ve a la página Workflows:
Haz clic en Crear.
Ingresa un nombre para el flujo de trabajo nuevo, como
workflow-serial-bqjobs
.Elegir una región adecuada por ejemplo, us-central1.
Selecciona la cuenta de servicio que creaste anteriormente.
Ya deberías haber otorgado los roles de IAM de BigQuery > Usuario de trabajo de BigQuery y Logging > Escritor de registros a la cuenta de servicio.
Haz clic en Siguiente.
En el editor de flujos de trabajo, ingresa la siguiente definición para el flujo de trabajo:
Haz clic en Implementar.
gcloud
Abre una terminal y crea un archivo de código fuente para tu flujo de trabajo:
touch workflow-serial-bqjobs.yaml
Copia el siguiente flujo de trabajo en tu archivo de código fuente:
Para implementar el flujo de trabajo, ingresa el siguiente comando:
gcloud workflows deploy workflow-serial-bqjobs \ --source=workflow-serial-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Reemplaza
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
por el correo electrónico de la cuenta de servicio que creaste anteriormente.Ya deberías haber otorgado los roles de IAM
roles/bigquery.jobUser
yroles/logging.logWriter
a la cuenta de servicio.
Ejecuta el flujo de trabajo y ejecuta varias consultas de forma serial
Ejecuta la definición actual del flujo de trabajo asociada con el flujo de trabajo.
Console
En la consola de Google Cloud , ve a la página Workflows:
En la página Workflows, selecciona el flujo de trabajo workflow-serial-bqjobs para ir a su página de detalles.
En la página Detalles del flujo de trabajo, haz clic en play_arrow Ejecutar.
Haz clic de nuevo en Ejecutar.
Consulta los resultados del flujo de trabajo en el panel Output.
gcloud
Abre una terminal.
Ejecuta el flujo de trabajo:
gcloud workflows run workflow-serial-bqjob
La ejecución del flujo de trabajo debería demorar aproximadamente un minuto o cinco veces el tiempo de ejecución anterior. El resultado incluirá cada tabla y se verá similar al siguiente:
{
"201201h": {
"title": "Special:Search",
"views": "14591339"
},
"201202h": {
"title": "Special:Search",
"views": "132765420"
},
"201203h": {
"title": "Special:Search",
"views": "123316818"
},
"201204h": {
"title": "Special:Search",
"views": "116830614"
},
"201205h": {
"title": "Special:Search",
"views": "131357063"
}
}
Implementa y ejecuta un flujo de trabajo que ejecuta varias consultas en paralelo
En lugar de ejecutar cinco consultas de forma secuencial, puedes ejecutarlas en paralelo realizando algunos cambios:
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
- Un paso
parallel
permite que cada iteración del buclefor
se ejecute en paralelo. La variable
results
se declara comoshared
, lo que permite que una rama la escriba, y el resultado de cada rama se puede agregar a ella.
Console
En la consola de Google Cloud , ve a la página Workflows:
Haz clic en Crear.
Ingresa un nombre para el flujo de trabajo nuevo, como
workflow-parallel-bqjobs
.Elegir una región adecuada por ejemplo, us-central1.
Selecciona la cuenta de servicio que creaste anteriormente.
Haz clic en Siguiente.
En el editor de flujos de trabajo, ingresa la siguiente definición para el flujo de trabajo:
Haz clic en Implementar.
En la página Detalles del flujo de trabajo, haz clic en play_arrow Ejecutar.
Haz clic de nuevo en Ejecutar.
Consulta los resultados del flujo de trabajo en el panel Output.
gcloud
Abre una terminal y crea un archivo de código fuente para tu flujo de trabajo:
touch workflow-parallel-bqjobs.yaml
Copia el siguiente flujo de trabajo en tu archivo de código fuente:
Para implementar el flujo de trabajo, ingresa el siguiente comando:
gcloud workflows deploy workflow-parallell-bqjobs \ --source=workflow-parallel-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Reemplaza
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
por el correo electrónico de la cuenta de servicio que creaste anteriormente.Ejecuta el flujo de trabajo:
gcloud workflows run workflow-parallel-bqjobs
El resultado será similar al anterior, pero la ejecución del flujo de trabajo debería tardar aproximadamente veinte segundos o menos.
Limpia
Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y deseas conservarlo sin los cambios que se agregaron en este instructivo, borra los recursos creados para el instructivo.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimina recursos de instructivos
Borra los flujos de trabajo que se crearon en este instructivo:
gcloud workflows delete WORKFLOW_NAME
¿Qué sigue?
- Para obtener más información sobre los pasos paralelos, consulta Cómo ejecutar pasos paralelos.
- Para obtener más información sobre los conectores de Workflows, consulta Descripción de los conectores.
- Para obtener más información sobre Workflows, consulta la descripción general de Workflows.