Skip to content

Apache Iceberg on AWS: Costs, Compliance and Migration

Data team reviewing an Apache Iceberg on AWS architecture built on Amazon S3 Tables, AWS Glue and Amazon Athena

Key takeaways

  • Picking a table format is really picking who controls your data. You'll probably swap query engines a few times over the next decade, but the data will still be sitting in whatever format you choose now.
  • We'd start most teams on S3 Tables. AWS handles the compaction, snapshot expiry, and file cleanup, and we'd only keep tables self-managed where someone has a real reason to control those jobs.
  • Iceberg V3 is useful but not universal yet. S3 Tables, Glue, EMR, and Redshift all handle it, though Athena can't read V3 tables yet and there's no going back once a table is upgraded.
  • Your erasure window equals your snapshot retention. A GDPR deletion isn't finished until older snapshots expire and the orphan files are removed.
  • The format is free, but maintenance isn't. Small files, snapshots nobody expires, and duplicate copies cost more than S3 Tables' list prices do.
  • Migration works best in validated slices. At the payments company we'd move a few tables at a time and run each batch in parallel with Hadoop before anyone switches over.

When data leaders bring up Apache Iceberg on AWS with us, it's usually already on their roadmap, and what they want to talk about is how to get there without a two-year program, a surprise invoice, or a finding in the next audit. We've been building data platforms on AWS since 2008, a lot of them for banks, health systems, and manufacturers that answer to regulators. The point we end up making in nearly every one of those conversations is that the table format you pick now decides what your AI agents can read, what your auditors can check, and how much leverage you'll have with engine vendors for the next decade.

It matters more now that agents are reaching production. In McKinsey's August 2026 State of AI report, the share of $1 billion-plus companies scaling agents in at least one function went from 27 percent to 40 percent in a single year. We'd be wary of any of those agents working from stale, unversioned, or locked-in data, because that's where the risk shows up long before the value does.

As a running example, we'll use a typical payments company with a US business and an EU subsidiary in Dublin. About 1,800 Hive tables of transaction and merchant history sit on an on-premises Hadoop cluster whose support contract ends next year, and finance reports run off a separate warehouse. EU cardholders send erasure requests every week, and the Irish entity is in scope for DORA. Now the disputes team wants an AI agent that drafts chargeback responses from that data. Most of the choices below look different once there's a real estate like that attached.

We wrote this for the executives who'll sign off on the decision, so it sticks to what they get asked about: the architecture, whether to use S3 Tables, compliance in the US and EU, what it really costs, and the migration sequence we follow when the production date is written into the contract.

What is Apache Iceberg, and how does it work on AWS?

Apache Iceberg is an open table format. Think of it as a layer of metadata over the Parquet files in Amazon S3 that lets them act like database tables, with ACID transactions, schema changes that don't break anyone's queries, hidden partitioning, and time travel to earlier versions. Because that metadata is open, Athena, EMR, Glue, Redshift, and engines outside AWS can all read the same tables, and on AWS they find them through the AWS Glue Data Catalog. Most enterprises we work with get started fastest on Amazon S3 Tables, while teams that want to run maintenance themselves keep their tables self-managed.

What you end up with is a pile of Parquet files that behaves like governed warehouse tables without being tied to any one engine. Keeping storage separate from compute is the commercial point of the exercise, and it's why Iceberg now sits at the center of most data platform modernization programs we scope on AWS, along with the wider data modernization work around them.

Why is Apache Iceberg on AWS a board-level decision?

Our view, after a lot of platform programs, is that the table format you standardize on will outlast the warehouse, the BI tool, and quite possibly the CIO who chose them. Engines get swapped every few years. The format your petabytes sit in tends to stay, so whoever controls it controls your switching costs.

