BigQuery aloja varios conjuntos de datos públicos que están disponibles para que el público en general los consulte. En este tutorial, crearás un flujo de trabajo que ejecuta varias tareas de consulta de BigQuery en paralelo, lo que demuestra una mejora del rendimiento en comparación con la ejecución de las tareas de forma secuencial, una después de otra.
Objetivos
En este tutorial, aprenderás a hacer lo siguiente:- Ejecuta una consulta en un conjunto de datos público de Wikipedia para determinar los títulos más vistos en un mes concreto.
- Despliega y ejecuta un flujo de trabajo que ejecute varias tareas de consulta de BigQuery de forma secuencial, una después de otra.
- Despliega y ejecuta un flujo de trabajo que ejecute las tareas de BigQuery
mediante la iteración paralela,
donde los bucles
fornormales se ejecuten en paralelo.
Puedes ejecutar los siguientes comandos en la Google Cloud consola o con la CLI de Google Cloud en tu terminal o en Cloud Shell.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Antes de empezar
Es posible que las restricciones de seguridad definidas por tu organización te impidan completar los pasos que se indican a continuación. Para obtener información sobre cómo solucionar problemas, consulta el artículo Desarrollar aplicaciones en un entorno limitado Google Cloud .
Consola
- 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
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.
-
Ensure that you have the Create Service Accounts IAM role
(
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
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.
-
Ensure that you have the Create Service Accounts IAM role
(
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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
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.
-
Ensure that you have the Create Service Accounts IAM role
(
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Workflows API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
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.
-
Ensure that you have the Create Service Accounts IAM role
(
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
Ejecutar una tarea de consulta de BigQuery
En BigQuery, puedes ejecutar una tarea de consulta interactiva (bajo demanda). Para obtener más información, consulta Ejecutar tareas de consulta interactivas y por lotes.
Consola
En la Google Cloud consola, ve a la página BigQuery.
Introduce la siguiente consulta de SQL de BigQuery en el área de texto Editor de consultas:
SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews.201207h` GROUP BY TITLE ORDER BY SUM(views) DESC LIMIT 100Haz clic en Ejecutar.
bq
En el terminal, introduce 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'
Ejecuta una consulta que devuelve los 100 títulos de Wikipedia con más vistas en un mes concreto y escribe el resultado en una tabla temporal.
Anota cuánto tiempo tarda en ejecutarse la consulta.
Desplegar un flujo de trabajo que ejecute varias consultas de forma secuencial
Una definición de flujo de trabajo se compone de una serie de pasos descritos mediante 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 el archivo de origen se puede ejecutar.
El siguiente flujo de trabajo define una lista de cinco tablas en las que se va a ejecutar una consulta mediante el conector de BigQuery de Workflows. Las consultas se ejecutan de forma secuencial, una después de otra, y los títulos más vistos de cada tabla se guardan en un mapa de resultados.
Consola
En la Google Cloud consola, ve a la página Flujos de trabajo:
Haz clic en Crear.
Escribe un nombre para el nuevo flujo de trabajo, como
workflow-serial-bqjobs.Elige una región adecuada, como us-central1.
Selecciona la cuenta de servicio que has creado anteriormente.
Ya deberías haber asignado los roles de gestión de identidades y accesos BigQuery > Usuario de tareas de BigQuery y Logging > Escritor de registros a la cuenta de servicio.
Haz clic en Siguiente.
En el editor del flujo de trabajo, introduce la siguiente definición para tu flujo de trabajo:
Haz clic en Desplegar.
gcloud
Abre un terminal y crea un archivo de código fuente para tu flujo de trabajo:
touch workflow-serial-bqjobs.yamlCopia el siguiente flujo de trabajo en tu archivo de código fuente:
Para desplegar el flujo de trabajo, introduce el siguiente comando:
gcloud workflows deploy workflow-serial-bqjobs \ --source=workflow-serial-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Sustituye
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.compor el correo de la cuenta de servicio que has creado anteriormente.Ya deberías haber concedido los roles de gestión de identidades y accesos
roles/bigquery.jobUseryroles/logging.logWritera la cuenta de servicio.
Ejecutar el flujo de trabajo y realizar varias consultas de forma secuencial
Al ejecutar un flujo de trabajo, se ejecuta la definición del flujo de trabajo actual asociada al flujo de trabajo.
Consola
En la Google Cloud consola, ve a la página Flujos de trabajo:
En la página Flujos de trabajo, 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.
Vuelve a hacer clic en Ejecutar.
Consulta los resultados del flujo de trabajo en el panel Salida.
gcloud
Abre la terminal.
Ejecuta el flujo de trabajo:
gcloud workflows run workflow-serial-bqjob
La ejecución del flujo de trabajo debería durar aproximadamente un minuto o cinco veces el tiempo de ejecución anterior. El resultado incluirá cada tabla y tendrá un aspecto 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"
}
}
Desplegar y ejecutar un flujo de trabajo que ejecute varias consultas en paralelo
En lugar de ejecutar cinco consultas de forma secuencial, puedes ejecutarlas en paralelo haciendo algunos cambios:
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
- Un paso
parallelpermite que cada iteración del bucleforse ejecute en paralelo. La variable
resultsse declara comoshared, lo que permite que una rama pueda escribir en ella y que se le pueda añadir el resultado de cada rama.
Consola
En la Google Cloud consola, ve a la página Flujos de trabajo:
Haz clic en Crear.
Escribe un nombre para el nuevo flujo de trabajo, como
workflow-parallel-bqjobs.Elige una región adecuada, como us-central1.
Selecciona la cuenta de servicio que has creado anteriormente.
Haz clic en Siguiente.
En el editor del flujo de trabajo, introduce la siguiente definición para tu flujo de trabajo:
Haz clic en Desplegar.
En la página Detalles del flujo de trabajo, haz clic en play_arrow Ejecutar.
Vuelve a hacer clic en Ejecutar.
Consulta los resultados del flujo de trabajo en el panel Salida.
gcloud
Abre un terminal y crea un archivo de código fuente para tu flujo de trabajo:
touch workflow-parallel-bqjobs.yamlCopia el siguiente flujo de trabajo en tu archivo de código fuente:
Para desplegar el flujo de trabajo, introduce el siguiente comando:
gcloud workflows deploy workflow-parallell-bqjobs \ --source=workflow-parallel-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Sustituye
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.compor el correo de la cuenta de servicio que has creado anteriormente.Ejecuta el flujo de trabajo:
gcloud workflows run workflow-parallel-bqjobs
El resultado será similar al de la salida anterior, pero la ejecución del flujo de trabajo debería tardar unos 20 segundos o menos.
Limpieza
Si has creado un proyecto para este tutorial, elimínalo. Si has usado un proyecto y quieres conservarlo sin los cambios que has añadido en este tutorial, elimina los recursos creados para el tutorial.
Eliminar el proyecto
La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.
Para ello, sigue las instrucciones que aparecen a continuación:
- 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.
Eliminar recursos del tutorial
Elimina los flujos de trabajo creados en este tutorial:
gcloud workflows delete WORKFLOW_NAME
Siguientes pasos
- Para obtener más información sobre los pasos paralelos, consulta Ejecutar pasos paralelos.
- Para obtener más información sobre los conectores de Workflows, consulta Información sobre los conectores.
- Para obtener más información sobre Workflows, consulta la introducción a Workflows.