Créer des instantanés de table avec une requête programmée
Ce document explique comment créer des instantanés mensuels d'une table à l'aide d'un compte de service qui exécute une requête LDD programmée. Ce document vous présente l'exemple suivant :
- Dans le projet
PROJECT
, créez un compte de service nommésnapshot-bot
. - Accordez au compte de service
snapshot-bot
les autorisations nécessaires pour prendre des instantanés de table de la tableTABLE
, qui se trouve dans l'ensemble de donnéesDATASET
et stockez les instantanés de table dans l'ensemble de donnéesBACKUP
. - Écrivez une requête qui crée des instantanés mensuels de la table
TABLE
et les place dans l'ensemble de donnéesBACKUP
. Comme les instantanés de table ne peuvent pas être écrasés, les instantanés de table doivent porter des noms uniques. Pour ce faire, la requête ajoute la date actuelle aux noms des instantanés de la table. par exemple,TABLE_20220521
. Les instantanés de la table expirent au bout de 40 jours. - Planifiez le compte de service
snapshot-bot
pour exécuter la requête le premier jour de chaque mois.
Ce document est destiné aux utilisateurs qui connaissent déjà BigQuery et les instantanés de table BigQuery.
Autorisations et rôles
Cette section décrit laAutorisations IAM (Identity and Access Management) que vous devez avoir pour créer un compte de service et programmer une requête, et les Rôles IAM prédéfinis qui accordent ces autorisations.
Autorisations
Pour utiliser un compte de service, vous devez disposer des autorisations suivantes :
Autorisation | Ressource | Type de ressource |
---|---|---|
iam.serviceAccounts.*
|
PROJECT |
Projet |
Pour planifier une requête, vous devez disposer des autorisations suivantes :
Autorisation | Ressource | Type de ressource |
---|---|---|
bigquery.jobs.create
|
PROJECT |
Projet |
Rôles
Les rôles prédéfinis qui fournissent les autorisations requises pour utiliser un compte de service sont les suivants :
Rôle | Ressource | Type de ressource |
---|---|---|
Au choix :roles/iam.serviceAccountAdmin roles/editor roles/owner
|
PROJECT |
Projet |
Les rôles BigQuery prédéfinis qui fournissent les autorisations requises pour programmer une requête sont les suivants :
Rôle | Ressource | Type de ressource |
---|---|---|
Au choix :roles/bigquery.user roles/bigquery.jobuser roles/bigquery.admin `
|
PROJECT |
Projet |
Créez le compte de service snapshot-bot
Suivez les étapes ci-dessous pour créer le compte de service snapshot-bot
et lui accorder les autorisations nécessaires pour exécuter des requêtes dans le projet PROJECT
:
Console
Dans Cloud Console, accédez à la page Comptes de service :
Sélectionnez le projet
PROJECT
.Créez le compte de service
snapshot-bot
:Cliquez sur Créer un compte de service.
Dans le champ Nom du compte de service, saisissez snapshot-bot.
Cliquez sur Créer et continuer.
Accordez au compte de service les autorisations nécessaires pour exécuter des tâches BigQuery :
Dans la section Autoriser ce compte de service à accéder au projet, sélectionnez le rôle Utilisateur BigQuery.
Cliquez sur OK.
BigQuery crée le compte de service avec l'adresse e-mail snapshot-bot@PROJECT.iam.gserviceaccount.com
.
Pour vérifier que BigQuery a créé le compte de service avec les autorisations que vous avez spécifiées, procédez comme suit :
Console
Vérifiez que BigQuery a créé le compte de service :
Dans la console Google Cloud, accédez à la page Comptes de service :
Sélectionnez le projet
PROJECT
.Cliquez sur snapshot-bot@PROJECT.iam.gserviceaccount.com.
Vérifiez que le message État du compte de service indique que votre compte de service est actif.
Vérifiez que BigQuery a accordé à votre compte de service l'autorisation dont il a besoin pour exécuter des requêtes :
Dans la console Google Cloud, accédez à la page Gérer les ressources :
Cliquez sur
PROJECT
.Cliquez sur Afficher le panneau d'informations.
Dans l'onglet Autorisations, développez le nœud Utilisateur BigQuery.
Vérifiez que votre compte de service snapshot-bot est répertorié.
Accordez des autorisations au compte de service.
Cette section explique comment accorder au compte de service snapshot-bot
les autorisations nécessaires pour créer des instantanés de table de la table DATASET.TABLE
dans l'ensemble de données BACKUP
.
Autorisation de prendre des instantanés de la table de base
Pour accorder au compte de service snapshot-bot
les autorisations nécessaires pour prendre des instantanés de la table DATASET.TABLE
, procédez comme suit :
Console
Dans la console Google Cloud, ouvrez la page BigQuery.
Dans le volet Explorer, développez le nœud du projet
PROJECT
.Développez le nœud d'ensemble de données DATASET.
Sélectionnez la table TABLE.
Cliquez sur Partager. Le volet Partager s'ouvre.
Cliquez sur Ajouter un compte principal. Le volet Accorder l'accès s'affiche.
Dans Nouveaux comptes principaux, saisissez l'adresse e-mail du compte de service: snapshot-bot@PROJECT.iam.gserviceaccount.com.
Dans le menu déroulant Sélectionner un rôle, sélectionnez le rôle Éditeur de données BigQuery.
Cliquez sur Enregistrer.
Dans le volet Partager, développez le nœud Lecteur de données BigQuery et vérifiez que le compte de service snapshot-bot@PROJECT.iam.gserviceaccount.com est répertorié.
Cliquez sur Fermer.
bq
Dans Cloud Console, activez Cloud Shell :
Saisissez la commande
bq add-iam-policy-binding
suivante :bq add-iam-policy-binding \ --member=serviceAccount:snapshot-bot@PROJECT.iam.gserviceaccount.com \ --role=roles/bigquery.dataEditor DATASET.TABLE
BigQuery confirme que la nouvelle liaison de stratégie a été ajoutée.
Autorisation de créer des tables dans l'ensemble de données de destination
Accordez au compte de service snapshot-bot
les autorisations nécessaires pour créer des instantanés de table dans l'ensemble de données BACKUP
, comme suit :
Console
Dans la console Google Cloud, accédez à la page BigQuery.
Dans le volet Explorer, développez le nœud du projet
PROJECT
.Cliquez sur le menu du nœud de l'ensemble de données BACKUP et sélectionnez Ouvrir.
Cliquez sur Partager l'ensemble de données. Le volet Autorisations de l'ensemble de données s'ouvre.
Dans le champ Ajouter des membres, saisissez l'adresse e-mail du compte de service : snapshot-bot@PROJECT.iam.gserviceaccount.com.
Dans le menu déroulant Sélectionner un rôle, sélectionnez le rôle Propriétaire de données BigQuery.
Cliquez sur Ajouter.
Dans le volet Autorisations de l'ensemble de données, vérifiez que le compte de service snapshot-bot@PROJECT.iam.gserviceaccount.com est répertorié sous le nœud Propriétaire de données BigQuery.
Cliquez sur OK.
Votre compte de service snapshot-bot
dispose désormais des rôles IAM suivants pour les ressources suivantes :
Rôle | Ressource | Type de ressource | Objectif |
---|---|---|---|
Éditeur de données BigQuery | PROJECT:DATASET.TABLE |
Table | Réaliser des instantanés de la table TABLE . |
Propriétaire de données BigQuery | PROJECT:BACKUP |
Ensemble de données | Créer et supprimer des instantanés de table dans l'ensemble de données BACKUP . |
Utilisateur BigQuery | PROJECT |
Projet | Exécuter la requête programmée qui crée les instantanés de table. |
Ces rôles fournissent les autorisations nécessaires au compte de service snapshot-bot
pour exécuter des requêtes qui créent des instantanés de table de la table DATASET.TABLE
et les placent dans l'ensemble de données BACKUP
.
Écrire une requête à plusieurs instructions
Cette section décrit comment écrire une requête à plusieurs instructions qui crée un instantané de table de la table DATASET.TABLE
à l'aide de l'instruction LDD CREATE SNAPSHOT TABLE
.
L'instantané est enregistré dans l'ensemble de données BACKUP
et expire au bout d'un jour.
-- Declare variables
DECLARE snapshot_name STRING;
DECLARE expiration TIMESTAMP;
DECLARE query STRING;
-- Set variables
SET expiration = DATE_ADD(current_timestamp(), INTERVAL 1 DAY);
SET snapshot_name = CONCAT(
"BACKUP.TABLE_",
FORMAT_DATETIME('%Y%m%d', current_date()));
-- Construct the query to create the snapshot
SET query = CONCAT(
"CREATE SNAPSHOT TABLE ",
snapshot_name,
" CLONE mydataset.mytable OPTIONS(expiration_timestamp = TIMESTAMP '",
expiration,
"');");
-- Run the query
EXECUTE IMMEDIATE query;
Planifier la requête mensuelle
Planifiez l'exécution de votre requête à 5h00 le premier jour de chaque mois comme suit :
bq
Dans Cloud Console, activez Cloud Shell :
Saisissez la commande
bq query
suivante :bq query --use_legacy_sql=false --display_name="Monthly snapshots of the TABLE table" \ --location="us" --schedule="1 of month 05:00" \ --project_id=PROJECT \ 'DECLARE snapshot_name STRING; DECLARE expiration TIMESTAMP; DECLARE query STRING; SET expiration = DATE_ADD(@run_time, INTERVAL 40 DAY); SET snapshot_name = CONCAT("BACKUP.TABLE_", FORMAT_DATETIME("%Y%m%d", @run_date)); SET query = CONCAT("CREATE SNAPSHOT TABLE ", snapshot_name, " CLONE PROJECT.DATASET.TABLE OPTIONS(expiration_timestamp=TIMESTAMP \"", expiration, "\");"); EXECUTE IMMEDIATE query;'
BigQuery planifie la requête.
La requête à plusieurs instructions de la commande de l'outil de ligne de commande bq diffère de la requête que vous avez exécutée dans la console Google Cloud comme suit :
- La requête de l'outil de ligne de commande bq utilise
@run_date
au lieu decurrent_date()
. Dans une requête programmée, le paramètre@run_date
contient la date actuelle. Toutefois, dans une requête interactive, le paramètre@run_date
n'est pas accepté. Vous pouvez utilisercurrent_date()
au lieu de@run_date
pour tester une requête interactive avant de la planifier. - La requête de l'outil de ligne de commande bq utilise
@run_time
au lieu decurrent_timestamp()
pour une raison semblable : le paramètre@run_time
n'est pas compatible avec les requêtes interactives, maiscurrent_timestamp()
peut être utilisé au lieu de@run_time
pour tester la requête interactive. - La requête de l'outil de ligne de commande bq utilise une barre oblique et un guillemet double
\"
au lieu d'un guillemet simple'
, car les guillemets simples sont utilisés pour délimiter la requête.
Configurer le compte de service pour exécuter la requête programmée
La requête est actuellement programmée pour s'exécuter en utilisant vos identifiants.
Mettez à jour votre requête programmée pour qu'elle s'exécute avec les identifiants du compte de service snapshot-bot
comme suit :
Exécutez la commande
bq ls
pour obtenir l'identité de la tâche de requête programmée :bq ls --transfer_config=true --transfer_location=us
La sortie ressemble à ceci :
name
displayName
dataSourceId
state
projects/12345/locations/us/transferConfigs/12345
Monthly snapshots of the TABLE table
scheduled_query
RUNNING
En utilisant l'identifiant figurant dans le champ
name
, exécutez la commandebq update
suivante :bq update --transfer_config --update_credentials \ --service_account_name=snapshot-bot@PROJECT.iam.gserviceaccount.com \ projects/12345/locations/us/transferConfigs/12345
Cloud Shell confirme que la requête programmée a bien été mise à jour.
Vérifiez votre travail
Cette section explique comment vérifier que votre requête est correctement planifiée, si des erreurs se sont produites lors de son exécution et comment vérifier que des instantanés mensuels ont bien été créés.
Afficher la requête programmée
Pour vérifier que BigQuery a programmé votre requête d'instantanés de table mensuelle, procédez comme suit :
Console
Dans la console Google Cloud, accédez à la page Requêtes programmées :
Cliquez sur Instantanés mensuels de la table TABLE.
Cliquez sur Configuration
Vérifiez que la chaîne de requête contient votre requête et que celle-ci est programmée pour s'exécuter le premier jour de chaque mois.
Afficher l'historique d'exécution d'une requête programmée
Une fois la requête programmée exécutée, vous pouvez voir si elle s'est bien exécutée comme suit :
Console
Dans la console Google Cloud, accédez à la page Requêtes programmées :
Cliquez sur la description de la requête, Instantanés mensuels de la table TABLE.
Cliquez sur Historique d'exécution.
Vous pouvez voir la date et l'heure d'exécution de la requête, si l'exécution a abouti, et si non, quelles erreurs se sont produites. Pour afficher plus de détails sur une exécution particulière, cliquez sur sa ligne dans le tableau Run history (Historique d'exécution). Le volet Détails de l'exécution affiche des détails supplémentaires.
Afficher les instantanés de table
Pour vérifier que les instantanés de table sont bien créés, procédez comme suit :
Console
Dans la console Google Cloud, accédez à la page BigQuery.
Dans le volet Explorer, ouvrez l'ensemble de données
BACKUP
et vérifiez que les instantanésTABLE_YYYYMMDD
ont été créés, oùYYYYMMDD
correspond au premier jour de chaque mois. .Exemple :
TABLE_20220601
TABLE_20220701
TABLE_20220801
Étape suivante
- Pour en savoir plus sur les instantanés de table, consultez la page Utiliser des instantanés de table.
- Pour en savoir plus sur la planification des requêtes, consultez la page Planifier des requêtes.
- Pour en savoir plus sur les comptes de service gérés par Google, consultez la page Comptes de service.