Three things have moved the question out of the architecture review and into the boardroom.

  • Agents have to be able to show their work. If the disputes agent sends a chargeback response, someone may ask months later exactly what data it used, and Iceberg snapshots keep that record by design.
  • Engine pricing keeps moving. With the storage open, we can route a workload to Athena, EMR, Redshift, or an outside engine on price and performance, without migrating the data each time.
  • Regulators are asking about exit plans. Under DORA, financial entities need exit strategies for ICT services that support critical or important functions, and the EU Data Act's cloud switching rules have applied since September 12, 2025, with switching charges due to end on January 12, 2027. An open format turns an exit plan from a slide into something you can show.

Our Data Decides point of view series puts it plainly: “Agents read data, ground against data, and act on data. If the data they read is stale, the agent acts on stale information.” That's why we treat the table format as an AI decision first.

Closed format vs Apache Iceberg, decision by decision
What the format decision controls With a closed or engine-bound format With Apache Iceberg on AWS

AI agent grounding

Copies and extracts drift out of sync

One governed table, with versioned snapshots

Compute spend

One engine sets the price

We'd route each workload to the engine that suits it

Audit and lineage

Rebuilt after the fact

Snapshot history stays with the table

Exit and M&A

An export project measured in quarters

The data already sits in an open, documented spec

What does a production Iceberg lakehouse on AWS actually look like?

It has five layers, and the one most teams underinvest in is the catalog. Once the catalog and access model are right, every engine downstream inherits the same permissions and reads the same version of the data. Our guide to AWS data lake architecture goes deeper on the storage and catalog choices.

Five-layer Apache Iceberg lakehouse on AWS, from ingestion through S3 Tables storage, the AWS Glue Data Catalog and Lake Formation to Athena, Redshift and EMR

Two platform changes matter for buyers this year. Amazon S3 Tables now supports Iceberg V3, starting with deletion vectors and row lineage in November 2025, adding the variant type for semi-structured data in July 2026, and covering all V3 data types by the end of September. And since April 2026, Amazon Redshift can run UPDATE, DELETE, and MERGE straight against Iceberg tables, so the warehouse and the lake can share one copy of the data, which changes the math on any data warehouse modernization plan.

V3 isn't something we'd switch on everywhere yet. The upgrade is one-way, the variant type launched in 15 Regions, and Amazon Athena can't read V3 tables at the moment. So at the payments company, we'd leave every table the analysts query through Athena on V2 until that changes.

Should you choose Amazon S3 Tables or self-managed Iceberg tables?

Decision guide for choosing Amazon S3 Tables or self-managed Apache Iceberg tables on Amazon S3

We'd make S3 Tables the default for most mid-market and enterprise teams, mainly because AWS then runs compaction, snapshot management, and unreferenced file cleanup and your engineers don't have to. Self-managed Iceberg on general purpose buckets still makes sense when you need your own compaction schedules, cross-account layouts S3 Tables doesn't fit, or an existing estate you'd rather convert in place. The gap has narrowed, too, since self-managed tables registered in the AWS Glue Data Catalog can use Glue's table optimizers for compaction, snapshot retention, and orphan file deletion.

Our rule of thumb is that if nobody on your team wants to own compaction at 2 a.m., you start with S3 Tables and keep self-managed tables for the handful of datasets that justify the overhead. At the payments company, the Hive tables being converted in place would stay self-managed, and new tables would go into S3 Tables.

How does Apache Iceberg compare with Delta Lake, Apache Hudi, and a legacy warehouse?

Most of the Iceberg vs. Delta Lake evaluations we sit in on AWS end up going Iceberg's way, mainly because more AWS services read and write it natively than any other open table format. Delta Lake and Apache Hudi are both capable, and each has real strengths. For an AWS-first company, though, native service support and neutral governance of the spec tend to settle it.

Iceberg vs Delta Lake vs Hudi on AWS
What we compare Apache Iceberg Delta Lake Apache Hudi Legacy data warehouse

Native AWS support

Athena, EMR, Glue, and Redshift all read and write it, and S3 Tables and Data Firehose support it directly

