
Managed Iceberg in 2026: Autonomous Data Lake
Iceberg tables degrade silently — small files pile up, snapshots bloat metadata, and query latency creeps higher. A breakdown of the nine components every production data lake needs to stay healthy.
Managed Iceberg Tables
Compaction, snapshot expiry, orphan cleanup, and manifest rewrite — triggered by table health, run in dependency order. No cron jobs, no per-engine Spark scripts.
LakeOps| Operation | Table | Duration | Impact | Time | Status |
|---|---|---|---|---|---|
| Compact Data Files | customer_orders orders | 4s | 1.24 TB, 16 → 1 files | 57 minutes ago | SUCCESS |
| Expire Snapshots | payment_transactions payments | 27s | 8.2 TB | 4 hours ago | SUCCESS |
| Expire Snapshots | inventory_snapshots_20250702 warehouse | 3s | 2.1 TB | 4 hours ago | SUCCESS |
| Rewrite Manifests | raw_clickstream analytics | 1.9s | 3 → 1 manifests | 5 hours ago | SUCCESS |
| Compact Data Files | product_catalog products | 6m 11.3s | 3,008 → 1,256 files | 6 hours ago | SUCCESS |
Open and runs on your stack
How it works
LakeOps monitors every table, identifies what's degraded, sequences the right operations in the right order, and adapts cadence to each table's write pattern.
| Table | NS | Size | Status |
|---|---|---|---|
| customer_orders | orders | 1.24 TB | HEALTHY |
| payment_transactions | payments | 860 GB | WARNING |
| raw_clickstream | analytics | 4.6 TB | CRITICAL |
| product_catalog | products | 42 GB | HEALTHY |
| user_sessions | analytics | 1.9 TB | WARNING |
| inventory_levels | operations | 320 GB | HEALTHY |
| shipping_events | logistics | 580 GB | HEALTHY |
| search_query_logs | analytics | 3.2 TB | CRITICAL |
01 · Table health intelligence
LakeOps continuously monitors file count, small-file ratio, delete-file depth, snapshot age, manifest bloat, and write velocity across every table in your lake. Each table is classified as Healthy, Warning, or Critical — the most degraded tables get attention first.
Monitoring started at seq #4,812. Everything written from that point on is in scope.
02 · Adaptive maintenance sequencing
Snapshot expiry runs before compaction — so you never rewrite files about to be garbage-collected. Orphan cleanup follows. Manifest rewrite comes last. LakeOps sequences the full pipeline so each step's output is the next step's clean input, lake-wide, adapting cadence to each table's write pattern.
Files after compaction
970 → 87
Sorted by customer_id, event_date
customer_idevent_date03 · Compaction
Streaming writes fragment tables into thousands of tiny files. LakeOps merges them into optimally-sized files and sorts by the columns your queries actually filter, join, and group on — so engines skip irrelevant data via predicate pushdown.
Metadata size after expiry
84% smaller
154 → 24 snapshots retained (30-day window)
612885024939Today 08:32AppendRetained871545978103Today 08:29AppendRetained394820156873Today 07:14OverwriteRetained250198374610Aug 22 14:01AppendExpired718403926145Aug 20 09:33AppendExpired483019275638Aug 18 11:47CompactExpiredRetention
30 days
Expired
130
Latency cut
−2.8s
04 · Snapshot expiration
Every Iceberg commit creates a snapshot. Without expiration, metadata grows until query planning stalls. LakeOps expires snapshots based on configurable retention, with concurrency awareness so in-flight reads are never broken.
Storage reclaimed
56% of lake
Dead data removed — zero impact on live queries
ice_html5_sdk_eventsice_desktop_sdk_eventsdaily_metrics_reddit05 · Orphan file cleanup
Failed writes, aborted compaction, and interrupted jobs leave files on storage that no snapshot references. They are invisible to queries but fully visible on your cloud bill. LakeOps detects and removes them after a safety window.
Manifest files
487 → 12
97.5% fewer metadata reads per query plan
06 · Manifest rewriting
Manifests are Iceberg's file-level index. Hundreds of small manifests from frequent commits force the query planner to open each one — adding seconds of latency before any data is read. LakeOps consolidates them into fewer, larger manifests.
Read-time reconciliation
0 delete files
Deletes physically applied — no read-side cost
Before compaction
After compaction
07 · Delete file compaction
Merge-on-read tables accumulate position and equality delete files with every UPDATE or DELETE. Each read must reconcile live rows against all accumulated deletes. LakeOps rewrites affected data files to physically apply the deletes.
Column coverage
100%
All columns indexed with NDV, min/max, null-count
customer_id1.2MC-00001 … C-999990%event_date3652025-01-01 … 2026-08-250%amount48K0.01 … 9,999.002.1%region12ap-east-1 … us-west-20%File pruning
94%
files skipped
Freshness
< 1h
post-compaction
Columns
16/16
tracked
08 · Statistics computation
Puffin column-level statistics and Parquet min/max bounds power predicate pushdown and file pruning. When statistics are missing or stale, engines scan more data than necessary. LakeOps computes and refreshes them automatically.
Run simulations on customer_orders
| Simulation | data_rel | Strategy | Avg Size | |
|---|---|---|---|---|
| meta | clusterByOrderDate | customer_id, order_status | order_date (day) | 343 MB / file |
| meta | cluster.order_type.by.status | order_status, payment_method | order_status, payment_method | 511 MB / file |
| layout | cluster.insert-time-line | customer_id, store_id | created_at (hour) | 128 MB / file |
09 · Layout simulations
Not sure if sorting by event_date or customer_id will help most? LakeOps runs layout simulations on Iceberg branches — testing sort orders and partition strategies against real query patterns without modifying production data. Compare scan reduction, file layout, and estimated speedup side by side, then apply the winning strategy with one click.
Manage maintenance, configuration, and lifecycle policies for your data lakehouse
| On | Policy | Type | Next Run | Last Run | Updated | Actions |
|---|---|---|---|---|---|---|
orders_critical | Compact Files | Apr 25, 2026, 8:12 AM | Apr 25, 2026, 03:05 AM | Feb 01, 2025, 3:46 PM | ••• | |
payments_compact | Compact Files | Feb 15, 2026, 12:06 AM | Feb 1, 2025, 02:18 PM | Feb 5, 2025, 4:03 PM | ••• | |
Remove orphan files (e-ip...) For all tables in all catalogs every 7 days | Orphan Files | Apr 25, 2026, 8:12 AM | Apr 25, 2026, 04:07 PM | Jun 23, 2025, 04:01 PM | ••• | |
clickstream_cdc_events_p | Expire Snapshots | Apr 25, 2026, 12:03 AM | Apr 25, 2026, 03:05 AM | Jan 28, 2025, 03:25 PM | ••• | |
sessions_cdc_events_p | Expire Snapshots | Apr 25, 2026, 12:03 AM | Apr 26, 2026, 03:05 AM | Jun 26, 2025, 11:11 PM | ••• | |
global_expire_snapshots Runs snapshot expiration on all tables once a day | Expire Snapshots | Apr 26, 2026, 1:18 PM | Apr 07, 2026, 01:08 PM | Mar 14, 2026, 8:42 AM | ••• | |
manifest_rewrite_weekly Rewrite manifests for all critical tables weekly | Rewrite Manifests | Apr 28, 2026, 2:00 AM | Apr 21, 2026, 02:00 AM | Mar 10, 2026, 9:15 AM | ••• | |
staging_config | Configuration | — | — | Dec 31, 2025, 02:45 PM | ••• |
10 · Declarative policies
Compaction thresholds, retention windows, cleanup schedules, and sort strategies — set them as declarative policies. LakeOps applies them across every catalog, namespace, and table. New tables inherit policies automatically, so nothing falls through the cracks. Every execution is logged with duration, impact, and outcome.
Results
Benchmarks from production-grade tables across multiple engines and clouds.
Query speed
After compaction + layout optimization
CPU reduction
Compute hours across all engines
Storage saved
Orphans, snapshots & bloat removed
Table health
Autonomous maintenance keeps every table optimized
See It In Action
Compaction, snapshot expiry, orphan cleanup, and manifest rewrite — all sequenced and autonomous.
The Challenge
Without active maintenance, tables degrade silently — queries slow, costs grow, and every engine pays the price.
Small files, stale snapshots, and orphaned data compound quietly — driving up compute and storage cost while query latency drifts upward.
Spark, Trino, Athena, Snowflake optimize differently. Teams juggle configs, schedules, and scripts across engines with no coordination.
Manifests bloat, partitions skew, and data layouts drift from real workloads. Scan efficiency and query planning degrade over time.
Retention, compaction, and cleanup rules stay manual per-table. No auditable policies, no inheritance, no lake-wide enforcement.
The Full Platform
Route every query to the cheapest engine. Enforce retention and compaction policies across catalogs. Let AI agents query your lake with guardrails. All from the same control plane that maintains your tables.
| Table | NS | Size | Status |
|---|---|---|---|
| customer_orders | orders | 1.24 TB | HEALTHY |
| payment_transactions | payments | 860 GB | WARNING |
| raw_clickstream | analytics | 4.6 TB | CRITICAL |
| product_catalog | products | 42 GB | HEALTHY |
| user_sessions | analytics | 1.9 TB | WARNING |
| inventory_levels | operations | 320 GB | HEALTHY |
| shipping_events | logistics | 580 GB | HEALTHY |
| search_query_logs | analytics | 3.2 TB | CRITICAL |
Learns from query patterns and table signals to decide what to optimize, when, and how — no schedules, no manual tuning.
Production benchmarks
Real compaction results on batch, streaming, delete-heavy, and multi-writer Iceberg tables — same Rust engine, same hardware.
| Table | Size | Workload | Files (B → A) | Throughput | Time |
|---|---|---|---|---|---|
| balance_snapshots | 1,192 GB | TB-Scale batch | 11,957 → 3,270 | 1,572 MB/s | 11 min |
| events_analytics | 484 GB | Delete-Heavy | 16,128 → 7,198 | 729 MB/s | 11m 21s |
| raw_sdk_events | 8 GB | Streaming | 42,633 → 69 | 167 MB/s | 138s |
| site_traffic | 292 GB | Multi-Writer | 2,740 → 754 | 1,465 MB/s | 3m 25s |
200 GB benchmark (seconds)
95% faster
Normalized to Spark = 100%
90% cheaper
Avg. query latency after compaction
8x faster queries
Only metadata is processed — never retained or stored.
Telemetry reveals table health and actions needed.
Autopilot, manual approval, or policy-driven.
Resources
No Spark jobs to write. See compaction, expiry, and cleanup on your own tables.