BigQuery aloja varios conjuntos de datos públicos que están disponibles para consultar al público general. En este instructivo, crearás un flujo de trabajo que ejecuta varios trabajos de consulta de BigQuery en paralelo demostrar una mejora en el rendimiento en comparación con la ejecución de los trabajos en serie, uno tras otro.
Objetivos
En este instructivo, realizarás las siguientes acciones:- Ejecutar una consulta contra un conjunto de datos públicos de Wikipedia para determinar los títulos más vistos en un mes específico.
- Implementar y ejecutar un flujo de trabajo que ejecute varias funciones de BigQuery consultar trabajos en serie, uno tras otro.
- Implementar y ejecutar un flujo de trabajo que ejecute los trabajos de BigQuery
con la iteración paralela
donde los bucles
for
comunes se ejecutan en paralelo.
Puedes ejecutar los siguientes comandos en la consola de Google Cloud o mediante con Google Cloud CLI en tu 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 de Google Cloud restringido.
Console
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita la API de Workflows.
-
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.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita la API de Workflows.
-
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
-
Accede a tu cuenta de Google.
Si todavía no tienes una cuenta, regístrate para obtener una nueva.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita la API de Workflows:
gcloud services enable workflows.googleapis.com
-
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
roles/bigquery.jobUser, roles/logging.logWriter
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita la API de Workflows:
gcloud services enable workflows.googleapis.com
-
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
roles/bigquery.jobUser, roles/logging.logWriter
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
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 de BigQuery.
Ingresa la siguiente consulta en SQL de BigQuery Á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 la 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 principales de Wikipedia con más vistas en un mes específico y escribe el resultado en una tabla temporal.
Anota cuánto tarda en ejecutarse la consulta.
Implementa un flujo de trabajo que ejecute varias consultas en serie
Una definición de flujo de trabajo se compone de una serie de pasos descritos a través del Sintaxis de flujos de trabajo. Después de crear un flujo de trabajo, lo implementas para que esté disponible para su ejecución. El paso de implementación también valida de que se pueda ejecutar el archivo fuente.
El siguiente flujo de trabajo define una lista de cinco tablas para ejecutar una consulta usando el Workflows Conector de BigQuery. Las consultas se ejecutan en serie, una tras 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 antes.
Ya deberías haber otorgado los permisos de BigQuery > Usuario de trabajo de BigQuery y Logging Roles de IAM de > escritor de registros para el servicio de servicio predeterminada.
Haz clic en Siguiente.
En el editor de flujos de trabajo, ingresa la siguiente definición para tu flujo de trabajo:
Haga 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
Reemplazar
MY_SERVICE_ACCOUNT@MY_PROJECT.IAM.GSERVICEACCOUNT.COM
por el correo electrónico de la cuenta de servicio que creaste con anterioridad.Ya deberías haber otorgado los permisos
roles/bigquery.jobUser
yroles/logging.logWriter
roles de IAM al servicio de servicio predeterminada.
Ejecutar el flujo de trabajo y ejecutar varias consultas en serie
Cuando se ejecuta un flujo de trabajo, se ejecuta la definición del flujo de trabajo actual asociada con el en el flujo de trabajo.
Console
En la consola de Google Cloud, ve a la página Workflows.
En la página Flujos de trabajo, selecciona la 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 Ejecución.
Haz clic de nuevo en Ejecutar.
Observa 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 tardar entre un minuto o cinco veces el tiempo tiempo de ejecución anterior. El resultado incluirá cada tabla y será similar a lo 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 ejecute 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 le permite que una rama pueda escribir y que el resultado de cada rama se le pueda anexar.
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 antes.
Haz clic en Siguiente.
En el editor de flujos de trabajo, ingresa la siguiente definición para tu flujo de trabajo:
Haga clic en Implementar.
En la página Detalles del flujo de trabajo, haz clic en play_arrow Ejecución.
Haz clic de nuevo en Ejecutar.
Observa 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
Reemplazar
MY_SERVICE_ACCOUNT@MY_PROJECT.IAM.GSERVICEACCOUNT.COM
por el correo electrónico de la cuenta de servicio que creaste con anterioridad.Ejecuta el flujo de trabajo:
gcloud workflows run workflow-parallel-bqjobs
El resultado será similar al resultado anterior, pero la ejecución del flujo de trabajo debería tomar alrededor de 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, haz lo siguiente:
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Elimina recursos de instructivos
Borra los flujos de trabajo que creaste en este instructivo:
gcloud workflows delete WORKFLOW_NAME
¿Qué sigue?
- Para obtener más información sobre los pasos paralelos, consulta Ejecuta 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 Descripción general de Workflows.