Beam ZetaSQL 変換ルール

変換には、キャストと型強制が含まれますが、これらに限定されません。

以下の表は、可能なすべての `CAST` と型強制をまとめたものです。「型強制先」は、指定されたデータ型のすべての*式*(例:列)に適用されます。

元の型CAST 先型強制先
INT64INT64
FLOAT64
STRING
FLOAT64
FLOAT64FLOAT64
 
BOOLBOOL
 
STRINGINT64
STRING
BYTES
TIMESTAMP
 
BYTESBYTES
STRING
 
TIMESTAMPSTRING
TIMESTAMP
 
ARRAYARRAY 
STRUCTSTRUCT 

キャスト

構文

CAST(expr AS typename)

キャスト構文は、式の結果の型を別の型に変換する必要があることを示すためにクエリで使用されます。

CAST(x=1 AS STRING)

これは、`x` が `1` の場合は `"true"`、`NULL` 以外のその他の値の場合は `"false"`、`x` が `NULL` の場合は `NULL` になります。

サポートされている型間のキャストで、元の値からターゲットドメインに正常にマッピングされない場合は、ランタイムエラーが発生します。たとえば、バイトシーケンスが有効な UTF-8 でない場合に BYTES を STRING にキャストすると、ランタイムエラーが発生します。

次の型の式 `x` をキャストする場合、以下のルールが適用されます。

`x` をキャストする場合のルール
INT64FLOAT64近い値だが、正確ではない可能性のある FLOAT64 値を返します。
FLOAT64STRING近似文字列表現を返します。
STRINGBYTESSTRING は UTF-8 エンコーディングを使用して BYTES にキャストされます。たとえば、STRING "©" は、BYTES にキャストされると、16 進値 C2 と A9 を持つ 2 バイトシーケンスになります。
BYTESSTRINGUTF-8 STRING として解釈された `x` を返します。
たとえば、BYTES リテラル `b'\xc2\xa9'` は、STRING にキャストされると UTF-8 として解釈され、Unicode 文字 "©" になります。
`x` が有効な UTF-8 でない場合は、エラーが発生します。
ARRAYARRAYまったく同じ ARRAY 型である必要があります。
STRUCTSTRUCT以下の条件が満たされている場合に許可されます。
  1. 2 つの STRUCT のフィールド数が同じである。
  2. 元の STRUCT フィールド型を、対応するターゲット STRUCT フィールド型に明示的にキャストできる(フィールド名ではなく、フィールド順序で定義)。

型強制

Beam SQL は、関数シグネチャに一致させる必要がある場合、式の結果の型を別の型に強制します。たとえば、関数 func() が INT64 型の単一の引数を受け取るように定義されており、結果の型が FLOAT64 の式が引数として使用される場合、式の結果は func() が計算される前に INT64 型に強制されます。