Documentation de référence sur les variables système

BigQuery accepte les variables système suivantes pour les requêtes multi-instructions ou dans des sessions. Vous pouvez utiliser des variables système pour définir ou récupérer des informations lors de l'exécution d'une requête, de la même manière que les variables de langage procédural définies par l'utilisateur.

Nom Type Lecture et écriture ou lecture seule Description
@@current_job_id STRING Lecture seule ID de la tâche en cours d'exécution. Dans le contexte d'une requête multi-instruction, renvoie la tâche responsable de l'instruction en cours et non pas l'intégralité de la requête multi-instruction.
@@dataset_id STRING Lecture et écriture ID de l'ensemble de données par défaut dans le projet actuel. Cet ID est utilisé lorsqu'un ensemble de données n'est pas spécifié pour un projet dans la requête. Vous pouvez utiliser l'instruction SET pour attribuer @@dataset_id à un autre ID d'ensemble de données dans le projet en cours. Les variables système @@dataset_project_id et @@dataset_id peuvent être définies et utilisées ensemble.
@@dataset_project_id STRING Lecture et écriture ID du projet par défaut utilisé lorsqu'il n'est pas spécifié pour un ensemble de données utilisé dans la requête. Si @@dataset_project_id n'est pas défini ou s'il est défini sur NULL, le projet d'exécution de la requête (@@project_id) est utilisé. Vous pouvez utiliser l'instruction SET pour attribuer @@dataset_project_id à un autre ID de projet. Les variables système @@dataset_project_id et @@dataset_id peuvent être définies et utilisées ensemble.
@@last_job_id STRING Lecture seule ID du job le plus récent à exécuter dans la requête multi-instruction actuelle, à l'exclusion du job en cours. Si la requête multi-instruction contient des instructions CALL, cette tâche peut provenir d'une autre procédure.
@@location STRING Lecture et écriture Emplacement dans lequel exécuter la requête. @@location ne peut être défini que sur une valeur littérale de chaîne avec un emplacement valide. Une instruction SET @@location doit être la première instruction d'une requête. Une erreur se produit si @@location ne correspond pas à un autre paramètre de localisation pour la requête. Vous pouvez améliorer la latence des requêtes qui définissent @@location en utilisant le mode de création de job facultatif. Vous pouvez utiliser la variable système @@location dans les UDF SQL et les fonctions de table.
@@project_id STRING Lecture seule ID du projet utilisé pour exécuter la requête actuelle. Dans le contexte d'une procédure, @@project_id fait référence au projet qui exécute la requête multi-instruction et non au projet propriétaire de la procédure.
@@query_label STRING Lecture et écriture Libellé de requête à associer aux tâches de la requête, dans la requête multi-instruction ou la session actuelle. Si cette option est définie, toutes les tâches de requête suivantes du script ou de la session seront associées à ce libellé. Si cette option n'est pas définie dans une requête, la valeur de cette variable système est NULL. Pour obtenir un exemple de définition de cette variable système, consultez la section Associer des tâches dans une session à un libellé.
@@reservation STRING Lecture et écriture [Aperçu] Spécifie la réservation dans laquelle le job est exécuté. Il doit respecter le format suivant : projects/project_id/locations/location/reservations/reservation_id. L'emplacement de la réservation doit correspondre à celui dans lequel la requête est exécutée.
@@row_count INT64 Lecture seule Si cette variable est utilisée dans une requête multi-instruction et que l'instruction précédente est en LMD, spécifie le nombre de lignes modifiées, insérées ou supprimées suite à cette instruction LMD. Si l'instruction précédente est une instruction MERGE, @@row_count représente le cumul total de lignes insérées, supprimées et effacées. Cette valeur est NULL si la requête concernée n'est pas une requête multi-instruction.
@@script.bytes_billed INT64 Lecture seule Nombre total d'octets facturés jusqu'à présent dans le job de requête multi-instruction en cours d'exécution. Cette valeur est NULL si ce paramètre n'est pas spécifié dans la tâche.
@@script.bytes_processed INT64 Lecture seule Nombre total d'octets traités jusqu'à présent dans le job de requête multi-instruction en cours d'exécution. Cette valeur est NULL si ce paramètre n'est pas spécifié dans la tâche.
@@script.creation_time TIMESTAMP Lecture seule Heure de création du job de requête multi-instruction en cours d'exécution. Cette valeur est NULL si ce paramètre n'est pas spécifié dans la tâche.
@@script.job_id STRING Lecture seule ID du job de requête multi-instruction en cours d'exécution. Cette valeur est NULL si ce paramètre n'est pas spécifié dans la tâche.
@@script.num_child_jobs INT64 Lecture seule Nombre de tâches enfants actuellement terminées. Cette valeur est NULL si ce paramètre n'est pas spécifié dans la tâche.
@@script.slot_ms INT64 Lecture seule Nombre d'emplacements de millisecondes utilisés jusqu'à présent par le script. Cette valeur est NULL si ce paramètre n'est pas spécifié dans la tâche.
@@session_id INT64 Lecture seule ID de la session à laquelle la requête actuelle est associée.
@@time_zone STRING Lecture et écriture Fuseau horaire par défaut à utiliser dans les fonctions SQL dépendantes du fuseau horaire, lorsqu'un fuseau horaire explicite n'est pas spécifié en tant qu'argument. @@time_zone peut être modifié en utilisant une instruction SET pour n'importe quel nom de fuseau horaire valide. Au début de chaque script, @@time_zone commence par "UTC".

