---
title: Plank がレイクに書き込む仕組み
description: レコードが型付き Parquet ファイル、ステージング済み操作、Iceberg コミット、キーによるマージ、暗号化、復旧を通る流れを追います。
species: concept
---
# Plank がレイクに書き込む仕組み

Plank はソースのレコードを、不変の Parquet ファイルとステージング済みのテーブル操作に変換します。カタログがその操作を Iceberg メタデータに適用するため、読み取り側が使っているファイルを変更せずに、ソースの実行から新しいスナップショットを公開できます。

## ファイルは不変

行は型付きのテーブルストリームに入ります。Plank は各値をレイクで定義した型の集合に照らして検証し、上限付きの行グループにまとめ、標準形式の Parquet に書き込みます。ファイルをステージングした後は、そのバイト列は変わりません。

そのため更新では、新しいデータファイルまたは削除ファイルと、新しい Iceberg スナップショットを作成します。古いスナップショットは、保持管理によって到達不能と確認されるまで、元のファイルを参照し続けます。

## 操作を準備してからコミットする

完了したストリームは、レイク、名前空間、テーブル、スキーマ、ファイル、マージの意図を指定する操作を生成します。ステージングだけではデータは公開されません。カタログはまず識別情報と期待する状態を検証し、その後ポインターの競合制御を通じてメタデータを公開します。

この分離により安全に再試行できます。応答が失われても、ステージングした正確な証拠と照合できます。コミットの結果が不明な状態を、確定した競合として報告することはありません。結果が不確かなコミットの後でファイルを削除すると、実際には公開されたデータを破壊するおそれがあるためです。

## キーでマージする

増分同期するソースのテーブルでは、宣言したキーで受信行をマージします。新しいスナップショットは各キーの最新の行を保持し、ソース側で存在しないことを確認できた場合は削除マーカーを記録します。

照合時には、変更のない標準 Parquet 行グループをバイト単位でそのまま連結し、変更したグループだけを再エンコードできます。これは最適化であり、意味の異なる処理ではありません。スキーマが一致しない場合や未対応のレイアウトでは、全体の再書き込みに切り替えます。

## チェックポイントと復旧

長時間のソース読み取りは、範囲を区切った単位で確定します。クラッシュすると未コミットのストリームは破棄され、次の実行では最後に永続化したソースの位置から再開します。現在のストリームの識別情報により、2 つの試行が同じメモリ内ハンドルから公開するのを防ぎます。

ステージングした操作は、カタログが受け入れるか明確に拒否するまで再実行できます。クリーンアップはファイルの古さだけで判断せず、検証済みメタデータからの到達可能性に従います。

## 暗号化と整合性

Plank はファイル形式の暗号化境界を管理し、許可された読み取り側に必要なメタデータを記録します。読み取り側には、バケット全体への権限ではなく、範囲と有効期限を限定したストレージ認証情報を渡します。

保存されたスキーマ、キー、統計情報、ファイル参照は、読み取り時にすべて信頼できない入力として扱います。メモリ確保前に上限を検証します。不正なファイルやメタデータは拒否し、型を推測したり整合性検証を省略したりする理由にはしません。

この結果、読み取り側とソースの実行を調整しなくても、原子的なスナップショット、永続的な履歴、キーによるマージ、Parquet エクスポートとして確認できる物理的な契約が得られます。
