# Redshift が Apache Iceberg v3 に対応したよ！行系統・削除ベクトルも使えるように

やっほー、しぃちゃんだよ！今日は Redshift とデータレイクの組み合わせがまたパワーアップしたニュースを見つけて、テンション上がっちゃった！

## なにが発表されたの？

AWS の What's New によると、Amazon Redshift がデータレイク上の Apache Iceberg v3 テーブルの読み書きに対応したよ。Apache Iceberg はオープンなテーブルフォーマットで、v3 リリースではいくつかの新機能が追加されているんだけど、Redshift は今回その中から次の3つに対応したの。

- デフォルト列値（default column values）
- 行系統（row lineage）
- 削除ベクトル（deletion vectors）

## 今までどうだったの？

これまでも Redshift は Iceberg テーブルを扱えたけど、対応していたのは v2 フォーマットまでだったの。v2 では、行を削除するときに「どの行を消すか」を位置情報で記録した削除ファイル（positional delete file）を使う仕組みだったんだけど、更新や削除が頻繁に発生するワークロードだとこのファイルがどんどん増えて、読み書きの負担になりがちだったんだ。また、既存テーブルに新しい列を追加するときに初期値を柔軟に設定する仕組みや、行ごとの変更履歴を追跡する仕組みも標準では備わっていなかったの。

## これで何が変わるの？

v3 対応によって、次のことができるようになったよ。

- **デフォルト列値**: 既存テーブルに列を追加するとき、値が指定されなかった場合に Redshift が自動で適用する初期値を定義できるの。スキーマを進化させるときの手間が減るね。
- **行系統**: 各行の識別情報と最終更新のシーケンス番号を追跡する疑似カラムが公開されるよ。これのおかげで、変更された行だけを処理する増分パイプラインや CDC（変更データキャプチャ）ワークフローが組みやすくなるの。
- **削除ベクトル**: v2 の位置削除ファイルの代わりに、圧縮されたコンパクトなビットマップで削除を表現する仕組みだよ。コンプライアンス対応のレコード削除みたいな、更新・削除が高頻度なワークロードで読み書きが速くなるの。

データレイクを使ったパイプラインを組んでいるエンジニアさんにとっては、テーブル管理や差分処理がぐっと楽になりそうな変更だよ。

## 深く潜ってみよう

実際に v3 テーブルを使うときの SQL はこんな感じだよ。新規テーブルを v3 で作るときは、テーブルプロパティで `format-version` を `3` に指定するの。

```sql
CREATE TABLE <table> ...
USING ICEBERG
TABLE PROPERTIES ('format-version' = '3');
```

既存の v2 テーブルをそのまま v3 にアップグレードしたいときは、`ALTER TABLE` で同じプロパティを設定するだけでいいみたい。

```sql
ALTER TABLE <table>
SET TABLE PROPERTIES ('format-version' = '3');
```

テーブルを作り直さずにその場でアップグレードできるのは嬉しいポイントだね。なお、この新しい v3 フォーマットに対応しているのは、Graviton ベースのプロビジョニング型クラスタとサーバーレス型クラスタだよ。

## まとめ

- Amazon Redshift が Apache Iceberg v3 テーブルの読み書きに対応したよ
- v3 の新機能のうち、デフォルト列値・行系統・削除ベクトルの3つが使えるようになったの
- `CREATE TABLE ... USING ICEBERG TABLE PROPERTIES ('format-version' = '3')` で新規作成、`ALTER TABLE ... SET TABLE PROPERTIES ('format-version' = '3')` で既存テーブルのアップグレードができるよ
- 対応するのは Graviton ベースのプロビジョニング・サーバーレス型クラスタ

データレイク上で CDC パイプラインを組んでいたり、更新・削除が多いテーブルを Redshift 経由で扱っているエンジニアさんに刺さるアップデートだよ！
