Hive tables are folders of files plus an entry in a metastore. They work, but they have no transactions, changing the partitioning means rewriting everything, and listing millions of files slows every query. Apache Iceberg fixes this with a proper table layer: atomic commits, schema and partition changes without rewrites, time travel and fast planning. In 2026 it is also the format that Snowflake, Databricks, BigQuery, AWS, DuckDB and Polars all read and write. On 4 November AWS turned migration into a managed feature of Amazon S3 Tables. This guide covers that option and the two classic ones.
Method 1: in place, with Spark procedures
Iceberg ships Spark procedures that turn an existing Hive table into an Iceberg table without copying data. They read the file list, write Iceberg metadata and manifests, and register the new table. The data files must be Parquet, ORC or Avro.
-- Step 1: try it safely. Creates db.sales_iceberg pointing at the same files.
-- The original Hive table is untouched.
CALL spark_catalog.system.snapshot('db.sales', 'db.sales_iceberg');
-- Test queries, row counts and downstream jobs against db.sales_iceberg...
-- Step 2: convert for real. Replaces db.sales with an Iceberg table
-- (the old Hive table is kept as a backup with a _BACKUP_ suffix).
CALL spark_catalog.system.migrate('db.sales');
-- Alternative: add existing files to an Iceberg table you created yourself
CALL spark_catalog.system.add_files(
table => 'db.sales_new',
source_table => 'db.sales'
);Method 2: full rewrite with CREATE TABLE AS SELECT
If the Hive table has problems you want to fix anyway, such as thousands of tiny files, the wrong partitions or old compression, write a fresh Iceberg table instead:
CREATE TABLE lake.db.sales
USING iceberg
PARTITIONED BY (days(order_ts)) -- hidden partitioning: no extra date column needed
TBLPROPERTIES ('write.parquet.compression-codec' = 'zstd')
AS SELECT * FROM spark_catalog.db.sales;This reads and writes every byte, so it takes longer and doubles storage until you delete the old table. In exchange you get well-sized files, modern compression and hidden partitioning: queries filter on order_ts and Iceberg prunes partitions automatically, so users no longer need to know about a separate partition column.
Method 3: managed migration in Amazon S3 Tables
New on 4 November 2026. If your Hive tables are registered in AWS Glue and stored as Parquet, S3 Tables can run the whole migration:
- Cost: you pay only for the data the job copies; the Hive-to-Iceberg conversion itself is free. Source files in S3 Intelligent-Tiering keep their access tier.
- Better files: Snappy-compressed tables are recompressed to Zstandard and compacted, which reduces storage and the number of objects.
- Limits at launch: Glue-registered Hive tables in Parquet, in the same AWS account and region, in 10 regions including Ireland, Frankfurt and Stockholm in Europe.
- For AI agents: AWS also published a migration skill so an agent can run the workflow, with your approval.
Which method should you use?
| In place (migrate) | Rewrite (CTAS) | S3 Tables managed | |
|---|---|---|---|
| Copies data | No | Yes | Yes |
| Speed | Minutes | Hours for large tables | Runs in the background |
| Fixes small files and partitions | No | Yes | Compacts and recompresses |
| Rollback | From the backup table | Keep the old table | Built in |
| Where | Any Spark with Iceberg | Any Iceberg engine | AWS only, Glue and Parquet |
The cut-over checklist
- 1
List every reader and writer
Dashboards, Spark jobs, Athena or Trino queries, exports. Each one must support Iceberg before you switch.
- 2
Stop or pause writers
Migrate during a quiet window, or use S3 Tables sync to catch up changes before the switch.
- 3
Compare results
Row counts, sums of key columns and a few sample queries on old and new tables.
- 4
Switch the name
Point jobs at the new table, or let migrate replace the name for you.
- 5
Schedule maintenance
Iceberg needs regular compaction and snapshot expiry; S3 Tables, Databricks and Snowflake can do this automatically.
- 6
Remove the old table later
Keep the backup for a week or two before deleting it.
Check your understanding
1/3What does Iceberg's migrate procedure do with the data files?
It is a metadata-only conversion; the original table is kept as a backup.
2/3Why might you choose a full rewrite instead?
CTAS reads and writes everything, which lets you change the layout.
3/3What do you pay for in S3 Tables managed migration?
The Hive-to-Iceberg conversion has no charge.
You got 0 out of 3.
Related: Apache Iceberg v3, DuckDB vs Polars vs Spark and how to choose a database.
Sources: AWS, "Amazon S3 Tables now provide a simple, cost-effective path for data lake modernization" (4 November 2026); Apache Iceberg documentation for Spark procedures (snapshot, migrate, add_files) and table properties; Google Cloud blog (4 November 2026) for the talabat figure. Test procedures on a copy before running them on production tables.
