標準 SQL 中的函式呼叫規則

除非在函式說明中另有明確指示,否則下列規則適用於所有函式:

  • 針對接受數字類型的函式,如有一個運算元是浮點運算元,另一個運算元是其他數字類型,這兩個運算元都會在評估函式之前轉換為 FLOAT64。
  • 如果運算元是 NULL,結果會是 NULL,但 IS 運算子例外。

  • 對於對時區敏感的函式 (如函式說明中的指示),如未指定時區,則會使用預設世界標準時間時區。

SAFE. 前置字串

語法:

SAFE.function_name()

說明

如果您在函式前面加上 SAFE. 前置字串,它會傳回 NULL 而不是錯誤。SAFE. 前置字串只會防止加上前置字串的函式本身發生錯誤:它並不會防止在評估引數運算式時發生錯誤。SAFE. 前置字串只會防止因函式輸入的值所導致發生的錯誤,例如「值超出範圍」錯誤;其他錯誤 (例如內部或系統錯誤) 仍會發生。如果函式沒有傳回錯誤,SAFE. 對輸出沒有影響。如果函式從未傳回例如 RAND 這樣的錯誤,則 SAFE. 沒有效果。

部分運算子 (例如 +=) 不支援 SAFE. 前置字串。如要防止除法運算發生錯誤,請使用 SAFE_DIVIDE。某些運算子 (例如 INARRAYUNNEST) 與函式類似,但不支援 SAFE. 前置字串。CASTEXTRACT 函式也不支援 SAFE. 前置字串。若要防止類型轉換發生錯誤,請使用 SAFE_CAST

範例

在以下範例中,第一次使用 SUBSTR 函式時通常會傳回錯誤,因為函式並不支援使用負值的長度引數。但是,SAFE. 前置字串會導致函式傳回 NULL。第二次使用 SUBSTR 函式會提供預期的輸出:SAFE. 前置字串沒有效果。

SELECT SAFE.SUBSTR('foo', 0, -2) AS safe_output UNION ALL
SELECT SAFE.SUBSTR('bar', 0, 2) AS safe_output;

+-------------+
| safe_output |
+-------------+
| NULL        |
| ba          |
+-------------+

支援的函式

針對大多數可能發生錯誤的純量函式,BigQuery 支援其使用 SAFE. 前置字串。這些函式包含 STRING 函式math 函式DATE 函式DATETIME 函式TIMESTAMP 函式。BigQuery 不支援 aggregateanalytic使用者定義的函式使用 SAFE. 前置字串。

呼叫永久使用者定義函式 (UDF)

建立永久 UDF 之後,您可以像呼叫任何其他函式一樣地呼叫它,並在前面加上定義為前置字串的資料集名稱。

語法

[`project_name`].dataset_name.function_name([parameter_value[, ...]])

如要在您用於執行查詢以外的專案中呼叫 UDF,project_name 為必要元素。

範例

下列範例可建立名為 multiply_by_three 的 UDF,且可從相同的專案中進行呼叫。

CREATE FUNCTION my_dataset.multiply_by_three(x INT64) AS (x * 3);

SELECT my_dataset.multiply_by_three(5) AS result; -- returns 15

下列範例可從不同的專案中呼叫永久 UDF:


CREATE `other_project`.other_dataset.other_function(x INT64, y INT64)
  AS (x * y * 2);

SELECT `other_project`.other_dataset.other_function(3, 4); --returns 24
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
需要協助嗎?請前往我們的支援網頁