System variables reference

BigQuery supports the following system variables for multi-statement queries or within sessions . You can use system variables to set or retrieve information during query execution, similar to user-defined procedural language variables .

Name Type Read and write or read-only Description
@@current_job_id
STRING Read-only Job ID of the currently executing job. In the context of a multi-statement query, this returns the job responsible for the current statement, not the entire multi-statement query.
@@dataset_id
STRING Read and write ID of the default dataset in the current project. This ID is used when a dataset is not specified for a project in the query. You can use the SET statement to assign @@dataset_id to another dataset ID in the current project. The system variables @@dataset_project_id and @@dataset_id can be set and used together.
@@dataset_project_id
STRING Read and write ID of the default project that's used when one is not specified for a dataset used in the query. If @@dataset_project_id is not set, or if it is set to NULL , the query-executing project ( @@project_id ) is used. You can use the SET statement to assign @@dataset_project_id to another project ID. The system variables @@dataset_project_id and @@dataset_id can be set and used together.
@@last_job_id
STRING Read-only Job ID of the most recent job to execute in the current multi-statement query, not including the current one. If the multi-statement query contains CALL statements, this job may have originated in a different procedure.
@@location
STRING Read and write The location in which to run the query. @@location can only be set to a string literal with a valid location . A SET @@location statement must be the first statement in a query. An error occurs if there is a mismatch between @@location and another location setting for the query. You can improve the latency of queries that set @@location by using optional job creation mode . You can use the @@location system variable inside of SQL UDFs and table functions .
@@project_id
STRING Read-only ID of the project used to execute the current query. In the context of a procedure, @@project_id refers to the project that is running the multi-statement query, not the project which owns the procedure.
@@query_label
STRING Read and write Query label to associate with query jobs in the current multi-statement query or session. If set in a query, all subsequent query jobs in the script or session will have this label. If not set in a query, the value for this system variable is NULL . For an example of how to set this system variable, see Associate jobs in a session with a label .
@@reservation
STRING Read and write [ Preview ]. Specifies the reservation where the job is run. Must be in the following format: projects/ project_id /locations/ location /reservations/ reservation_id . The location of the reservation must match the location the query is running in.
@@row_count
INT64 Read-only If used in a multi-statement query and the previous statement is DML, specifies the number of rows modified, inserted, or deleted, as a result of that DML statement. If the previous statement is a MERGE statement, @@row_count represents the combined total number of rows inserted, removed, and deleted. This value is NULL if not in a multi-statement query.
@@script.bytes_billed
INT64 Read-only Total bytes billed so far in the currently executing multi-statement query job. This value is NULL if not in the job.
@@script.bytes_processed
INT64 Read-only Total bytes processed so far in the currently executing multi-statement query job. This value is NULL if not in the job.
@@script.creation_time
TIMESTAMP Read-only Creation time of the currently executing multi-statement query job. This value is NULL if not in the job.
@@script.job_id
STRING Read-only Job ID of the currently executing multi-statement query job. This value is NULL if not in the job.
@@script.num_child_jobs
INT64 Read-only Number of currently completed child jobs. This value is NULL if not in the job.
@@script.slot_ms
INT64 Read-only Number of slot milliseconds used so far by the script. This value is NULL if not in the job.
@@session_id
INT64 Read-only ID of the session that the current query is associated with.
@@time_zone
STRING Read and write The default time zone to use in time zone-dependent SQL functions, when a time zone is not specified as an argument. @@time_zone can be modified by using a SET statement to any valid time zone name. At the start of each script, @@time_zone begins as “UTC”.

For backward compatibility, expressions used in an OPTIONS or FOR SYSTEM TIME AS OF clause default to the America/Los_Angeles time zone, while all other date/time expressions default to the UTC time zone. If @@time_zone has been set earlier in the multi-statement query, the chosen time zone will apply to all date/time expressions, including OPTIONS and FOR SYSTEM TIME AS OF clauses.

In addition to the system variables shown previously, you can use EXCEPTION system variables during execution of a multi-statement query. For more information about the EXCEPTION system variables, see the procedural language statement BEGIN...EXCEPTION .

Examples

You don't create system variables, but you can override the default value for some of them:

  SET 
  
 @@ 
 dataset_project_id 
  
 = 
  
 'MyProject' 
 ; 
 

The following query returns the default time zone:

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

You can use system variables with DDL and DML queries. For example, here are a few ways to use the system variable @@time_zone when creating and updating a 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 
 ; 
 

There are some places where system variables can't be used in DDL and DML queries. For example, you can't use a system variable as a project name, dataset, or table name. The following query produces an error when you include the @@dataset_id system variable in a table path:

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

For more examples of how you can use system variables in multi-statement queries, see Set a variable .

For examples of how you can use system variables in sessions, see Example session .

Create a Mobile Website
View Site in Mobile | Classic
Share by: