系統變數參考資料
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,不包括目前的工作。如果多重陳述式查詢包含 CALL 陳述式,這項工作可能源自其他程序。 |
@@location |
STRING |
讀取及寫入 |
執行查詢的位置。@@location 只能設為具有有效位置的字串常值。SET @@location 陳述式必須是查詢中的第一個陳述式。如果查詢的@@location 與其他位置設定不符,就會發生錯誤。如要改善設定 @@location 的查詢延遲時間,可以使用選擇性工作建立模式。您可以在 SQL UDF 和資料表函式中使用 @@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 函式中,如未指定時區做為引數,就會使用這個預設時區。@@time_zone 可以使用 SET 陳述式修改為任何有效的時區名稱。每個指令碼的開頭,@@time_zone 都會以「UTC」做為起始值。
|
為確保回溯相容性,OPTIONS
或 FOR SYSTEM TIME AS OF
子句中使用的運算式預設為 America/Los_Angeles
時區,而所有其他日期/時間運算式則預設為 UTC
時區。如果多重陳述式查詢中已設定 @@time_zone
,所選時區會套用至所有日期/時間運算式,包括 OPTIONS
和 FOR 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;
如要查看如何在多重陳述式查詢中使用系統變數的更多範例,請參閱「設定變數」。
如需在工作階段中使用系統變數的範例,請參閱範例工作階段。