Beam ZetaSQL 変換ルール
変換には、キャストと型強制が含まれますが、これらに限定されません。
- キャストは明示的な変換であり、`CAST()` 関数を使用します。
- 型強制は暗黙的な変換であり、Beam SQL は以下に示す条件下で自動的に実行します。
以下の表は、可能なすべての `CAST` と型強制をまとめたものです。「型強制先」は、指定されたデータ型のすべての*式*(例:列)に適用されます。
元の型 | CAST 先 | 型強制先 |
---|---|---|
INT64 | INT64 FLOAT64 STRING | FLOAT64 |
FLOAT64 | FLOAT64 | |
BOOL | BOOL | |
STRING | INT64 STRING BYTES TIMESTAMP | |
BYTES | BYTES STRING | |
TIMESTAMP | STRING TIMESTAMP | |
ARRAY | ARRAY | |
STRUCT | STRUCT |
キャスト
構文
CAST(expr AS typename)
キャスト構文は、式の結果の型を別の型に変換する必要があることを示すためにクエリで使用されます。
例
CAST(x=1 AS STRING)
これは、`x` が `1` の場合は `"true"`、`NULL` 以外のその他の値の場合は `"false"`、`x` が `NULL` の場合は `NULL` になります。
サポートされている型間のキャストで、元の値からターゲットドメインに正常にマッピングされない場合は、ランタイムエラーが発生します。たとえば、バイトシーケンスが有効な UTF-8 でない場合に BYTES を STRING にキャストすると、ランタイムエラーが発生します。
次の型の式 `x` をキャストする場合、以下のルールが適用されます。
元 | 先 | `x` をキャストする場合のルール |
---|---|---|
INT64 | FLOAT64 | 近い値だが、正確ではない可能性のある FLOAT64 値を返します。 |
FLOAT64 | STRING | 近似文字列表現を返します。 |
STRING | BYTES | STRING は UTF-8 エンコーディングを使用して BYTES にキャストされます。たとえば、STRING "©" は、BYTES にキャストされると、16 進値 C2 と A9 を持つ 2 バイトシーケンスになります。 |
BYTES | STRING | UTF-8 STRING として解釈された `x` を返します。 たとえば、BYTES リテラル `b'\xc2\xa9'` は、STRING にキャストされると UTF-8 として解釈され、Unicode 文字 "©" になります。 `x` が有効な UTF-8 でない場合は、エラーが発生します。 |
ARRAY | ARRAY | まったく同じ ARRAY 型である必要があります。 |
STRUCT | STRUCT | 以下の条件が満たされている場合に許可されます。
|
型強制
Beam SQL は、関数シグネチャに一致させる必要がある場合、式の結果の型を別の型に強制します。たとえば、関数 func() が INT64 型の単一の引数を受け取るように定義されており、結果の型が FLOAT64 の式が引数として使用される場合、式の結果は func() が計算される前に INT64 型に強制されます。