ドキュメントメニュー

typesql の型#

typesql はレイクの物理的な型を反映し、式の中だけで使う複合型を追加します。型は値を説明するもので、値を変更することはありません。

スカラー型#

意味
booleantrue または false
integer符号付き 64 ビット整数
decimal(p, s)最大精度 38 桁の正確な十進数
float64 ビット浮動小数点数
date暦上の日付
datetimeオフセットのないタイムスタンプ。マイクロ秒精度で保存
datetimetz特定の時点。マイクロ秒精度で保存
stringUTF-8 テキスト
json構造を宣言していない JSON
binary正規の base64 テキストで表すバイナリ値

unknown は、検証器に十分な根拠がないことを意味します。never は、値を生成できない経路を表します。

null 許容性#

レイクの値は、カタログから現在の非 null の根拠が得られない限り、null を許容します。末尾の ! は非 null の値を要求します。

typesql
select id satisfies string!
from titan.stripe.customers
where id is not null

is not null などの述語は、有効なフロースコープ内で値を絞り込みます。キャストだけでは、結果が非 null であることの証明にはなりません。

複合型#

式の中で使うコレクションには list<T>struct{field: T}map<K, V> があります。テーブルの構造は、順序付きの列に名前を付けて定義します。

typesql
with customer_totals(customer_id: string!, revenue: decimal(18, 2)) as (
  select customer, sum(amount) / 100.0
  from titan.stripe.charges
  group by customer
)
select * from customer_totals

構造付き JSON#

json<{...}> は、JSON の実行時の表現を維持しながら、その内部で利用できるフィールドを記述します。

typesql
select metadata satisfies json<{campaign: string, cohort: string}>
from titan.stripe.customers

コネクターの構造定義パッケージから、これらの構造を名前で利用できるため、クエリごとに繰り返す必要はありません。

マスク型#

masked<T> は列ポリシーの由来を記録します。キャストで除去したり、通常の値として比較したり、マスクのない分岐と統合したりすることはできません。失敗時には、キャストに TS0410、比較に TS0411、安全でないフローに TS0412 を使います。互換性のある射影と union all は、このラッパーを維持します。