EMR and Glue read and write it, Athena only reads it, and Redshift Spectrum needs a manifest

EMR and Glue read and write it, Athena only reads it, and Redshift Spectrum reads copy-on-write tables Only the vendor's engine

Governance of the spec

The Apache Software Foundation, with contributors from many vendors

A Linux Foundation project with one main contributor

The Apache Software Foundation The vendor owns it

Schema and partition evolution

Both, without rewriting data

Schema evolution, but changing partitions means rewriting the table or moving to liquid clustering

Schema evolution Varies, and often disruptive

Time travel and rollback

Snapshot-based

Version-based

Timeline-based Limited, or a paid add-on
Row-level deletes for privacy requests Yes, with deletion vectors in V3 Yes, with deletion vectors Yes, with record-level indexes Yes
Best fit Multi-engine, AI-ready, AWS-first estates Spark-centric teams Streaming upserts and CDC-heavy pipelines Stable BI with no AI plans
 

If you already run a large Delta or Hudi estate, nobody is asking you to rip it out next quarter. The more useful question is where your next five years of new data will land, and on AWS we keep landing on Iceberg.

Is Apache Iceberg on AWS compliant with HIPAA, SOX, GDPR, and DORA?

Not on its own, and no table format is. Auditors look at the whole system around the data, so what matters is that Iceberg makes compliance a lot easier to prove. It keeps immutable snapshots and a full commit history, it supports row-level deletes, and it puts every engine behind one catalog.

Iceberg on AWS compliance map: HIPAA, SOX, GDPR and DORA
Requirement Where it applies Iceberg capability AWS control we pair it with

PHI access controls and audit trails

HIPAA (US)

Snapshot history, and queries that only project the columns a role may see

We'd add Lake Formation row and column filters and CloudTrail data events

Financial reporting integrity

SOX (US)

Point-in-time queries for any reporting period

We'd use KMS encryption and keep duties separated in IAM

Consumer deletion requests

CCPA and CPRA (US), GDPR Article 17 (EU)

Row-level deletes, snapshot expiry

Scheduled expiry jobs, with a log of each run

Records of processing

GDPR Article 30 (EU)

Commit metadata per table

Lake Formation tags, AWS Config
ICT exit strategy DORA Article 28 (EU financial entities) Open spec readable by many engines A documented, tested exit runbook
Data residency and sovereignty GDPR and national rules (EU) Storage location independent of engine EU Regions, AWS European Sovereign Cloud
 

What are the two compliance traps teams fall into with Iceberg?

The first is the erasure trap, and the payments company would hit it with its very first EU erasure request. Deleting a cardholder's rows writes a new snapshot, but the older snapshots still hold those rows until they expire and the orphan files are removed. With 90-day snapshot retention, the real erasure window is 90 days, which is how a European regulator would read it too. On S3 Tables the default is much shorter, with snapshots kept for 120 hours, but unreferenced files are only flagged after three days and deleted ten days after that, so we'd document the whole window, not just the snapshot setting.

Timeline showing how Iceberg snapshot retention extends the real GDPR erasure window after a row-level delete

The second is the retention trap. Teams under SEC Rule 17a-4 or similar books-and-records rules sometimes switch on S3 Object Lock under live Iceberg tables. Object Lock doesn't stop compaction, but every file cleanup after that only adds a delete marker, so storage keeps growing until the retention period ends, and S3 Tables doesn't support Object Lock at all. We'd keep a separate, locked archive for regulated records and let the working tables stay maintainable.

In regulated finance, we hold ourselves to a standard examiners recognize. As our financial services data modernization practice puts it, “Regulator-defensible means something checkable: at any point after the fact, a named person can reconstruct what happened to a given number and why.” Iceberg snapshots, paired with Lake Formation audit logs, give that person the evidence without a forensic project.

