S3 Tables の Iceberg V3 対応が全型に、位置情報とナノ秒時刻を文字列にせず保存
座標やナノ秒の時刻を扱うデータエンジニア向けに、S3 Tables の Iceberg V3 型と列デフォルトの使いどころを整理する。Athena の非対応、アップグレードの不可逆性、読み書き時の精度が導入判断の条件になる。
座標やナノ秒の時刻を扱うデータエンジニア向けに、S3 Tables の Iceberg V3 型と列デフォルトの使いどころを整理する。Athena の非対応、アップグレードの不可逆性、読み書き時の精度が導入判断の条件になる。
2026年9月30日付の AWS の発表で、Amazon S3 Tables は Apache Iceberg V3 仕様で導入されたデータ型をすべてサポートした。今回加わったのは geometry、geography、unknown、ナノ秒精度の timestamp と、列のデフォルト値だ。これまで文字列や整数にエンコードして逃がしていた座標やナノ秒の時刻を、型としてそのまま持てる。
対象は S3 Tables が提供されている全リージョン。Variant 型、deletion vectors、row lineage は以前から対応しており、今回の追加で V3 の型が出そろった形になる。S3 Tables の型対応と、読み書きするエンジンの対応は別だ。AWS ユーザーガイドでは、Athena は V3 テーブルを読めず、V2 から V3 への変更も通常の操作では戻せない。既存テーブルを上げる前に、利用する全エンジンの対応を確かめる必要がある。
| 項目 | 今回の扱い | 発表が挙げる用途 |
|---|---|---|
| geometry / geography | 今回追加 | 点・線・ポリゴンを保存し、フリート追跡や資産マッピングでクエリ時に位置で絞り込む |
| unknown | 今回追加 | 用途は下記のユーザーガイドで補足 |
| ナノ秒 timestamp | 今回追加 | テレメトリや金融でイベント時刻をソースの精度のまま記録する |
| 列のデフォルト値 | 今回追加 | 新しく追加した列を既存行で埋める(バックフィル不要) |
| Variant | 既存 | 既存機能 |
| deletion vectors | 既存 | 既存機能 |
| row lineage | 既存 | 既存機能 |
出典:AWS What’s New「Amazon S3 Tables now support all Apache Iceberg V3 data types」(2026年9月30日)
geometry と geography の列は、点・線・ポリゴンをネイティブに保存する。発表はフリート追跡や資産マッピングを例に挙げ、クエリ時に位置でフィルタできると書いている。座標を文字列にエンコードして保存し、読むたびに解釈していた構成なら、その変換層を型に置き換えられる余地がある。
AWS はこれによってデータアーキテクチャが単純になり、ストレージ効率と性能も上がると説明している。ただ、どれだけ小さく・速くなるかの数字は発表に載っていない。AWS ユーザーガイドでは、geometry は平面、geography は回転楕円体上の座標として扱うと区別している。
ナノ秒 timestamp は、テレメトリや金融のワークロードがイベント時刻をソースの精度のまま記録するための型として紹介されている。精度を落とさないために時刻を整数列で持ち、アプリケーション側で時刻として解釈していたなら、型で表現できるようになる。
精度を保つにはエンジン側の対応も要る。AWS ユーザーガイドは、マイクロ秒までしか扱えないエンジンで読み書きするとナノ秒の値が切り捨てられると注意している。移行時は型変更の可否に加え、書いた時刻を同じ精度で読み戻せるかを検証したい。
列追加時の既定値で足りるなら、バックフィルは不要だ。AWS ユーザーガイドによると、追加前の行は読み出し時にスキーマの initial-default を返し、データファイル自体は書き換えない。新しい書き込みで列が省略されたときの write-default とは役割が違う。
S3 Tables は Iceberg テーブルの自動メンテナンスとコンパクションを提供する。ただし、V3 の新データ型が使えるデータファイル形式は Parquet のみ で、ORC と Avro には対応しない。さらに、sort / Z-order compaction は variant、geometry、geography、ナノ秒精度の timestamp に対応しない。通常の自動メンテナンスがあることと、すべてのコンパクション方式が新しい型で使えることは別だ。
unknown は値の型がまだ決まっていない列のための型で、常に null を返す。スキーマ変更の予約枠として使うもので、任意の値を保存する型ではない。また、unknown・variant・geometry・geography の既定値は null に限られる。
検証用のテーブルで、利用中の全エンジンから列を作成し、書き込み、読み戻すところまで試したい。座標の検索、時刻の精度、列を追加する前後の行で返る値を比べる。V3 の全型がそろったことだけで本番テーブルを更新せず、互換性が確認できるまで既存の V2 テーブルを維持する判断もある。