1. Introduction

Workflows est un service d'orchestration entièrement géré qui exécute des services Google Cloud ou externes dans l'ordre que vous définissez.
BigQuery est un entrepôt de données d'entreprise entièrement géré, qui vous aide à gérer et analyser des téraoctets de données grâce à des fonctionnalités intégrées telles que le machine learning, l'analyse géospatiale et l'informatique décisionnelle.
Dans cet atelier de programmation, vous allez exécuter des requêtes BigQuery sur l'ensemble de données public Wikipédia. Vous verrez ensuite comment exécuter plusieurs requêtes BigQuery les unes après les autres de manière séquentielle, dans le cadre d'une orchestration Workflows. Enfin, vous paralléliserez les requêtes à l'aide de la fonctionnalité d'itération parallèle de Workflows pour améliorer la vitesse jusqu'à cinq fois.
Points abordés
- Comment exécuter des requêtes BigQuery sur l'ensemble de données Wikipédia
- Découvrez comment exécuter plusieurs requêtes de manière séquentielle dans le cadre d'une orchestration Workflows.
- Découvrez comment paralléliser les requêtes à l'aide de l'itération parallèle des workflows pour multiplier la vitesse par cinq.
2. Préparation
Configuration de l'environnement d'auto-formation
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)



- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pouvez le modifier à tout moment.
- L'ID du projet doit être unique sur l'ensemble des projets Google Cloud et doit être immuable (vous ne pouvez pas le modifier une fois que vous l'avez défini). La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID du projet (généralement identifié par
PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.
Démarrer Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.
Dans la console Google Cloud, cliquez sur l'icône Cloud Shell dans la barre d'outils supérieure :

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez effectuer toutes les tâches de cet atelier de programmation dans un navigateur. Vous n'avez rien à installer.
3. Explorer l'ensemble de données Wikipédia
Commencez par explorer l'ensemble de données Wikipédia dans BigQuery.
Accédez à la section BigQuery de la console Google Cloud :

Sous bigquery-samples, vous devriez voir différents ensembles de données publics, y compris certains ensembles de données liés à Wikipédia :

Sous l'ensemble de données wikipedia_pageviews, vous pouvez voir différents tableaux pour les vues de page de différentes années :

Vous pouvez sélectionner l'un des tableaux (par exemple, 201207) et prévisualisez les données :

Vous pouvez également exécuter des requêtes sur la table. Par exemple, cette requête sélectionne les 100 titres les plus consultés :
SELECT TITLE, SUM(views) FROM bigquery-samples.wikipedia_pageviews.201207h GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100
Une fois la requête exécutée, le chargement des données prend environ 20 secondes :

4. Définir un workflow pour exécuter plusieurs requêtes
Il est facile d'exécuter une requête sur une seule table. Toutefois, l'exécution de plusieurs requêtes sur plusieurs tables et la compilation des résultats peuvent devenir fastidieuses. Pour vous aider, Workflows peut utiliser sa syntaxe d'itération.
Dans Cloud Shell, créez un fichier workflow-serial.yaml pour créer un workflow permettant d'exécuter plusieurs requêtes sur plusieurs tables :
touch workflow-serial.yaml
Vous pouvez ensuite modifier le fichier avec l'éditeur dans Cloud Shell :

Dans le fichier workflow-serial.yaml, à la première étape init, créez une carte results pour suivre chaque itération indexée par nom de table. Définissez également un tableau tables avec la liste des tables sur lesquelles vous souhaitez exécuter des requêtes. Dans ce cas, nous allons choisir cinq tables :
main:
steps:
- init:
assign:
- results : {}
- tables:
- 201201h
- 201202h
- 201203h
- 201204h
- 201205h
Ensuite, définissez une étape runQueries. Cette étape itère sur chaque table et utilise le connecteur BigQuery de Workflows pour exécuter une requête permettant de trouver les 100 titres les plus consultés dans chaque table. Il enregistre ensuite le titre et le nombre de vues les plus élevés de chaque tableau dans la carte des résultats :
- runQueries:
for:
value: table
in: ${tables}
steps:
- runQuery:
call: googleapis.bigquery.v2.jobs.query
args:
projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
body:
useLegacySql: false
useQueryCache: false
timeoutMs: 30000
# Find the top 100 titles with most views on Wikipedia
query: ${
"SELECT TITLE, SUM(views)
FROM `bigquery-samples.wikipedia_pageviews." + table + "`
WHERE LENGTH(TITLE) > 10
GROUP BY TITLE
ORDER BY SUM(VIEWS) DESC
LIMIT 100"
}
result: queryResult
- returnResult:
assign:
# Return the top title from each table
- results[table]: {}
- results[table].title: ${queryResult.rows[0].f[0].v}
- results[table].views: ${queryResult.rows[0].f[1].v}
À la dernière étape, renvoyez la carte results :
- returnResults:
return: ${results}
5. Exécuter plusieurs requêtes avec Workflows
Avant de pouvoir déployer et exécuter le workflow, vous devez vous assurer que l'API Workflows est activée. Vous pouvez l'activer depuis la console Google Cloud ou à l'aide de gcloud dans Cloud Shell :
gcloud services enable workflows.googleapis.com
Créez un compte de service pour Workflows :
SERVICE_ACCOUNT=workflows-bigquery-sa gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Workflows BigQuery service account"
Assurez-vous que le compte de service dispose des rôles permettant de consigner et d'exécuter des jobs BigQuery :
PROJECT_ID=your-project-id gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/logging.logWriter \ --role roles/bigquery.jobUser \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Déployez le workflow avec le compte de service :
gcloud workflows deploy bigquery-serial \
--source=workflow-serial.yaml \
--service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Enfin, vous êtes prêt à exécuter le workflow.
Recherchez le workflow bigquery-serial dans la section "Workflows" de la console Cloud, puis cliquez sur le bouton Execute :

Vous pouvez également exécuter le workflow avec gcloud dans Cloud Shell :
gcloud workflows run bigquery-serial
L'exécution du workflow devrait durer environ une minute (20 secondes pour chacune des cinq tables).
À la fin, vous verrez le résultat de chaque tableau avec les titres et les vues les plus populaires :


6. Paralléliser plusieurs requêtes avec des étapes parallèles
Le workflow de l'étape précédente a pris environ une minute, car il a exécuté cinq requêtes qui ont duré 20 secondes chacune. Comme il s'agit de requêtes indépendantes, vous pouvez les exécuter en parallèle à l'aide de la fonctionnalité d'itération parallèle des workflows.
Copiez le fichier workflow-serial.yaml dans un nouveau fichier workflow-parallel.yaml. Dans le nouveau fichier, vous allez apporter quelques modifications pour transformer les étapes en série en étapes parallèles.
Dans le fichier workflow-parallel.yaml, modifiez l'étape runQueries. Commencez par ajouter le mot clé parallel. Cela permet à chaque itération de la boucle for de s'exécuter en parallèle. Ensuite, déclarez la variable results comme variable shared. Cela permet à une branche d'écrire dans la variable. Nous ajouterons chaque résultat à cette variable.
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
Déployez le workflow parallèle :
gcloud workflows deploy bigquery-parallel \
--source=workflow-parallel.yaml \
--service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Exécutez le workflow comme suit :
gcloud workflows run bigquery-parallel
L'exécution du workflow devrait durer environ 20 secondes. Cela s'explique par le fait que les cinq requêtes s'exécutent en parallèle. Jusqu'à cinq fois plus rapide en modifiant seulement quelques lignes de code !
Au final, vous obtiendrez le même résultat pour chaque table avec les titres et les vues les plus populaires, mais avec un temps d'exécution beaucoup plus court :

7. Félicitations
Félicitations, vous avez terminé cet atelier de programmation. Pour en savoir plus, consultez la documentation Workflows sur les étapes parallèles.
Points abordés
- Comment exécuter des requêtes BigQuery sur l'ensemble de données Wikipédia
- Découvrez comment exécuter plusieurs requêtes de manière séquentielle dans le cadre d'une orchestration Workflows.
- Découvrez comment paralléliser les requêtes à l'aide de l'itération parallèle des workflows pour multiplier la vitesse par cinq.