Healthcare adds its own weight. PHI handling, HITRUST mapping, and minimum-necessary access all have to hold while analysts and agents query the same tables. Lake Formation row and column filters carry the policy, and query logs tied to snapshot IDs show who saw which version of the data, which is the backbone of every healthcare data platform we put into production.

How much does Apache Iceberg on AWS cost, and where does the money leak?

The format is free, so the cost of Apache Iceberg on AWS comes down to storage, maintenance, compute, and the people who run it. In our experience, small files, snapshots nobody expires, and duplicate copies kept “just in case” sink lakehouse budgets far more often than the run-rate bill does.

S3 Tables pricing for Apache Iceberg on AWS
S3 Tables cost line US list price What drives it

Storage

$0.0265 per GB-month for the first 50 TB

Data volume plus retained snapshots

Object monitoring

$0.025 per 1,000 objects

How many files you have, which is why small files hurt

Requests

$0.005 per 1,000 PUTs and $0.0004 per 1,000 GETs

Streaming jobs that write every few seconds

Binpack compaction

$0.002 per 1,000 objects plus $0.005 per GB processed

Lots of small writes, which means more files to merge

Query compute Billed by Athena, EMR, Glue, or Redshift Scan volume and the engine you pick
 

AWS cut S3 Tables compaction prices in July 2025, with per-GB binpack processing 90% lower, and AWS Glue 6.0 arrived in August 2026 with a 30% price cut and full Iceberg V3 support. Those help, but they don't fix bad habits. Flexera's 2026 State of the Cloud Report found that wasted cloud spend rose to 29 percent, reversing five years of decline, with AI and newer platform services adding to the complexity. A lakehouse without maintenance discipline adds to that number every month.

Four places Apache Iceberg budgets leak on AWS, from small files to full-table scans, with the fix for each

Who should pay for the move?

Most of the budget you need is already inside your IT spend. The legacy warehouse license that's up for renewal, the Hadoop cluster nobody puts new workloads on, and the extract jobs that bill hours just to keep themselves alive are all candidates. For the payments company, the Hadoop support contract that ends next year is the obvious source, and if that cluster sits in a data center you're leaving anyway, it belongs in the wider data center modernization plan. Once a CFO sees the migration funded by retiring those lines, it stops being a budget increase and becomes a capital allocation call.

The commercial model matters as much as the architecture. We commit to a named ship date and a fixed fee in the statement of work and absorb the overage on delays within our control, as set out in our delivery commitment. Delays caused on the customer's side convert to time and materials at the rate disclosed upfront in the same document, so each side carries the risk it can actually manage.

 

How do you migrate to Apache Iceberg on AWS without stopping the business?

We'd do it in vertical slices, checking each one against the legacy system on live data before anyone is asked to switch. The programs we see run two or three times over budget are usually big-bang cutovers where validation was left until the end.

Which Apache Iceberg migration method fits your estate?

Choosing an Apache Iceberg migration method
Method How it works When to use it Watch out for

In-place migrate

Iceberg's migrate procedure turns Hive tables stored as Parquet, ORC, or Avro into Iceberg tables without rewriting the files, and keeps the original as a backup

Large Hive estates with sensible partitioning

Old Hive writers stop working, and it won't take bucketed tables

add_files registration

We'd point an Iceberg table at existing Parquet files without moving them

Raw zones and archives

It doesn't check the files' schemas, and later Iceberg maintenance can delete files it now thinks it owns

Rewrite with CTAS

Reads the source and writes fresh Iceberg tables, including into S3 Tables

Poor file layouts, and moves into S3 Tables

Compute cost and a parallel-run window

CDC replication

AWS DMS or another log-based tool captures the changes, and a Spark or Flink job merges them into Iceberg

Warehouses and OLTP sources that have to stay live

DMS can't write Iceberg directly, so you need that extra hop, and you'll still need a plan for merges and late-arriving data
Streaming ingestion Amazon Data Firehose or Kinesis Data Streams writes events straight into Iceberg tables, including S3 Tables Event streams and clickstreams Small files, unless compaction keeps up
 

