BigQuery héberge un certain nombre d'ensembles de données publics que le grand public peut interroger. Dans ce tutoriel, vous allez créer un workflow qui exécute plusieurs jobs de requête BigQuery en parallèle. Vous constaterez ainsi une amélioration des performances par rapport à l'exécution des jobs en série, les uns après les autres.
Objectifs
Dans ce tutoriel, vous allez :- Exécutez une requête sur un ensemble de données public Wikipédia pour déterminer les titres les plus consultés au cours d'un mois spécifique.
- Déployer et exécuter un workflow qui exécute plusieurs jobs de requête BigQuery en série, les uns après les autres.
- Déployez et exécutez un workflow qui exécute les jobs BigQuery à l'aide de l'itération parallèle, et où les boucles
forordinaires sont exécutées en parallèle.
Vous pouvez exécuter les commandes suivantes dans la console Google Cloud ou à l'aide de Google Cloud CLI dans votre terminal ou Cloud Shell.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Pour obtenir une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.
Avant de commencer
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour en savoir plus sur la résolution de ce problème, consultez Développer des applications dans un environnement Google Cloud limité.
Console
- Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
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
-
Connectez-vous à votre compte Google.
Si vous n'en possédez pas déjà un, vous devez en créer un.
-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Créez ou sélectionnez un projet Google Cloud .
Rôles requis pour sélectionner ou créer un projet
- Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_IDpar le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_IDpar le nom de votre projet Google Cloud .
-
Vérifiez que la facturation est activée pour votre projet Google Cloud .
Activer l'API Workflows
Rôles requis pour activer les API
Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin), qui contient l'autorisationserviceusage.services.enable. Découvrez comment attribuer des rôles.gcloud services enable workflows.googleapis.com
-
Configurez l'authentification :
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
roles/iam.serviceAccountCreator) et "Administrateur IAM du projet" (roles/resourcemanager.projectIamAdmin). Découvrez comment attribuer des rôles. -
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAMEpar le nom que vous souhaitez donner au compte de service. -
Attribuez des rôles au compte de service. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :
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
Remplacez les éléments suivants :
SERVICE_ACCOUNT_NAME: nom du compte de service.PROJECT_ID: ID du projet dans lequel vous avez créé le compte de service.ROLE: rôle à accorder
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Créez ou sélectionnez un projet Google Cloud .
Rôles requis pour sélectionner ou créer un projet
- Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_IDpar le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_IDpar le nom de votre projet Google Cloud .
-
Vérifiez que la facturation est activée pour votre projet Google Cloud .
Activer l'API Workflows
Rôles requis pour activer les API
Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin), qui contient l'autorisationserviceusage.services.enable. Découvrez comment attribuer des rôles.gcloud services enable workflows.googleapis.com
-
Configurez l'authentification :
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
roles/iam.serviceAccountCreator) et "Administrateur IAM du projet" (roles/resourcemanager.projectIamAdmin). Découvrez comment attribuer des rôles. -
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAMEpar le nom que vous souhaitez donner au compte de service. -
Attribuez des rôles au compte de service. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :
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
Remplacez les éléments suivants :
SERVICE_ACCOUNT_NAME: nom du compte de service.PROJECT_ID: ID du projet dans lequel vous avez créé le compte de service.ROLE: rôle à accorder
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
Exécuter un job de requête BigQuery
Dans BigQuery, vous pouvez exécuter une tâche de requête interactive (à la demande). Pour en savoir plus, consultez la page Exécuter des tâches de requête interactives et par lot.
Console
Dans la console Google Cloud , accédez à la page BigQuery.
Saisissez la requête SQL BigQuery suivante dans la zone de texte de l'éditeur de requête :
SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews.201207h` GROUP BY TITLE ORDER BY SUM(views) DESC LIMIT 100Cliquez sur Exécuter.
bq
Dans votre terminal, saisissez la commande bq query suivante pour exécuter une requête interactive à l'aide de la syntaxe SQL standard :
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'
Cette requête renvoie les 100 titres Wikipédia les plus consultés au cours d'un mois donné et écrit les résultats dans une table temporaire.
Notez la durée d'exécution de la requête.
Déployer un workflow qui exécute plusieurs requêtes en série
Une définition de workflow est constituée d'une série d'étapes décrites à l'aide de la syntaxe Workflows. Après avoir créé un workflow, vous pouvez le déployer pour le rendre disponible en exécution. L'étape de déploiement vérifie également que le fichier source peut être exécuté.
Le workflow suivant définit une liste de cinq tables sur lesquelles exécuter une requête à l'aide du connecteur BigQuery de Workflows. Les requêtes sont exécutées en série, les unes après les autres, et les titres les plus regardés de chaque table sont enregistrés dans une carte de résultats.
Console
Dans la console Google Cloud , accédez à la page Workflows :
Cliquez sur Créer.
Saisissez un nom pour le nouveau workflow, par exemple
workflow-serial-bqjobs.Choisissez une région appropriée. Exemple : us-central1.
Sélectionnez le compte de service que vous avez créé précédemment.
Vous devez déjà avoir attribué les rôles IAM BigQuery> Utilisateur de tâche BigQuery et Logging> Rédacteur de journaux au compte de service.
Cliquez sur Suivant.
Dans l'éditeur de workflow, saisissez la définition suivante pour votre workflow :
Cliquez sur Déployer.
gcloud
Ouvrez un terminal et créez un fichier de code source pour votre workflow :
touch workflow-serial-bqjobs.yamlCopiez le workflow suivant dans votre fichier de code source :
Déployez le workflow en saisissant la commande suivante :
gcloud workflows deploy workflow-serial-bqjobs \ --source=workflow-serial-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Remplacez
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.compar l'adresse e-mail du compte de service que vous avez créé précédemment.Vous devez déjà avoir attribué les rôles IAM
roles/bigquery.jobUseretroles/logging.logWriterau compte de service.
Exécuter le workflow et exécuter plusieurs requêtes en série
L'exécution d'un workflow exécute la définition actuelle du workflow associé au workflow.
Console
Dans la console Google Cloud , accédez à la page Workflows :
Sur la page Workflows, sélectionnez le workflow workflow-serial-bqjobs pour accéder à sa page d'informations.
Sur la page Détails du workflow, cliquez sur play_arrow Exécuter.
Cliquez à nouveau sur Exécuter.
Affichez les résultats du workflow dans le volet Output (Résultat).
gcloud
Ouvrez un terminal.
Exécutez le workflow :
gcloud workflows run workflow-serial-bqjob
L'exécution du workflow devrait prendre environ une minute ou cinq fois le temps d'exécution précédent. Le résultat inclura chaque tableau et ressemblera à ce qui suit :
{
"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"
}
}
Déployer et exécuter un workflow qui exécute plusieurs requêtes en parallèle
Au lieu d'exécuter cinq requêtes de manière séquentielle, vous pouvez les exécuter en parallèle en apportant quelques modifications :
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
- Une étape
parallelpermet à chaque itération de la boucleforde s'exécuter en parallèle. La variable
resultsest déclarée commeshared, ce qui lui permet d'être accessible en écriture par une branche, et le résultat de chaque branche peut y être ajouté.
Console
Dans la console Google Cloud , accédez à la page Workflows :
Cliquez sur Créer.
Saisissez un nom pour le nouveau workflow, par exemple
workflow-parallel-bqjobs.Choisissez une région appropriée. Exemple : us-central1.
Sélectionnez le compte de service que vous avez créé précédemment.
Cliquez sur Suivant.
Dans l'éditeur de workflow, saisissez la définition suivante pour votre workflow :
Cliquez sur Déployer.
Sur la page Détails du workflow, cliquez sur play_arrow Exécuter.
Cliquez à nouveau sur Exécuter.
Affichez les résultats du workflow dans le volet Output (Résultat).
gcloud
Ouvrez un terminal et créez un fichier de code source pour votre workflow :
touch workflow-parallel-bqjobs.yamlCopiez le workflow suivant dans votre fichier de code source :
Déployez le workflow en saisissant la commande suivante :
gcloud workflows deploy workflow-parallell-bqjobs \ --source=workflow-parallel-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
Remplacez
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.compar l'adresse e-mail du compte de service que vous avez créé précédemment.Exécutez le workflow :
gcloud workflows run workflow-parallel-bqjobs
Le résultat sera semblable à la sortie précédente, mais l'exécution du workflow devrait prendre environ 20 secondes ou moins.
Effectuer un nettoyage
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- Dans la console Google Cloud , accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer les ressources du tutoriel
Supprimez les workflows créés dans ce tutoriel :
gcloud workflows delete WORKFLOW_NAME
Étapes suivantes
- Pour en savoir plus sur les étapes parallèles, consultez Exécuter des étapes parallèles.
- Pour en savoir plus sur les connecteurs Workflows, consultez l'article Comprendre les connecteurs.
- Pour en savoir plus sur Workflows, consultez la présentation de Workflows.