Beam ZetaSQL 演算子

演算子は、特殊文字またはキーワードで表されます。関数呼び出し構文は使用しません。演算子は、オペランドとも呼ばれる任意の数のデータ入力を操作し、結果を返します。

共通の規則

次の表に、優先順位が高い順にすべてのサポートされている演算子を示します。優先順位は、ステートメント内で演算子が評価される順序を決定します。

優先順位演算子入力データ型名前演算子の次数
1.STRUCT
メンバーフィールドアクセス演算子二項
 [ ]ARRAY配列の位置。OFFSET または ORDINAL と共に使用する必要があります—。二項
2-すべての数値型単項マイナス単項
3*すべての数値型乗算二項
 /すべての数値型除算二項
4+すべての数値型加算二項
 -すべての数値型減算二項
5(比較演算子)=任意の比較可能な型。完全なリストについては、データ型 を参照してください。等しい二項
 <任意の比較可能な型。完全なリストについては、データ型 を参照してください。より小さい二項
 >任意の比較可能な型。完全なリストについては、データ型 を参照してください。より大きい二項
 <=任意の比較可能な型。完全なリストについては、データ型 を参照してください。以下二項
 >=任意の比較可能な型。完全なリストについては、データ型 を参照してください。以上二項
 !=, <>任意の比較可能な型。完全なリストについては、データ型 を参照してください。等しくない二項
 [NOT] LIKESTRING およびバイト値は指定されたパターンと[一致/不一致]します二項
 [NOT] BETWEEN任意の比較可能な型。リストについては、データ型を参照してください。値は指定された範囲内[範囲外]です二項
 [NOT] IN任意の比較可能な型。リストについては、データ型を参照してください。値は指定された値のセット内[範囲外]です二項
 IS [NOT] NULLすべて値は[NULL/NULLでない]です単項
 IS [NOT] TRUEBOOL値は[TRUE/TRUEでない]です。単項
 IS [NOT] FALSEBOOL値は[FALSE/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少なくとも 1 つの入力が FALSE の場合は FALSE を返します。X と Y の両方が TRUE の場合は TRUE を返します。それ以外の場合は NULL を返します。
論理 ORX OR YX と Y の両方が FALSE の場合は FALSE を返します。少なくとも 1 つの入力が TRUE の場合は TRUE を返します。それ以外の場合は NULL を返します。

比較演算子

比較は常に BOOL を返します。比較では通常、両方のオペランドが同じ型である必要があります。オペランドが異なる型の場合、および Cloud Dataflow SQL がそれらの型の値を精度の損失なしに共通の型に変換できる場合、Cloud Dataflow SQL は通常、比較のためにそれらをその共通の型に強制します。Cloud Dataflow SQL は通常、存在する場合、リテラルを非リテラルの型に強制します。比較可能なデータ型は、データ型 で定義されています。

STRUCT は、4 つの比較演算子(等しい(=)、等しくない(!= および <>)、および IN)のみをサポートします。

次のルールは、これらのデータ型を比較する場合に適用されます

名前構文説明
より小さいX < YX が Y より小さい場合は TRUE を返します。
以下X <= YX が Y 以下である場合は TRUE を返します。
より大きいX > YX が Y より大きい場合は TRUE を返します。
以上X >= YX が Y 以上である場合は TRUE を返します。
等しいX = YX が Y に等しい場合は TRUE を返します。
等しくないX != Y
X <> Y
X が Y に等しくない場合は TRUE を返します。
BETWEENX [NOT] BETWEEN Y AND ZX が指定された範囲内[範囲外]にある場合は TRUE を返します。「X BETWEEN Y AND Z」の結果は「Y <= X AND X <= Z」と同等ですが、X は前者で 1 回だけ評価されます。
LIKEX [NOT] LIKE Y最初のオペランド X の STRING が 2 番目のオペランド Y で指定されたパターンに一致するかどうかを確認します。式には次の文字を含めることができます
  • パーセント記号 "%" は、任意の数の文字またはバイトに一致します
  • アンダースコア "_" は、単一の文字またはバイトに一致します
  • 2 つのバックスラッシュを使用して、"\、"_"、または "%" をエスケープできます。例:"\\%"。raw 文字列を使用している場合は、単一のバックスラッシュのみが必要です。例:r"\%"
IN複数 - 以下を参照右オペランドが空の場合は FALSE を返します。左オペランドが NULL の場合は NULL を返します。右オペランドに NULL が含まれている場合は、TRUE または NULL を返します(決して FALSE は返しません)。IN の両側の引数は、一般的な式です。右側のリテラルを使用するのが最も一般的ですが、いずれのオペランドもリテラルである必要はありません。X は 1 回だけ評価されます。

STRUCT データ型を持つ値を等価性についてテストする場合、1 つ以上のフィールドが NULL である可能性があります。そのような場合、

次の表は、NULL 値のフィールドを持つ場合の STRUCT データ型の比較方法を示しています。

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
BOOLBOOLBOOL オペランドが TRUE に評価された場合は TRUE を返します。それ以外の場合は FALSE を返します。
X IS [NOT] FALSE
BOOLBOOLBOOL オペランドが FALSE に評価された場合は TRUE を返します。それ以外の場合は FALSE を返します。