Gérer les tâches

Après avoir envoyé une tâche BigQuery, vous pouvez afficher les données de la tâche, répertorier les tâches, annuler la tâche ou la relancer.

Une fois envoyée, une tâche peut être déterminée par l'un des trois états suivants :

  • PENDING – planifiée
  • RUNNING
  • DONE – signalée comme SUCCESS ou FAILURE (si la tâche s'est terminée avec des erreurs)

Afficher les données de la tâche

Vous pouvez afficher les métadonnées et les données de la tâche à l'aide de la console GCP, de l'UI Web classique, de la CLI et de l'API. Ces données incluent des détails tels que le type de tâche, l'état de la tâche et l'utilisateur qui l'a exécutée.

Autorisations requises

Pour obtenir des données et des métadonnées de tâche, vous devez disposer des autorisations bigquery.jobs.get. Le rôle IAM suivant prédéfini au niveau du projet inclut les autorisations bigquery.jobs.get :

Si vous accordez à un compte le rôle bigquery.admin, l'utilisateur pourra afficher toutes les données de tâche du projet, indépendamment de l'utilisateur ayant envoyé la tâche.

Les rôles suivants disposent des autorisations bigquery.jobs.get pour les tâches créées par vos utilisateurs. Ces utilisateurs ne sont autorisés à afficher les données de tâches que pour les tâches qu'ils envoient :

Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la section Contrôle des accès.

Afficher des informations sur les tâches

Pour afficher des informations sur une tâche, veuillez procéder comme suit :

UI classique

  1. Dans le volet de navigation, cliquez sur Historique des tâches.

  2. Dans la section Tâches récentes, cliquez sur la tâche pour afficher les détails.

CLI

Exécutez la commande bq show avec les paramètres -j et job_id. Spécifiez l'indicateur --location et définissez la valeur correspondant à votre emplacement.

La commande suivante demande des informations sur une tâche :

bq --location=[LOCATION] show -j [JOB_ID]

Où :

  • [LOCATION] est le nom de la zone dans laquelle la tâche est exécutée. Par exemple, si vous utilisez BigQuery dans la région de Tokyo, définissez la valeur de l'indicateur sur asia-northeast1. Vous pouvez définir une valeur par défaut correspondant à l'emplacement en utilisant le fichier .bigqueryrc.
  • [JOB_ID] est l'ID de la tâche.

Exemples :

La commande suivante obtient des informations récapitulatives sur la tâche bquijob_123x456_123y123z123c exécutée dans myproject, dans la zone multirégionale US :

bq --location=US show -j myproject:bquijob_123x456_123y123z123c

Le résultat doit se présenter sous la forme suivante :

 Job Type    State      Start Time      Duration      User Email       Bytes Processed   Bytes Billed   Billing Tier   Labels


extract SUCCESS 06 Jul 11:32:10 0:01:41 user@example.com

Pour afficher tous les détails de la tâche, renseignez la ligne suivante :

bq --location=US show --format=prettyjson -j myproject:bquijob_123x456_789y123z456c

Le résultat doit se présenter sous la forme suivante :

{
  "configuration": {
    "extract": {
      "compression": "NONE",
      "destinationUri": "[URI removed]",
      "destinationUris": [
        "[URI removed]"
      ],
      "sourceTable": {
        "datasetId": "github_repos",
        "projectId": "bigquery-public-data",
        "tableId": "commits"
      }
    }
  },
  "etag": "\"[etag removed]\"",
  "id": "myproject:bquijob_123x456_789y123z456c",
  "jobReference": {
    "jobId": "bquijob_123x456_789y123z456c",
    "projectId": "[Project ID removed]"
  },
  "kind": "bigquery#job",
  "selfLink": "https://www.googleapis.com/bigquery/v2/projects/federated-testing/jobs/bquijob_123x456_789y123z456c",
  "statistics": {
    "creationTime": "1499365894527",
    "endTime": "1499365894702",
    "startTime": "1499365894702"
  },
  "status": {
    "errorResult": {
      "debugInfo": "[Information removed for readability]",
      "message": "Operation cannot be performed on a nested schema. Field: author",
      "reason": "invalid"
    },
    "errors": [
      {
        "message": "Operation cannot be performed on a nested schema. Field: author",
        "reason": "invalid"
      }
    ],
    "state": "DONE"
  },
  "user_email": "user@example.com"
}

La commande suivante obtient des informations récapitulatives sur la tâche bquijob_123x456_123y123z123c exécutée dans myproject, dans la région asia-northeast1 :

bq --location=asia-northeast1 show -j myproject:bquijob_123x456_123y123z123c

API

Appelez jobs.get, puis indiquez les paramètres jobId et projectId. Spécifiez le paramètre location et définissez la valeur correspondant à l'emplacement d'exécution de la tâche.

Go

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
job, err := client.JobFromID(ctx, jobID)
if err != nil {
	return err
}

status := job.LastStatus()
state := "Unknown"
switch status.State {
case bigquery.Pending:
	state = "Pending"
case bigquery.Running:
	state = "Running"
case bigquery.Done:
	state = "Done"
}
fmt.Printf("Job %s was created %v and is in state %s\n",
	jobID, status.Statistics.CreationTime, state)

Python

Avant de tester cet exemple, suivez la procédure de configuration de Python dans le guide de démarrage rapide de BigQuery à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Python.

# TODO(developer): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# client = bigquery.Client()
# job_id = 'bq-job-123x456-123y123z123c'  # replace with your job ID
# location = 'us'                         # replace with your location

job = client.get_job(job_id, location=location)  # API request

# Print selected job properties
print('Details for job {} running in {}:'.format(job_id, location))
print('\tType: {}\n\tState: {}\n\tCreated: {}'.format(
    job.job_type, job.state, job.created))

Répertorier des tâches dans un projet

Votre projet conserve un historique pour toutes les tâches créées au cours des six derniers mois. Pour demander la suppression automatique des tâches datant de plus de 50 jours, contactez l'assistance.

Vous pouvez afficher l'historique de vos tâches BigQuery via la console Google Cloud Platform, l'UI Web classique, la CLI ou l'API. Cet historique inclut les tâches à l'état RUNNING et les tâches indiquées comme DONE (avec l'état SUCCESS ou FAILURE).

Autorisations requises

Pour répertorier les tâches, vous devez disposer des autorisations bigquery.jobs.list. Les rôles IAM suivants prédéfinis au niveau du projet incluent les autorisations bigquery.jobs.list :

Lorsque vous disposez des autorisations bigquery.jobs.list, vous pouvez répertorier toutes les tâches d'un projet. Toutefois, les détails et les métadonnées des tâches envoyées par d'autres utilisateurs sont masqués. Les autorisations bigquery.jobs.list ne vous permettent d'afficher que les détails des tâches que vous avez créées.

Pour répertorier toutes les tâches, y compris les détails de celles créées par d'autres utilisateurs, vous devez disposer des autorisations bigquery.jobs.listAll. Seul le rôle bigquery.admin dispose des autorisations bigquery.jobs.listAll.

Le rôle suivant ne dispose des autorisations bigquery.jobs.list que pour les tâches créées par vos utilisateurs. Ces utilisateurs ne peuvent répertorier que les tâches qu’ils envoient :

Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la section Contrôle des accès.

Répertorier les tâches

Lorsque vous répertoriez des tâches dans un projet, il est inutile de fournir une zone. Actuellement, les tâches sont répertoriées pour tous les emplacements.

Pour répertorier les tâches dans un projet, veuillez procéder comme suit :

UI classique

  1. Dans le volet de navigation, cliquez sur Historique des tâches.

  2. Dans la section Tâches récentes, vos tâches sont répertoriées par heure de création, avec les tâches les plus récentes affichées en haut. La liste n'inclut que les tâches concernant l'utilisateur actuel. Pour afficher toutes les tâches, utilisez l'outil de ligne de commande ou l'API.

CLI

Exécutez la commande bq ls avec l'un des paramètres suivants :

  • -j s'utilise pour identifier les tâches en tant que ressources à répertorier.
  • --all ou -a répertorie les tâches pour tous les utilisateurs. Pour afficher les détails complets (non supprimés) de toutes les tâches, vous devez disposer des autorisations bigquery.jobs.listAll.
  • min_creation_time s'utilise pour répertorier les tâches après une valeur d'horodatage fournie.
  • max_creation_time s'utilise pour répertorier les tâches avant une valeur d'horodatage fournie.
  • -n limite les résultats.

    bq ls -j -a --min_creation_time [INTEGER1] --max_creation_time [INTEGER2] -n [INTEGER3] [PROJECT_ID]

Où :

  • [INTEGER1] est un entier représentant un horodatage.
  • [INTEGER2] est un entier représentant un horodatage.
  • [INTEGER3] est un entier indiquant le nombre de tâches renvoyées.
  • [PROJECT_ID] est l'ID du projet contenant les tâches que vous répertoriez. Si vous définissez un projet par défaut, vous n'avez pas besoin de spécifier le paramètre [PROJECT_ID].

Exemples :

La commande suivante répertorie toutes les tâches pour l'utilisateur actuel. L'exécution de cette commande nécessite les autorisations bigquery.jobs.list.

bq ls -j myproject

La commande suivante répertorie toutes les tâches pour tous les utilisateurs. L'exécution de cette commande nécessite les autorisations bigquery.jobs.listAll.

bq ls -j -a myproject

La commande suivante répertorie les 10 tâches les plus récentes dans myproject :

bq ls -j -a -n 10 myproject

La commande suivante répertorie toutes les tâches soumises avant le 18 octobre 2018 à 16:04:53. Cet horodatage (en millisecondes) est équivalent à la valeur entière suivante: 1539903893000.

bq ls -j -max_creation_time 1539903893000

API

Appelez jobs.list et spécifiez le paramètre projectId. Pour répertorier les tâches pour tous les utilisateurs, définissez le paramètre allUsers sur true. Pour définir allUsers sur true, vous devez disposer des autorisations bigquery.jobs.listAll.

Go

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
it := client.Jobs(ctx)
for i := 0; i < 10; i++ {
	j, err := it.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		return err
	}
	state := "Unknown"
	switch j.LastStatus().State {
	case bigquery.Pending:
		state = "Pending"
	case bigquery.Running:
		state = "Running"
	case bigquery.Done:
		state = "Done"
	}
	fmt.Printf("Job %s in state %s\n", j.ID(), state)
}

Java

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Java dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Java.

Page<Job> jobs = bigquery.listJobs(JobListOption.pageSize(100));
for (Job job : jobs.iterateAll()) {
  // do something with the job
}

Python

Avant de tester cet exemple, suivez la procédure de configuration de Python dans le guide de démarrage rapide de BigQuery à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Python.

# TODO(developer): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# project = 'my_project'  # replace with your project ID
# client = bigquery.Client(project=project)
import datetime

# List the 10 most recent jobs in reverse chronological order.
# Omit the max_results parameter to list jobs from the past 6 months.
print("Last 10 jobs:")
for job in client.list_jobs(max_results=10):  # API request(s)
    print(job.job_id)

# The following are examples of additional optional parameters:

# Use min_creation_time and/or max_creation_time to specify a time window.
print("Jobs from the last ten minutes:")
ten_mins_ago = datetime.datetime.utcnow() - datetime.timedelta(minutes=10)
for job in client.list_jobs(min_creation_time=ten_mins_ago):
    print(job.job_id)

# Use all_users to include jobs run by all users in the project.
print("Last 10 jobs run by all users:")
for job in client.list_jobs(max_results=10, all_users=True):
    print("{} run by user: {}".format(job.job_id, job.user_email))

# Use state_filter to filter by job state.
print("Jobs currently running:")
for job in client.list_jobs(state_filter='RUNNING'):
    print(job.job_id)

Annuler des tâches

Vous pouvez annuler une tâche RUNNING ou PENDING dans la console GCP, l'UI Web classique, la CLI ou l'API. Cependant, tous les types de tâches ne peuvent pas être annulés. Si la tâche ne peut pas être annulée, une erreur est affichée.

Même si la tâche peut être annulée, le succès de l'opération n'est pas garanti. La tâche peut se terminer au moment de l'envoi de la demande d'annulation ou se trouver dans une étape ne permettant pas son annulation.

Autorisations requises

Pour annuler une tâche, vous devez disposer des autorisations bigquery.jobs.update. Le rôle IAM suivant prédéfini au niveau du projet inclut les autorisations bigquery.jobs.update :

Si vous accordez à un compte le rôle bigquery.admin, l'utilisateur pourra supprimer toutes les tâches éligibles, indépendamment de l'utilisateur qui les a envoyées.

Les rôles suivants permettent d'annuler des tâches créées par vos utilisateurs. Ces utilisateurs ne peuvent annuler que les tâches qu’ils envoient :

Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la section Contrôle des accès.

Annuler une tâche

Pour annuler une tâche, veuillez procéder comme suit :

UI classique

  1. Dans le volet de navigation, cliquez sur Historique des tâches.

  2. Dans la section Tâches récentes, cliquez sur la tâche à annuler. Les tâches les plus récentes apparaissent en haut de la liste.

  3. Dans les détails de la tâche, cliquez sur Annuler la tâche.

    Annuler la tâche

CLI

Exécutez la commande bq cancel avec le paramètre job_id. Vous pouvez demander une annulation et afficher immédiatement le résultat à l'aide du paramètre --nosync. Par défaut, les demandes d'annulation attendent la fin de l'opération.

Lorsque vous fournissez l'ID de la tâche, vous pouvez utiliser l'ID complet ou abrégé. Par exemple, les ID de tâches répertoriés dans l'UI Web de BigQuery sont complets. Ils incluent le projet et la zone :

my-project-1234:US.bquijob_123x456_123y123z123c

Les ID de tâches dans l'outil de ligne de commande sont répertoriés sous forme abrégée. L'ID et la zone du projet ne sont pas inclus :

bquijob_123x456_123y123z123c

Pour spécifier l'emplacement de la tâche, définissez l'indicateur --location sur la valeur correspondant à votre emplacement. Ce paramètre est facultatif si vous utilisez l'ID de tâche complet. Si vous renseignez le paramètre --location et que vous utilisez l'ID de tâche complet, le paramètre --location est ignoré.

La commande suivante demande l'annulation de la tâche et attend la fin de l'opération. Si l'ID de tâche complet est fourni, le paramètre --location est ignoré :

bq --location=[LOCATION] cancel [JOB_ID]

La commande suivante demande l'annulation de la tâche et l'affiche immédiatement. Si l'ID de tâche complet est fourni, le paramètre --location est ignoré :

bq --location=[LOCATION] --nosync cancel [JOB_ID]

Où :

  • [LOCATION] est le nom de la zone dans laquelle la tâche est exécutée. Par exemple, si vous utilisez BigQuery dans la région de Tokyo, définissez la valeur de l'indicateur sur "asia-northeast1". Vous pouvez définir une valeur par défaut correspondant à l'emplacement en utilisant le fichier .bigqueryrc.
  • [JOB_ID] est l'ID de la tâche à annuler. Si vous copiez l'ID de la tâche à partir de l'UI Web de BigQuery, l'ID et l'emplacement du projet sont inclus dans l'ID de la tâche. Par exemple, my-project-1234:US.bquijob_123x456_123y123z123c.

Exemples :

La commande suivante annule la tâche my-project-1234:US.bquijob_123x456_123y123z123c exécutée dans la zone multirégionale US dans my-project-1234 et attend la fin de l'opération. Comme l'ID de tâche complet est utilisé, le paramètre de zone n'est pas fourni.

bq cancel my-project-1234:US.bquijob_123x456_123y123z123c

La commande suivante annule la tâche bquijob_123x456_123y123z123c exécutée dans la zone multirégionale US dans my-project-1234 et attend la fin de l'opération. Comme la forme abrégée de l'ID de tâche est utilisée, le paramètre --location est fourni.

bq --location=US cancel bquijob_123x456_123y123z123c

La commande suivante annule la tâche bquijob_123x456_123y123z123c exécutée dans la zone multirégionale US dans my-project-1234 et l'affiche immédiatement. Comme l'ID de tâche complet est utilisé, le paramètre --location n'est pas fourni.

bq --nosync cancel my-project-1234:US.bquijob_123x456_123y123z123c

API

Appelez jobs.get, puis spécifiez les paramètres jobId et projectId. Spécifiez le paramètre location et définissez la valeur correspondant à l'emplacement d'exécution de la tâche.

Go

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
job, err := client.JobFromID(ctx, jobID)
if err != nil {
	return nil
}
return job.Cancel(ctx)

Python

Avant de tester cet exemple, suivez la procédure de configuration de Python dans le guide de démarrage rapide de BigQuery à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery Python.

# TODO(developer): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# client = bigquery.Client()
# job_id = 'bq-job-123x456-123y123z123c'  # replace with your job ID
# location = 'us'                         # replace with your location

job = client.cancel_job(job_id, location=location)

Répéter une tâche

Il est impossible d'exécuter une tâche de nouveau avec le même ID. Pour ce faire, vous devez créer une tâche avec la même configuration. Lorsque vous soumettez la nouvelle tâche dans la console GCP, l'UI Web classique ou la CLI, un nouvel ID de tâche est attribué. Lorsque vous envoyez la tâche via l'API ou les bibliothèques clientes, vous devez générer un nouvel ID de tâche.

Autorisations requises

Pour exécuter une tâche, vous devez disposer des autorisations bigquery.jobs.create. Les rôles IAM suivants prédéfinis au niveau du projet incluent les autorisations bigquery.jobs.create :

Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la section Contrôle des accès.

Relancer une tâche

Pour répéter une tâche, veuillez procéder comme suit :

UI classique

Pour répéter une tâche de requête, veuillez procéder comme suit :

  1. Dans le volet de navigation, cliquez sur Historique des requêtes.

  2. Dans la section Requêtes, à droite de la requête, cliquez sur Ouvrir une requête.

  3. Cliquez sur Exécuter la requête.

Pour répéter une tâche de chargement, veuillez procéder comme suit :

  1. Dans le volet de navigation, cliquez sur Historique des tâches.

  2. Dans la section Tâches récentes, cliquez sur la tâche à répéter. Les tâches les plus récentes apparaissent en haut de la liste.

  3. Dans les détails de la tâche, cliquez sur Répéter la tâche de chargement.

CLI

Relancez votre commande pour que BigQuery génère automatiquement une tâche avec un nouvel ID de tâche.

API

Il n'existe pas de méthode d'appel unique pour répéter une tâche. Pour répéter une tâche spécifique, vous devez procéder comme suit :

  1. Appelez jobs.get pour récupérer la ressource de la tâche à répéter.

  2. Supprimez les champs id, status et statistics. Remplacez le champ jobId par une nouvelle valeur générée par votre code client. Modifiez les autres champs si nécessaire.

  3. Appelez jobs.insert avec la ressource modifiée et le nouvel ID de tâche pour démarrer la nouvelle tâche.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.