Modern Data Lake on AWS (2026): S3 Tables, Iceberg Compaction, and Analytics Tier Reference Architecture
Quick summary: For an enterprise lake (~38 TB Iceberg, 8.4k small files), S3 Tables managed compaction cut Athena scan spend −35% — compaction OPEX −90% vs pre–July 2025 pricing on the same workload.
Key Takeaways
- For an enterprise lake (~38 TB Iceberg, 8
- 4k small files), S3 Tables managed compaction cut Athena scan spend −35% — compaction OPEX −90% vs pre–July 2025 pricing on the same workload
- Amazon S3 Tables reduced compaction costs up to 90% effective July 1, 2025, with default 512 MB target files and optional sort and z-order strategies (What's New, sort/z-order GA)
- AWS Glue 5
- 1 ships Spark 3

Table of Contents
Amazon S3 Tables reduced compaction costs up to 90% effective July 1, 2025, with default 512 MB target files and optional sort and z-order strategies (What’s New, sort/z-order GA). AWS Glue 5.1 ships Spark 3.5.6, Iceberg 1.10+, and Lake Formation fine-grained write controls (Glue 5.1 GA).
This post is the horizontal modern data lake reference architecture — ingest, curated Iceberg, catalog, consumption. It is not the legacy S3+Glue primer, not governance operating model, and not retail omnichannel lakehouse.
Artifacts: lake tier matrix, compaction cost worksheet, ingest partition checklist.
Benchmark pattern (not a cited client) — Enterprise analytics lake, 38 TB Iceberg curated, 8,400 files averaging 12 MB, promotion-week queries. S3 Tables binpack compaction (Athena scan spend −35% modeled). Compaction OPEX −90% vs pre–Jul 2025 pricing (worksheet). Glue 5.1 ETL with LF write policies.
Four tiers — raw to curated to consume
| Tier | Question | Default AWS path |
|---|---|---|
| Landing | Immutable raw? | S3 raw/ + Object Lock if required |
| Curated | ACID tables? | S3 Tables Iceberg + managed maintenance |
| Catalog | Discovery + ETL? | Glue 5.1 Data Catalog |
| Consume | Who queries? | Athena + Redshift Spectrum / QuickSight |
Opinionated take: Turn on S3 Tables maintenance before hiring a compaction squad. Teams that manually compact 8k-file tables every weekend burn platform budget that July 2025 pricing was meant to eliminate.
Reference architecture
Sources ──► Glue 5.1 / Firehose ──► S3 raw ──► Glue Spark job ──► S3 Tables (Iceberg)
│
Glue Data Catalog
│
┌─────────────────┴─────────────────┐
▼ ▼
Athena Redshift Spectrum
│
QuickSight / SageMaker
Lake Formation ──► column/table tags ──► FGAC on read + write (Glue 5.1)
Tier 1 — Landing
Follow ingest-partition-checklist.md:
- Partition on
day(event_ts)— not high-cardinality IDs - Schema evolution tracked in Glue
Tier 2 — S3 Tables maintenance
Per S3 Tables maintenance docs:
- Default compaction 512 MB target (64–512 configurable)
- Strategies:
auto,binpack,sort,z-order - Snapshot expiry: default MaximumSnapshotAge 120 hours — align with legal hold
# AWS CLI — set sort compaction when table sort order defined (Glue 5.1 + S3 Tables)
aws s3tables put-table-maintenance-configuration \
--table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket \
--type icebergCompaction \
--namespace analytics \
--name events_curated \
--value='{"status":"enabled","settings":{"icebergCompaction":{"strategy":"sort","targetFileSizeMB":256}}}'
Tier 3 — Glue 5.1 catalog + ETL
- Spark 3.5.6, Iceberg format v3 features where needed
- Lake Formation write FGAC on INSERT/overwrite
- Link stewardship to governance operating model
Tier 4 — Consumption
- Athena engine v3 on Iceberg — verify partition pruning in query plans
- Redshift: see Iceberg best practices
What broke — Q2 promotion post-mortem. Same dashboard query 3.1× Athena cost week-over-week. Root cause: daily micro-batches left 8,400× 12 MB files — planner scanned all manifests. Fix: S3 Tables compaction enabled; scan −35% on replay (worksheet).
When NOT to escalate
| Situation | Stay lighter |
|---|---|
| < 500 GB total | Hive external tables + weekly batch |
| Single team, no ACID merges | Parquet on S3 may suffice |
| No LF admin | Fix IAM sprawl before FGAC project |
What to Do This Week
- Run lake-tier-decision-matrix.md.
- Audit file count + average size — if > 1,000 files < 32 MB, enable compaction.
- Reprice iceberg-compaction-cost-worksheet.csv.
- Upgrade Glue jobs to 5.1 — test LF write on staging table.
- Complete ingest-partition-checklist.md before next major ingest.
Reproduce this — Download iceberg-compaction-cost-worksheet.csv. Plug in
small_files_countfromaws s3 lssample or Iceberg metadata table. Comparemonthly_compaction_usd_after_jul2025to self-managed Spark row.
What This Post Doesn’t Cover
- Real-time streaming lake — Kinesis/Flink path (see event throughput post)
- DataZone business catalog UX — governance post covers stewardship
- Cross-account Lake Formation shares — sharing guide
- Mainframe CDC — partner tooling
We have not tested z-order compaction on tables without declared sort order — prerequisites per AWS docs require sort metadata before enabling sort/z-order.
Related: Data analytics services · SageMaker services · Data governance post
AWS Cloud Architect & AI Expert
AWS-certified cloud architect and AI expert with deep expertise in cloud migrations, cost optimization, and generative AI on AWS.




