Beam ZetaSQL 字句構造

Beam ZetaSQLは、標準SQLスカラーデータ型に加えて、配列、マップ、ネストされた行などの拡張機能をサポートしています。このページでは、Beam ZetaSQLでサポートされているZetaSQLデータ型について説明します。

データ型のプロパティ

次の表には、データ型のプロパティと、各プロパティが適用されるデータ型が含まれています。

プロパティ説明適用対象
Null許容NULLは有効な値です。以下の例外を除くすべてのデータ型
  • ARRAYはNULLにすることはできません。
  • NULL ARRAY要素はテーブルに永続化できません。
  • クエリはNULL ARRAY要素を処理できません。
順序付け可能ORDER BY句で使用できます。以下の例外を除くすべてのデータ型
  • ARRAY
  • STRUCT
グループ化可能一般的に、GROUP BYDISTINCT、またはPARTITION BYに続く式に含めることができます。
ただし、PARTITION BY式には、浮動小数点型であるFLOATDOUBLEを含めることはできません。
ただし、`PARTITION BY`式には、浮動小数点型`FLOAT`と`DOUBLE`を含めることはできません。




以下の例外を除くすべてのデータ型
  • ARRAY
  • STRUCT
  • FLOAT64
比較可能同じ型の値を互いに比較できます。以下の例外を除くすべてのデータ型

ARRAYの比較はサポートされていません。



STRUCTの等価比較は、フィールド順にフィールドごとにサポートされます。フィールド名は無視されます。より小さい/大きい比較はサポートされていません。





比較をサポートするすべての型は、JOIN条件で使用できます。結合条件の説明については、結合の種類を参照してください。

数値型

数値型には、整数型と浮動小数点型が含まれます。

整数型

整数は、小数部分のない数値です。

名前ストレージサイズ範囲
INT648バイト-9,223,372,036,854,775,808~9,223,372,036,854,775,807

浮動小数点型

浮動小数点値は、小数部分を持つ近似数値です。

名前ストレージサイズ説明
FLOAT648バイト倍精度(近似)10進数値。

ブール型

名前説明
BOOLブール値は、キーワードTRUEFALSE(大文字と小文字は区別されません)で表されます。

文字列型

名前説明
STRING可変長文字(Unicode)データ。

入力STRING値はUTF-8エンコードされている必要があり、出力STRING値はUTF-8エンコードされます。CESU-8やModified UTF-8などの代替エンコーディングは、有効なUTF-8として扱われません。

STRING値を操作するすべての関数と演算子は、バイトではなくUnicode文字で動作します。たとえば、SUBSTRLENGTHなどの関数をSTRING入力に適用すると、関数はバイトではなくUnicode文字をカウントします。比較はUnicode文字で定義されます。より小さい/大きい比較と`ORDER BY`は、文字ごとに比較し、低いUnicodeコードポイントは低い文字と見なされます。

バイト型

名前説明
BYTES可変長バイナリデータ。

STRINGとBYTESは別々の型であり、互換性はありません。STRINGとBYTES間のキャストは、バイトがUTF-8を使用してエンコードされていることを強制します。

タイムスタンプ型

注意:SQLはミリ秒の`TIMESTAMP`精度を持ちます。`TIMESTAMP`フィールドがミリ秒未満の精度を持っている場合、SQLは`IllegalArgumentException`をスローします。

名前説明範囲
TIMESTAMPミリ秒精度で絶対的な時点を表します。0001-01-01 00:00:00~9999-12-31 23:59:59.999 UTC。

タイムスタンプは、タイムゾーンや夏時間などの規則に関係なく、絶対的な時点を表します。

標準形式

YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.DDD]][time zone]

タイムゾーンは、タイムスタンプを解析したり、表示用にタイムスタンプを書式設定したりするときに使用されます。タイムスタンプ値自体には、特定のタイムゾーンは格納されません。文字列形式のタイムスタンプには、タイムゾーンが含まれる場合があります。タイムゾーンが明示的に指定されていない場合は、デフォルトのタイムゾーンであるUTCが使用されます。

タイムゾーン

タイムゾーンは、次の2つの標準形式のいずれかの文字列で表されます。

協定世界時(UTC)からのオフセット

オフセット形式
(+|-)H[H][:M[M]]
Z
-08:00
-8:15
+3:00
+07:30
-7
Z

この形式を使用する場合、タイムゾーンとタイムスタンプの残りの部分の間にスペースを入れることはできません。

