Beam ZetaSQL 演算子
演算子は、特殊文字またはキーワードで表されます。関数呼び出し構文は使用しません。演算子は、オペランドとも呼ばれる任意の数のデータ入力を操作し、結果を返します。
共通の規則
- 特に指定がない限り、いずれかのオペランドが
NULL
の場合、すべての演算子はNULL
を返します。
次の表に、優先順位が高い順にすべてのサポートされている演算子を示します。優先順位は、ステートメント内で演算子が評価される順序を決定します。
優先順位 | 演算子 | 入力データ型 | 名前 | 演算子の次数 |
---|---|---|---|---|
1 | . | STRUCT | メンバーフィールドアクセス演算子 | 二項 |
[ ] | ARRAY | 配列の位置。OFFSET または ORDINAL と共に使用する必要があります—。 | 二項 | |
2 | - | すべての数値型 | 単項マイナス | 単項 |
3 | * | すべての数値型 | 乗算 | 二項 |
/ | すべての数値型 | 除算 | 二項 | |
4 | + | すべての数値型 | 加算 | 二項 |
- | すべての数値型 | 減算 | 二項 | |
5(比較演算子) | = | 任意の比較可能な型。完全なリストについては、データ型 を参照してください。 | 等しい | 二項 |
< | 任意の比較可能な型。完全なリストについては、データ型 を参照してください。 | より小さい | 二項 | |
> | 任意の比較可能な型。完全なリストについては、データ型 を参照してください。 | より大きい | 二項 | |
<= | 任意の比較可能な型。完全なリストについては、データ型 を参照してください。 | 以下 | 二項 | |
>= | 任意の比較可能な型。完全なリストについては、データ型 を参照してください。 | 以上 | 二項 | |
!=, <> | 任意の比較可能な型。完全なリストについては、データ型 を参照してください。 | 等しくない | 二項 | |
[NOT] LIKE | STRING およびバイト | 値は指定されたパターンと[一致/不一致]します | 二項 | |
[NOT] BETWEEN | 任意の比較可能な型。リストについては、データ型を参照してください。 | 値は指定された範囲内[範囲外]です | 二項 | |
[NOT] IN | 任意の比較可能な型。リストについては、データ型を参照してください。 | 値は指定された値のセット内[範囲外]です | 二項 | |
IS [NOT] NULL | すべて | 値は[NULL /NULL でない]です | 単項 | |
IS [NOT] TRUE | BOOL | 値は[TRUE/TRUEでない]です。 | 単項 | |
IS [NOT] FALSE | BOOL | 値は[FALSE/FALSEでない]です。 | 単項 | |
6 | NOT | BOOL | 論理 NOT | 単項 |
7 | AND | BOOL | 論理 AND | 二項 |
8 | OR | BOOL | 論理 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 に格納されている型 T | position_keyword は OFFSET または ORDINAL のいずれかです。 |
算術演算子
すべての算術演算子は数値型 T の入力を受け入れ、結果の型は、以下で説明されていない限り型 T になります
名前 | 構文 |
---|---|
加算 | X + Y |
減算 | X - Y |
乗算 | X * Y |
除算 | X / Y |
単項マイナス | - X |
加算と乗算の結果型
INT64 | FLOAT64 | |
---|---|---|
INT64 | INT64 | FLOAT64 |
FLOAT64 | FLOAT64 | FLOAT64 |
減算の結果型
INT64 | FLOAT64 | |
---|---|---|
INT64 | INT64 | FLOAT64 |
FLOAT64 | FLOAT64 | FLOAT64 |
除算の結果型
INT64 | FLOAT64 | |
---|---|---|
INT64 | FLOAT64 | FLOAT64 |
FLOAT64 | FLOAT64 | FLOAT64 |
単項マイナスの結果型
入力データ型 | 結果のデータ型 |
---|---|
INT64 | INT64 |
FLOAT64 | FLOAT64 |
論理演算子
すべての論理演算子は BOOL 入力のみを許可します。
名前 | 構文 | 説明 |
---|---|---|
論理 NOT | NOT X | 入力が TRUE の場合は FALSE を返します。入力が FALSE の場合は TRUE を返します。それ以外の場合は NULL を返します。 |
論理 AND | X AND Y | 少なくとも 1 つの入力が FALSE の場合は FALSE を返します。X と Y の両方が TRUE の場合は TRUE を返します。それ以外の場合は NULL を返します。 |
論理 OR | X OR Y | X と Y の両方が FALSE の場合は FALSE を返します。少なくとも 1 つの入力が TRUE の場合は TRUE を返します。それ以外の場合は NULL を返します。 |
比較演算子
比較は常に BOOL を返します。比較では通常、両方のオペランドが同じ型である必要があります。オペランドが異なる型の場合、および Cloud Dataflow SQL がそれらの型の値を精度の損失なしに共通の型に変換できる場合、Cloud Dataflow SQL は通常、比較のためにそれらをその共通の型に強制します。Cloud Dataflow SQL は通常、存在する場合、リテラルを非リテラルの型に強制します。比較可能なデータ型は、データ型 で定義されています。
STRUCT は、4 つの比較演算子(等しい(=)、等しくない(!= および <>)、および IN)のみをサポートします。
次のルールは、これらのデータ型を比較する場合に適用されます
- FLOAT64
- NaN とのすべての比較は、
!=
および<>
を除いて FALSE を返します。これらは TRUE を返します。
- BOOL:FALSE は TRUE より小さくなります。
- STRING:文字列はコードポイントごとに比較されます。これは、正規的に等価な文字列が最初に正規化されていない場合、等しいと比較されることが保証されないことを意味します。
NULL
:ここでも規則が適用されます。NULL
入力を使用した操作はNULL
を返します。
名前 | 構文 | 説明 |
---|---|---|
より小さい | 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 を返します。 |
BETWEEN | X [NOT] BETWEEN Y AND Z | X が指定された範囲内[範囲外]にある場合は TRUE を返します。「X BETWEEN Y AND Z」の結果は「Y <= X AND X <= Z」と同等ですが、X は前者で 1 回だけ評価されます。 |
LIKE | X [NOT] LIKE Y | 最初のオペランド X の STRING が 2 番目のオペランド Y で指定されたパターンに一致するかどうかを確認します。式には次の文字を含めることができます
|
IN | 複数 - 以下を参照 | 右オペランドが空の場合は FALSE を返します。左オペランドが NULL の場合は NULL を返します。右オペランドに NULL が含まれている場合は、TRUE または NULL を返します(決して FALSE は返しません)。IN の両側の引数は、一般的な式です。右側のリテラルを使用するのが最も一般的ですが、いずれのオペランドもリテラルである必要はありません。X は 1 回だけ評価されます。 |
STRUCT データ型を持つ値を等価性についてテストする場合、1 つ以上のフィールドが NULL
である可能性があります。そのような場合、
- すべての非 NULL フィールド値が等しい場合、比較は NULL を返します。
- 非 NULL フィールド値が等しくない場合、比較は FALSE を返します。
次の表は、NULL
値のフィールドを持つ場合の STRUCT データ型の比較方法を示しています。
Struct1 | Struct2 | Struct1 = 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 | BOOL | BOOL | BOOL オペランドが TRUE に評価された場合は TRUE を返します。それ以外の場合は FALSE を返します。 |
X IS [NOT] FALSE | BOOL | BOOL | BOOL オペランドが FALSE に評価された場合は TRUE を返します。それ以外の場合は FALSE を返します。 |