Beam ZetaSQL 運算子

運算子由特殊字元或關鍵字表示;它們不使用函數呼叫語法。運算子會操作任意數量的資料輸入(也稱為運算元),並傳回結果。

通用慣例

下表列出所有支援的運算子,從最高優先權到最低優先權。優先權決定運算子在陳述式中求值的順序。

優先權順序運算子輸入資料類型名稱運算子元數
1.STRUCT
成員欄位存取運算子二元
 [ ]ARRAY陣列位置。必須與 OFFSET 或 ORDINAL 搭配使用&mdash。二元
2-所有數值類型一元負號一元
3*所有數值類型乘法二元
 /所有數值類型除法二元
4+所有數值類型加法二元
 -所有數值類型減法二元
5 (比較運算子)=任何可比較的類型。如需完整清單,請參閱資料類型等於二元
 <任何可比較的類型。如需完整清單,請參閱資料類型小於二元
 >任何可比較的類型。如需完整清單,請參閱資料類型大於二元
 <=任何可比較的類型。如需完整清單,請參閱資料類型小於或等於二元
 >=任何可比較的類型。如需完整清單,請參閱資料類型大於或等於二元
 !=, <>任何可比較的類型。如需完整清單,請參閱資料類型不等於二元
 [NOT] LIKE字串和位元組值是否 [不] 符合指定的模式二元
 [NOT] BETWEEN任何可比較的類型。如需清單,請參閱資料類型。值是否 [不] 在指定的範圍內二元
 [NOT] IN任何可比較的類型。如需清單,請參閱資料類型。值是否 [不] 在指定的值集合中二元
 IS [NOT] NULL全部值是否 [不] 為 NULL一元
 IS [NOT] TRUEBOOL值是否 [不] 為 TRUE。一元
 IS [NOT] FALSEBOOL值是否 [不] 為 FALSE。一元
6NOTBOOL邏輯 NOT一元
7ANDBOOL邏輯 AND二元
8ORBOOL邏輯 OR二元

具有相同優先權的運算子為左關聯。這表示這些運算子會從左邊開始,然後向右移動來分組。例如,運算式

x AND y AND z

會解讀為

( ( x AND y ) AND z )

運算式

x * y / z

會解讀為

( ( x * y ) / z )

所有比較運算子都具有相同的優先權,並使用左關聯性進行分組。但是,比較運算子不是關聯的。因此,建議您使用括號來提高可讀性,並確保運算式以所需的方式解析。例如

(x < y) IS FALSE

建議使用,而不是

x < y IS FALSE

元素存取運算子

運算子語法輸入資料類型結果資料類型描述
.expression.fieldname1...STRUCT
儲存在 fieldname1 中的類型 T點運算子。可用於存取巢狀欄位,例如 expression.fieldname1.fieldname2...
[ ]array_expression [position_keyword (int_expression ) ]請參閱 ARRAY 函數。儲存在 ARRAY 中的類型 Tposition_keyword 為 OFFSET 或 ORDINAL。

算術運算子

所有算術運算子都接受數值類型 T 的輸入,結果類型為 T,除非以下描述中另有說明

名稱語法
加法X + Y
減法X - Y
乘法X * Y
除法X / Y
一元負號- X

加法和乘法的結果類型

 INT64FLOAT64
INT64INT64FLOAT64
FLOAT64FLOAT64FLOAT64

減法的結果類型

 INT64FLOAT64
INT64INT64FLOAT64
FLOAT64FLOAT64FLOAT64

除法的結果類型

 INT64FLOAT64
INT64FLOAT64FLOAT64
FLOAT64FLOAT64FLOAT64

一元負號的結果類型

輸入資料類型結果資料類型
INT64INT64
FLOAT64FLOAT64

邏輯運算子

所有邏輯運算子都只允許 BOOL 輸入。

