IcebergおよびS3tablesを色々調べてみた

### 従来のデータレイクの技術的課題をicebergは解消してくれる
- レコード変更による小さなファイルの生成により読み取り性能劣化
- 不整合が発生しうる（プロセス間の絡む更新のタイミングがずれて不整合とか
    - 同時実行制御あり
        - read→メタデータロードした時点のsnap書と参考しているためその後の更新の影響を受けない。
        - write→楽観的並行性制御なので完全に保証はできない
- 基本バックトラックみたいな機能がない
    - Time Travelクエリがある（auroraのバックトラックみたいなイメージかと）
- テーブル操作に時間がかかる（ネトフリの例だとexplainだけで10分くらいかかった）
    - メタデータを利用したプルーニングでスキャンが高速化
- スキーマ変更への追従が大変（スキーマ定義変更に伴いメタデータも変更する必要がありその手間がかかる）
    - Icebergスキーマの更新は メタデータの変更そのため、更新を実行するためにデータファイルを書き換える必要なし
- 効率良いクエリのために物理構造把握する必要がある（ある程度whereとかで絞ってあげないと効率が悪い）
    - hidden partitioningなるものでレイアウトに関するクエリを記載しなくて良い。勝手にプルーニングしてくれる

### Icebergの課題
- icebergは論理削除のために削除ファイルが作成されてそれがマージされたら削除されるため、オーバーヘッドの懸念があるため
    - 削除ファイルをデータファイルに纏めるコンパクション運用が必要
- スナップショットやバージョン管理のおかげで同時実行制御、タイムトラベル、ロールバックができるがストレージコストがかかる
    - 定期削除する運用が必要
- 同時書き込み失敗時などにストレージに不要なファイルが溜まる→
    - 定期的にクリーンアップする必要がある
    - 競合が発生した場合は、手動でのクリーンアップが必要になることもある
- RDSMSの代替にはならない（※SQLコマンドはサポートしている）

    - テーブル単位でトランザクションが分離されるため
    - レコードの一意性は保証されない
    - OLAP指向で低遅延や大量かつ高頻度の同時書き込みに特化していない

### へえ
s3汎用バケットでもIcebergを利用できる→あくまでテーブルフォーマットとしてのなので
汎用性バケットはカスタマイズが高い一方で運用負荷が高い（key,prefixはユーザ設計）というところ
S3tablesはkey,prefixなどの運用管理は自動
→汎用にあって tablesにない機能

S3汎用バケットとS3tablesによる構造の違いは以下

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/d36b7174-b6ae-42f9-a3e6-ef68f613951e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/cb14c93f-3360-4f12-9006-07474bd710f8.png)


参考：https://speakerdeck.com/simosako/apache-iceberg-to-amazon-s3-tables?slide=18

こちらはデータ構造がすごく参考になる
https://speakerdeck.com/okaru/apache-iceberg
き

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/a2443e1f-b269-444d-bbe7-44b89da7c2f1.png)

参考：https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html

ソース：
https://aws.amazon.com/jp/blogs/news/manage-concurrent-write-conflicts-in-apache-iceberg-on-the-aws-glue-data-catalog/
https://aws.amazon.com/jp/blogs/news/interact-with-apache-iceberg-tables-using-amazon-athena-and-cross-account-fine-grained-permissions-using-aws-lake-formation/
https://bering.hatenadiary.com/entry/2025/01/18/234339
https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/apache-iceberg-on-aws/introduction.html
https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables.html
https://aws.amazon.com/jp/blogs/news/manage-concurrent-write-conflicts-in-apache-iceberg-on-the-aws-glue-data-catalog/
https://zenn.dev/dataheroes/articles/iceberg-the-definitive-guide-summary
https://speakerdeck.com/handy/20241220-s3-tablesnoshi-ifang-wojian-zheng-sitemita?slide=10
https://iceberg.apache.org/spark-quickstart/
https://www.google.com/search?q=s3+tables+aws+slide&sca_esv=905f7b0eae3ddda1&biw=1280&bih=1226&ei=LzA1aMezH7-k2roPxpnAgQI&ved=0ahUKEwiHh4S02cKNAxU_klYBHcYMMCAQ4dUDCBA&uact=5&oq=s3+tables+aws+slide&gs_lp=Egxnd3Mtd2l6LXNlcnAiE3MzIHRhYmxlcyBhd3Mgc2xpZGUyBRAhGKABMgUQIRigATIFECEYoAEyBRAhGKABMgUQIRifBUjYElAIWJ4RcAJ4AJABAJgBiAGgAesFqgEDMi41uAEDyAEA-AEBmAIJoAKIBsICCBAAGIAEGLADwgIHEAAYsAMYHsICCRAAGLADGAgYHsICBRAAGIAEwgIGEAAYFhgewgILEAAYgAQYhgMYigXCAggQABiABBiiBMICBRAAGO8FwgIEECEYFcICBhAAGA0YHsICBxAhGKABGAqYAwCIBgGQBgqSBwMzLjagB8wjsgcDMS42uAeDBg&sclient=gws-wiz-serp
https://speakerdeck.com/okaru/apache-iceberg
https://zenn.dev/shigeru_oda/articles/19b8c20ab44c67
https://speakerdeck.com/sagara/snowflakenokai-fa-yun-yong-kosutowoapache-icebergdexiao-lu-hua-siyou-ji-neng-tohuo-yong-li-nogoshao-jie
https://dev.classmethod.jp/articles/awsbasics-s3-tables-athena-apache-iceberg/
https://speakerdeck.com/simosako/apache-iceberg-to-amazon-s3-tables
https://speakerdeck.com/bering/apache-iceberg-woxue-bi-amazon-s3-tables-wohuo-yong-siyou
https://aws.amazon.com/jp/solutions/guidance/migrating-tabular-data-from-amazon-s3-to-s3-tables/
https://speakerdeck.com/handy/20241220-s3-tablesnoshi-ifang-wojian-zheng-sitemita
https://aws.amazon.com/jp/blogs/news/replicate-changes-from-databases-to-apache-iceberg-tables-using-amazon-data-firehose/
https://bering.hatenadiary.com/entry/2023/07/17/235246
https://www.snowflake.com/ja/guides/what-are-apache-iceberg-tables/