系統變數參考資料

BigQuery 支援下列系統變數,適用於多陳述式查詢工作階段。您可以使用系統變數在查詢執行期間設定或擷取資訊,類似於使用者定義的程序語言變數

名稱 類型 讀取及寫入或唯讀 說明
@@current_job_id STRING 唯讀 目前執行中的工作 ID。在多陳述式查詢的情況下,這會傳回負責目前陳述式的作業,而非整個多陳述式查詢。
@@dataset_id STRING 讀取及寫入 目前專案中預設資料集的 ID。當查詢中未為專案指定資料集時,系統會使用這個 ID。您可以使用 SET 陳述式,將 @@dataset_id 指派給目前專案中的其他資料集 ID。系統變數 @@dataset_project_id@@dataset_id 可以一起設定及使用。
@@dataset_project_id STRING 讀取及寫入 在查詢中使用的資料集未指定預設專案時,系統會使用該預設專案的 ID。如果未設定 @@dataset_project_id,或已設為 NULL,系統會使用執行查詢的專案 (@@project_id)。您可以使用 SET 陳述式,將 @@dataset_project_id 指派給其他專案 ID。系統變數 @@dataset_project_id@@dataset_id 可以一起設定及使用。
@@last_job_id STRING 唯讀 在目前的多個陳述式查詢中要執行的最新工作 ID,不包括目前的 ID。如果多個陳述式的查詢包含 CALL 陳述式,這項工作可能來自不同的程序。
@@location STRING 讀取及寫入 (預先發布版) 執行查詢的位置。@@location 只能設為具有有效位置的字串文字常值。SET @@location 陳述式必須是查詢中的第一個陳述式。如果 @@location 與查詢的其他位置設定不符,系統就會發生錯誤。您可以使用短查詢模式,改善設定 @@location 的查詢延遲時間。如要針對這項功能提供意見回饋或支援,請填寫這份表單
@@project_id STRING 唯讀 用於執行目前查詢的專案 ID。在程序的內容中,@@project_id 是指執行多陳述式查詢的專案,而非擁有程序的專案。
@@query_label STRING 讀取及寫入 查詢標籤,用於與目前的多陳述式查詢或工作階段中的查詢工作建立關聯。如果在查詢中設定,則指令碼或工作階段中的所有後續查詢工作都會使用這個標籤。如果在查詢中未設定,這個系統變數的值就是 NULL。如需設定此系統變數的範例,請參閱「 在工作階段中將工作與標籤建立關聯」。
@@reservation STRING 讀取及寫入 [預覽]。指定工作執行的預留作業。格式必須為下列格式:projects/project_id/locations/location/reservations/reservation_id。預訂的位置必須與查詢執行的位置相符。
@@row_count INT64 唯讀 如果在多個陳述式查詢中使用,且先前的陳述式為 DML,則會指定 DML 陳述式修改、插入或刪除的資料列數。如果前述陳述式為 MERGE 陳述式,@@row_count 代表插入、移除和刪除的資料列總數。如果不是多個陳述式的查詢,這個值就是 NULL
@@script.bytes_billed INT64 唯讀 目前執行中多陳述式查詢工作至今所產生的總位元組數。如果不在工作中,這個值為 NULL
@@script.bytes_processed INT64 唯讀 目前執行的多陳述式查詢工作至今處理的總位元組數。如果不在工作中,這個值就是 NULL
@@script.creation_time TIMESTAMP 唯讀 目前執行的多陳述式查詢工作建立時間。如果不在工作中,這個值為 NULL
@@script.job_id STRING 唯讀 目前執行的多陳述式查詢工作 ID。如果不在工作中,這個值就是 NULL
@@script.num_child_jobs INT64 唯讀 目前已完成的子項工作數量。如果不在工作中,這個值就是 NULL
@@script.slot_ms INT64 唯讀 目前為止腳本使用的時間片段毫秒數。如果不在工作中,這個值為 NULL
@@session_id INT64 唯讀 與目前查詢相關聯的工作階段 ID。
@@time_zone STRING 讀取及寫入 在受時區影響的 SQL 函式中,如未指定時區做為引數,就會使用這個預設時區。您可以使用 SET 陳述式將 @@time_zone 修改為任何有效的時區名稱。在每個指令碼的開頭,@@time_zone 會以「UTC」開始。

為確保向後相容性,在 OPTIONSFOR SYSTEM TIME AS OF 子句中使用的運算式預設為 America/Los_Angeles 時區,而所有其他日期/時間運算式則預設為 UTC 時區。如果在多個陳述式的查詢中先前已設定 @@time_zone,則所選時區會套用至所有日期/時間運算式,包括 OPTIONSFOR SYSTEM TIME AS OF 子句。

除了先前顯示的系統變數之外,您也可以在執行多個陳述式的查詢時使用 EXCEPTION 系統變數。如要進一步瞭解 EXCEPTION 系統變數,請參閱程序語言陳述式 BEGIN...EXCEPTION

範例

您不需要建立系統變數,但可以覆寫部分系統變數的預設值:

SET @@dataset_project_id = 'MyProject';

下列查詢會傳回預設時區:

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

您可以搭配 DDL 和 DML 查詢使用系統變數。舉例來說,以下是幾種在建立及更新資料表時使用系統變數 @@time_zone 的方法:

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;

在某些情況下,系統變數無法用於 DDL 和 DML 查詢。舉例來說,您無法使用系統變數做為專案名稱、資料集或資料表名稱。在資料表路徑中加入 @@dataset_id 系統變數時,下列查詢會產生錯誤:

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

如要進一步瞭解如何在多個陳述式查詢中使用系統變數,請參閱「設定變數」。

如需工作階段中使用系統變數的範例,請參閱工作階段範例