名稱語法描述
邏輯 NOTNOT X如果輸入為 TRUE,則傳回 FALSE。如果輸入為 FALSE,則傳回 TRUE。否則傳回 NULL
邏輯 ANDX AND Y如果至少一個輸入為 FALSE,則傳回 FALSE。如果 X 和 Y 皆為 TRUE,則傳回 TRUE。否則傳回 NULL
邏輯 ORX OR Y如果 X 和 Y 皆為 FALSE,則傳回 FALSE。如果至少一個輸入為 TRUE,則傳回 TRUE。否則傳回 NULL

比較運算子

比較一律傳回 BOOL。比較通常要求兩個運算元都具有相同的類型。如果運算元屬於不同的類型,並且 Cloud Dataflow SQL 可以在不遺失精確度的情況下將這些類型的值轉換為通用類型,則 Cloud Dataflow SQL 通常會將它們強制轉換為該通用類型以進行比較;Cloud Dataflow SQL 通常會將常值強制轉換為非常值的類型(如果存在)。可比較資料類型定義於資料類型

STRUCT 僅支援 4 個比較運算子:等於 (=)、不等於 (!= 和 <>) 和 IN。

比較這些資料類型時,適用下列規則

名稱語法描述
小於X < Y如果 X 小於 Y,則傳回 TRUE。
小於或等於X <= Y如果 X 小於或等於 Y,則傳回 TRUE。
大於X > Y如果 X 大於 Y,則傳回 TRUE。
大於或等於X >= Y如果 X 大於或等於 Y,則傳回 TRUE。
等於X = Y如果 X 等於 Y,則傳回 TRUE。
不等於X != Y
X <> Y
如果 X 不等於 Y,則傳回 TRUE。
BETWEENX [NOT] BETWEEN Y AND Z如果 X [不] 在指定的範圍內,則傳回 TRUE。"X BETWEEN Y AND Z" 的結果等同於 "Y <= X AND X <= Z",但在前者中 X 只會求值一次。
LIKEX [NOT] LIKE Y檢查第一個運算元 X 中的 STRING 是否符合第二個運算元 Y 指定的模式。運算式可以包含這些字元
  • 百分比符號 "%" 符合任意數量的字元或位元組
  • 底線符號 "_" 符合單一字元或位元組
  • 您可以使用兩個反斜線來逸出 "\", "_" 或 "%"。例如,"\\%"。如果您使用原始字串,則只需要單一個反斜線。例如,r"\%"
IN多個 - 請參閱下方如果右運算元為空,則傳回 FALSE。如果左運算元為 NULL,則傳回 NULL。如果右運算元包含 NULL,則傳回 TRUE 或 NULL,絕不會傳回 FALSE。IN 兩側的引數都是一般運算式。雖然最常在右側使用常值,但運算元都不需要是常值。X 只會求值一次。

在測試具有 STRUCT 資料類型的值是否相等時,可能會有一個或多個欄位為 NULL。在這種情況下

下表示範當 STRUCT 資料類型具有 NULL 值欄位時,如何進行比較。

Struct1Struct2Struct1 = Struct2
STRUCT(1, NULL)STRUCT(1, NULL)NULL
STRUCT(1, NULL)STRUCT(2, NULL)FALSE
STRUCT(1,2)STRUCT(1, NULL)NULL

IS 運算子

IS 運算子會針對它們正在測試的條件回傳 TRUE 或 FALSE。它們永遠不會回傳 NULL,即使輸入為 NULL 也一樣。如果存在 NOT,則輸出的 BOOL 值會反轉。

函式語法輸入資料類型結果資料類型描述
X IS [NOT] NULL
任何值類型BOOL如果運算元 X 的評估結果為 NULL,則回傳 TRUE,否則回傳 FALSE。
X IS [NOT] TRUE
BOOLBOOL如果 BOOL 運算元的評估結果為 TRUE,則回傳 TRUE。否則回傳 FALSE。
X IS [NOT] FALSE
BOOLBOOL如果 BOOL 運算元的評估結果為 FALSE,則回傳 TRUE。否則回傳 FALSE。