Titan がレイクのカタログを管理する仕組み#
Titan は組織のレイクのカタログを管理する権限主体です。テーブル名を Iceberg メタデータに結び付け、新しいスナップショットを公開し、短時間のストレージアクセスを発行して、到達可能なファイルを確認します。
組織ごとに 1 つのレイク#
リクエストのパスとベアラー認証の識別情報は、どちらも 1 つのレイクを指定します。レイクのベアラートークンは別のレイクへ権限を拡張できず、ストレージ認証情報もそのレイクのルートに限定されます。SQL に物理的なレイク ID は現れません。クエリから見える titan という名前は、結び付けられた別名にすぎません。
テーブルを読み込む#
許可された読み込みでは、Iceberg メタデータと期限付きのストレージ認証情報を一緒に返します。認証情報の種類は操作に対応します。通常のテーブル読み取り、結果の読み取り、アーカイブで、広い権限を持つ単一トークンを共有することはありません。
現在の上限付きレイク規模では、名前空間とテーブルの一覧を意図的にページ分割しません。正しい状態はメタデータに基づき、独立したストレージオブジェクトからテーブルの存在を推測することはありません。
安全にコミットする#
各変更は現在のテーブル状態に照らして要件を検証し、比較交換による競合制御で新しいメタデータポインターを公開します。
409 は、要求したコミットが競合に負けたことを Titan が確認したという意味です。結果が不明な場合は 504 CommitStateUnknownException を返し、呼び出し側がステージングしたファイルを保持して照合できるようにします。不確かな結果を 409 と報告すると、成功した可能性のあるコミットのデータをクリーンアップで削除してしまいます。
エラーには Iceberg のエンベロープ {"error":{"message","type","code"}} を使い、拒否には安定した機械可読の reason を付けます。
スナップショットと保持#
コミットのたびに不変のスナップショットを追加します。タイムトラベルはカタログのメタデータを通じて解決します。稼働中のテーブル、有効なブランチ、リース、保護されたスナップショットから参照されなくなった履歴だけを、保持管理によって削除します。
ガベージコレクションは、検証済みの到達可能性をたどります。単独では未参照に見えるファイルも、それだけで安全に削除できる証拠とはみなしません。
ブランチ#
ブランチは、親を持ち、深さに上限がある、パスとして安全な登録名です。最初の書き込みまでは親の現在の状態に追従します。最初に受け入れた書き込みで系譜を固定し、ブランチ固有のポインターを公開します。
main 以外のブランチには、有効期間とスナップショット保持期間のデフォルトを設定できます。読み取りには同じレイク単位の認可境界を使います。書き込みには読み書き可能なレイクのベアラートークンが必要です。内部のソース操作は main に限定されます。main に暗黙にマージされることはありません。
曖昧さのない可用性#
ヘルスとレディネスは、プロセスの生存と、正しいカタログ状態を提供できることを区別します。安全な回答を確認できなければ、カタログは拒否するか、状態が不明と報告します。メタデータを作り上げて可用性を保つことはありません。