typesql の型#
typesql はレイクの物理的な型を反映し、式の中だけで使う複合型を追加します。型は値を説明するもので、値を変更することはありません。
スカラー型#
| 型 | 意味 |
|---|---|
boolean | true または false |
integer | 符号付き 64 ビット整数 |
decimal(p, s) | 最大精度 38 桁の正確な十進数 |
float | 64 ビット浮動小数点数 |
date | 暦上の日付 |
datetime | オフセットのないタイムスタンプ。マイクロ秒精度で保存 |
datetimetz | 特定の時点。マイクロ秒精度で保存 |
string | UTF-8 テキスト |
json | 構造を宣言していない JSON |
binary | 正規の base64 テキストで表すバイナリ値 |
unknown は、検証器に十分な根拠がないことを意味します。never は、値を生成できない経路を表します。
null 許容性#
レイクの値は、カタログから現在の非 null の根拠が得られない限り、null を許容します。末尾の ! は非 null の値を要求します。
typesql
select id satisfies string!
from titan.stripe.customers
where id is not nullis 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 は、このラッパーを維持します。