# R2 Data Catalog、いらないデータファイルも自動でポイっ！

やっほー、しぃちゃんだよ！今日はストレージのお掃除がちょっと賢くなった、地味だけどうれしいアップデートを見つけたから紹介するね。

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

Cloudflare の Changelog からのお知らせだよ。R2 に組み込まれた [Apache Iceberg](https://iceberg.apache.org/) カタログの [R2 Data Catalog](https://developers.cloudflare.com/r2/data-catalog/) が、自動のスナップショット期限切れ (snapshot expiration) のときに、もう参照されていないデータファイルまでちゃんと消してくれるようになったの。これでストレージのコストが減って、消したデータの容量を取り戻すための手動メンテナンスも要らなくなるんだって。

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

これまでのスナップショット期限切れは、マニフェストやマニフェストリストみたいな Iceberg の「メタデータファイル」しかお掃除してくれなかったの。アクティブなスナップショットから参照されなくなったデータファイル本体は、Spark みたいなエンジンで `remove_orphan_files` や `expire_snapshots` を自分で走らせるまで、R2 のストレージに残りっぱなし。よけいな運用の手間がかかるうえに、古いデータが容量を食い続けちゃってたんだね。

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

これからはメタデータもデータファイルも、両方まとめて自動でお掃除だよ。スナップショットが期限切れになると、残っているスナップショットから参照されていないデータファイルは R2 ストレージから削除されるの。ほったらかしにしていても余分なファイルがたまらないから、うれしいよね。

## 深く潜ってみよう

カタログ単位でスナップショット期限切れを有効にするには、こんな感じの Wrangler コマンドを使うよ。

```
# Enable catalog-level snapshot expiration
npx wrangler r2 bucket catalog snapshot-expiration enable my-bucket \
  --older-than-days 7 \
  --retain-last 10
```

`--older-than-days` で何日より古いスナップショットを対象にするか、`--retain-last` でいくつ残すかを指定できるの。もっと詳しい設定やほかの自動メンテナンス操作は [table maintenance のドキュメント](https://developers.cloudflare.com/r2/data-catalog/table-maintenance/) を見てみてね。

## まとめ

- R2 Data Catalog のスナップショット期限切れが、参照されていないデータファイルも自動で削除するようになったよ
- これまでは Iceberg のメタデータだけで、データ本体は Spark などで手動削除が必要だった
- 有効化は `wrangler r2 bucket catalog snapshot-expiration enable` コマンドでできるよ
- R2 で Iceberg テーブルを運用していて、ストレージ代とお掃除の手間を減らしたい人にうれしい改善！
