系統變數參考資料
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」開始。 |
為確保向後相容性,在 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;
如要進一步瞭解如何在多個陳述式查詢中使用系統變數,請參閱「設定變數」。
如需工作階段中使用系統變數的範例,請參閱工作階段範例。