2014-09-27 12:30:00.45-8:00
2014-09-27T12:30:00.45Z

タイムゾーン名

タイムゾーン名はtzデータベースからのものです。包括的ではないがより単純なリファレンスについては、Wikipediaのtzデータベースのタイムゾーンのリストを参照してください。

形式
continent/[region/]city
America/Los_Angeles
America/Argentina/Buenos_Aires

タイムゾーン名を使用する場合、名前とタイムスタンプの残りの部分の間にスペースが必要です。

2014-09-27 12:30:00.45 America/Los_Angeles

すべてのタイムゾーン名が、年の特定の期間に同じ時刻を報告する場合でも、互換性があるとは限らないことに注意してください。たとえば、`America/Los_Angeles`は、夏時間中は`UTC-7:00`と同じ時刻を報告しますが、夏時間外は`UTC-8:00`と同じ時刻を報告します。

タイムゾーンが指定されていない場合は、デフォルトのタイムゾーン値が使用されます。

うるう秒

タイムスタンプは、1分間に正確に60秒あると仮定して、1970-01-01 00:00:00 UTCからの単なるオフセットです。うるう秒は、格納されたタイムスタンプの一部としては表されません。

入力がうるう秒を表すために秒フィールドに「:60」を使用する値を含む場合、そのうるう秒はタイムスタンプ値に変換するときに保持されません。代わりに、その値は、次の分の秒フィールドに「:00」を持つタイムスタンプとして解釈されます。

うるう秒は、タイムスタンプの計算には影響しません。すべてのタイムスタンプ計算は、うるう秒を反映しないUnixスタイルのタイムスタンプを使用して行われます。うるう秒は、現実世界の時間を測定する関数を通じてのみ観察できます。これらの関数では、うるう秒がある場合にタイムスタンプの秒がスキップされたり繰り返されたりする可能性があります。

配列型

名前説明
ARRAY任意の非ARRAY型の0個以上の要素の順序付きリスト。

ARRAYは、0個以上の非ARRAY値の順序付きリストです。ARRAYのARRAYは許可されていません。ARRAYのARRAYを生成するクエリはエラーを返します。代わりに、`SELECT AS STRUCT`構文を使用して、ARRAYの間にSTRUCTを挿入する必要があります。

空のARRAYと`NULL` ARRAYは2つの異なる値です。ARRAYには`NULL`要素を含めることができます。

ARRAY型の宣言

ARRAY型は、山かっこ(`<`と`>`)を使用して宣言されます。ARRAYの要素の型は、ARRAYが別のARRAYを直接含むことができないことを除いて、任意に複雑にすることができます。

形式

ARRAY<T>

型宣言意味
ARRAY<INT64>64ビット整数の単純なARRAY。
ARRAY<STRUCT<INT64, INT64>>それぞれが2つの64ビット整数を含むSTRUCTのARRAY。
ARRAY<ARRAY<INT64>>
(サポートされていません)
これは、複数レベルのARRAYを作成する方法を探している場合に備えて、ここに含まれている**無効な**型宣言です。ARRAYはARRAYを直接含むことはできません。代わりに、次の例を参照してください。
ARRAY<STRUCT<ARRAY<INT64>>>64ビット整数のARRAYのARRAY。ARRAYは他のARRAYを直接保持できないため、2つのARRAYの間にSTRUCTがあることに注意してください。

構造体型

名前説明
STRUCTそれぞれに型(必須)とフィールド名(オプション)を持つ順序付きフィールドのコンテナ。

STRUCT型の宣言

STRUCT 型は、山括弧(< および >)を使用して宣言されます。STRUCT の要素の型は、任意の複雑さにすることができます。

形式

STRUCT<T>

型宣言意味
STRUCT<INT64>名前のない単一の 64 ビット整数フィールドを持つ単純な STRUCT です。
STRUCT<x STRUCT<y INT64, z INT64>>ネストされた STRUCT x を内部に持つ STRUCT です。STRUCT x には、yz の 2 つのフィールドがあり、どちらも 64 ビット整数です。
STRUCT<inner_array ARRAY<INT64>>64 ビット整数要素を保持する inner_array という名前の ARRAY を含む STRUCT です。

STRUCTの比較の制限

STRUCT は、等価演算子を使用して直接比較できます。

ただし、これらの直接的な等価比較では、フィールド名を無視して、STRUCT のフィールドを序数順にペアワイズ比較することに注意してください。代わりに、STRUCT の同じ名前のフィールドを比較する場合は、個々のフィールドを直接比較できます。