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, en série, dans le cadre d'une orchestration de workflows. Enfin, vous allez charger les requêtes en parallèle à l'aide de la fonctionnalité d'itération parallèle de Workflows pour multiplier la vitesse par cinq.
Points abordés
- Exécuter des requêtes BigQuery sur l'ensemble de données Wikipédia
- Exécuter plusieurs requêtes en série dans le cadre d'une orchestration de workflows
- Comment charger des requêtes en parallèle à l'aide de l'itération parallèle de 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. généralement, vous ne vous souciez
pas de ce que c’est. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (il est généralement identifié comme
PROJECT_ID
). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre au hasard. Vous pouvez également essayer la vôtre pour voir si elle est disponible. Il ne peut pas être modifié après cette étape et restera actif pendant toute la durée du projet. - Pour votre information, il existe une troisième valeur, le numéro de projet, utilisé par certaines API. 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 arrêter les ressources afin d'éviter que des frais ne vous soient facturés au-delà de ce tutoriel, vous pouvez supprimer les ressources que vous avez créées ou l'ensemble du projet. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit 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
Tout d'abord, explorez 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 divers ensembles de données publics, y compris des ensembles de données liés à Wikipédia:
Sous l'ensemble de données wikipedia_pageviews
, vous pouvez voir plusieurs tables pour les pages vues de différentes années:
Vous pouvez sélectionner l'une des tables (par exemple, 201207
) et prévisualisez les données:
Vous pouvez également exécuter des requêtes sur la table. Par exemple, la requête suivante sélectionne les 100 titres comptant le plus de vues:
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. Cependant, exécuter plusieurs requêtes sur plusieurs tables et rassembler les résultats peut s'avérer assez fastidieux. Pour vous aider, Workflows peut vous aider avec 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 à l'aide de 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 associée par les noms 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 choisissons cinq tables:
main: steps: - init: assign: - results : {} - tables: - 201201h - 201202h - 201203h - 201204h - 201205h
Ensuite, définissez une étape runQueries
. Cette étape effectue une itération sur chaque table et utilise la méthode Workflows Connecteur BigQuery pour exécuter une requête permettant de trouver les 100 titres comptant le plus de pages vues dans chaque table. Il enregistre ensuite le titre principal et les vues 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 en utilisant 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 nécessaires pour consigner et exécuter les tâches 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 Cloud Console, 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 table avec les titres et les vues les plus importants:
6. Mettre en parallèle plusieurs requêtes à l'aide d'étapes parallèles
Le workflow de l'étape précédente a pris environ une minute, car il a exécuté cinq requêtes d'une durée de 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 de Workflows.
Copiez le fichier workflow-serial.yaml
dans un nouveau fichier workflow-parallel.yaml
. Dans le nouveau fichier, vous allez effectuer quelques modifications pour transformer les étapes en série en étapes parallèles.
Dans le fichier workflow-parallel.yaml
, modifiez l'étape runQueries
. Tout d'abord, ajoutez 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
en tant que variable shared
. Cela permet à une branche d'être accessible en écriture à 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 est dû au fait que les cinq requêtes s'exécutent en parallèle. Jusqu'à cinq fois plus rapide avec seulement quelques lignes de code !
Au final, vous obtenez le même résultat pour chaque table avec les titres et les vues les plus importants, 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 sur les workflows sur les étapes parallèles.
Points abordés
- Exécuter des requêtes BigQuery sur l'ensemble de données Wikipédia
- Exécuter plusieurs requêtes en série dans le cadre d'une orchestration de workflows
- Comment charger des requêtes en parallèle à l'aide de l'itération parallèle de Workflows pour une vitesse jusqu'à cinq fois supérieure