For the payments company, we'd expect most of the 1,800 Hive tables to go through migrate, the messy raw zone through add_files, and the finance warehouse through CDC until cutover.

What does the delivery sequence look like?

This is the sequence we run on every data platform engagement, with a customer signature at each exit and a forward-deployed engineer owning the judgment calls.

Five-phase Apache Iceberg migration on AWS with a customer signature at every exit

The full method, including how the phase gates work, is on our how we work page.

How does Apache Iceberg on AWS make your data ready for AI agents?

The short version is that every model and agent reads the same governed, versioned copy of the data, and there's enough lineage left behind to explain an answer later. The payments company's disputes agent might run on Amazon Bedrock or in its own containers. Either way, it would query the Iceberg tables through Athena or Redshift and be bound by the same Lake Formation policies as the analysts, which is the pattern we use for the production AI agents we build on AWS.

Four Iceberg features carry most of the load for agents: snapshot pinning, row lineage, the variant type, and branching. Here's how they'd play out for the disputes agent. Say a merchant contests a chargeback response in March. The agent's query was pinned to a snapshot back in January, so the team can rerun it today and get the same rows it got then, however many times the transaction tables have changed in between. With row lineage, which came with V3, every row carries an ID and the number of the commit that last touched it, and the nightly job that refreshes the agent's retrieval index uses that to re-embed only the merchants whose records changed, which is one reason we'd have the agent read its V3 tables through Redshift rather than Athena. The raw responses from the card processor can go into a variant column in the same table, so there's no separate flattening job for someone to babysit. And when the data science team wants to try a new feature for the agent, they can create a branch through Spark on EMR or Glue and test against that, leaving production alone. Our view on agentic AI in production covers the rest of what that takes.

Is your organization ready to commit? A quick scorecard

Our rough test is three or more. If at least three of the signals below sound like your team, we'd expect the move to Apache Iceberg on AWS to pay for itself within the first renewal cycle it replaces.

Are you ready for Apache Iceberg on AWS? Six signals
Signal What it usually means

A warehouse or Hadoop renewal is due within 12 months

The money for the migration already exists

Two or more engines read copies of the same data

You're paying for storage, and for the drift between copies, twice

An AI agent pilot stalled at security or audit review

Lineage and access control need to live in the data layer

Privacy deletion requests take days of manual work

Row-level deletes and snapshot expiry are missing

European entities or customers sit on the same platform Someone will ask for residency and exit-plan evidence
Your platform team spends weekends on file compaction Managed maintenance in S3 Tables is overdue
 

What should you ask any Apache Iceberg implementation partner?

If we were on the buying side, these are the six things we'd ask any implementation partner, ourselves included, before signing anything:

  1. Which catalog will be the system of record, and how will you make sure Athena, Redshift, and EMR all respect its permissions?
  2. Our privacy policy promises deletion within a set number of days. How does your snapshot retention plan keep us inside that, and inside our records retention rules?
  3. Will you validate on live data, in parallel with the old system, or only on a test copy?
  4. Once we're live, who runs compaction and cleanup, and what will that cost us each month?
  5. Is the ship date in the statement of work, and who pays if it slips?
  6. Is switching off the old platform in scope, or is that another project later?

FAQs

Can Amazon Redshift and Amazon Athena query the same Iceberg tables?
Yes, through the AWS Glue Data Catalog, and Amazon EMR and AWS Glue can use the same tables. Redshift can also run UPDATE, DELETE, and MERGE on them, and Lake Formation applies one set of access policies across those engines. The exception right now is Iceberg V3, since Athena can't read V3 tables yet.
Can Apache Iceberg handle GDPR right to erasure requests?
Yes, through row-level deletes, though the deletion isn't complete right away. Older snapshots keep the deleted rows until they expire and the orphan files are removed, so your real erasure window is your snapshot retention plus the cleanup delay. For the payments company's EU cardholders, we'd set snapshot expiry to match the timeline in its privacy policy.
What's the difference between Apache Iceberg and Amazon S3 Tables?