Pour des raisons de rétrocompatibilité, les expressions contenues dans une clause OPTIONS ou FOR SYSTEM TIME AS OF utilisent par défaut le fuseau horaire America/Los_Angeles, tandis que toutes les autres expressions de type date/heure utilisent le fuseau horaire UTC par défaut. Si @@time_zone a été précédemment défini dans la requête multi-instruction, le fuseau horaire choisi s'applique à toutes les expressions de type date/heure, y compris les clauses OPTIONS et FOR SYSTEM TIME AS OF.

Outre les variables système présentées précédemment, vous pouvez utiliser des variables système EXCEPTION pendant l'exécution d'une requête multi-instruction. Pour en savoir plus sur les variables système EXCEPTION, consultez la documentation sur l'instruction de langage procédural BEGIN...EXCEPTION.

Exemples

Vous ne créez pas de variables système, mais vous pouvez remplacer la valeur par défaut pour certaines d'entre elles :

SET @@dataset_project_id = 'MyProject';

La requête suivante renvoie le fuseau horaire par défaut :

SELECT @@time_zone AS default_time_zone;
+-------------------+
| default_time_zone |
+-------------------+
| UTC               |
+-------------------+

Vous pouvez utiliser des variables système avec des requêtes LDD et LMD. Par exemple, voici quelques façons d'utiliser la variable système @@time_zone lors de la création et de la mise à jour d'une table :

BEGIN
  CREATE TEMP TABLE MyTempTable
  AS SELECT @@time_zone AS default_time_zone;
END;
CREATE OR REPLACE TABLE MyDataset.MyTable(default_time_zone STRING)
  OPTIONS (description = @@time_zone);
UPDATE MyDataset.MyTable
SET default_time_zone = @@time_zone
WHERE TRUE;

Il existe certains cas où les variables système ne peuvent pas être utilisées dans les requêtes LDD et LMD. Par exemple, vous ne pouvez pas utiliser une variable système en tant que nom de projet, ensemble de données ou nom de table. La requête suivante génère une erreur lorsque vous incluez la variable système @@dataset_id dans un chemin de table :

BEGIN
  CREATE TEMP TABLE @@dataset_id.MyTempTable (id STRING);
END;

Pour obtenir d'autres exemples d'utilisation des variables système dans les requêtes multi-instructions, consultez Définir une variable.

Pour obtenir des exemples d'utilisation des variables système dans les sessions, consultez la section Exemple de session.