If you're the payments company, Iceberg is the format all of your tables end up in, and S3 Tables is one place you can keep them. New tables in an S3 table bucket get compacted, expired, and cleaned up by AWS automatically. The converted Hive tables would stay in ordinary S3 buckets in the same format, where the team runs that upkeep itself or turns on Glue's table optimizers to do it.

What will it cost to run Apache Iceberg on AWS?
No one charges for Iceberg itself. The payments company's bill would come from storage on S3 or S3 Tables, the maintenance jobs, query compute, catalog requests, and the time its team spends on all of it. On S3 Tables, the storage line starts at $0.0265 per GB-month. Compaction is billed per object and per GB processed, and the queries show up on whichever of Athena, EMR, Glue, or Redshift ran them. In our experience the biggest savings come from switching off duplicate warehouse copies and putting snapshot expiry on a schedule.
Does Apache Iceberg on AWS stop vendor lock-in?
Mostly, yes, because no single company owns the spec, and we'd count that as Iceberg's biggest advantage over a warehouse's own storage format. The Apache Software Foundation looks after it, many engines read and write it, and the files stay in your own S3 storage. That means the payments company could shift a workload from Athena to Redshift, EMR, or an engine outside AWS without exporting anything. The one thing we'd add is a single catalog with an open REST interface, such as the AWS Glue Iceberg REST endpoint, so you don't end up locked in at the catalog layer instead.
How long will an Apache Iceberg migration on AWS take?

We'd start the plan at 12 weeks to the first production workloads, which is the median from kickoff to production across every Mactores engagement, and then add time for size, since a big estate takes longer to finish. At the payments company, what would really set the pace is the 1,800 tables, everything that reads from them, and the finance warehouse that has to stay in sync through CDC until cutover. Finance would probably be working off Iceberg tables while the card history was still being moved, since each slice goes live once it passes validation.

How do you migrate Hive tables to Iceberg without downtime?

We'd run Hive and Iceberg side by side and move consumers across a slice at a time, in roughly this order:

  1. Convert well-partitioned Hive tables in place with the Iceberg migrate procedure.
  2. Register raw Parquet files with add_files.
  3. Rewrite badly laid-out tables with CTAS.
  4. Validate each slice on live data, then cut over with a rehearsed rollback plan.
Is Apache Iceberg a good foundation for AI agents on AWS?

We think so. Every agent reads one governed, versioned copy of the data, so if the disputes agent's answer is ever questioned, you can replay it against the snapshot it used. Row lineage keeps retrieval pipelines from reprocessing rows that haven't changed, and Lake Formation decides what each agent is allowed to see.

Ammar Nizami, Senior Forward-Deployed Engineer, Data Engineering practice

Written by

Ammar Nizami

Senior Forward-Deployed Engineer, Data Engineering practice

Ammar leads a team of Forward-Deployed Engineers inside Mactores’ Data Engineering practice. Fifteen years in data engineering. Fifty-plus production Apache Iceberg engagements shipped. He owns the architecture calls that a customer’s data team cannot afford to get wrong — table format choice, partition strategy, migration sequencing, cutover under load — and hands the running platform back to the customer’s operations team on customer-signed acceptance. The complex Iceberg problems Mactores takes on are the ones his team solves.

Let's deliver

Bring us the process. We will bring the authority model.

The agent-native AWS modernization firm. Data platforms moved. Legacy retired. AI agents in production. AWS Premier Tier Services Partner since 2026, on AWS since 2008.

  • 01 AWS Premier Tier Services Partner, on AWS since 2008.
  • 02 Forward-deployed engineers own architecture, cutover and the date.
  • 03 Acceptance criteria per phase, with the signer named in the SOW.
  • 04 The golden set and the trace data belong to you.