Skip to main content

Overview

Geneva backfills operate on a point-in-time snapshot of your table. When other operations modify the table during or between backfills, conflicts can occur. Geneva >=0.9.0 automatically handles most conflict scenarios, reducing unnecessary recomputation and enabling graceful recovery.

Safe Operations During Backfill

These operations can safely run while a backfill is in progress:

Operations That Cause Conflicts

These operations can conflict with running backfills:
When a conflict occurs, affected fragments fail gracefully. The backfill completes what it can, and you can re-run it to process the remaining rows.

How Geneva Handles Conflicts

Concurrent Backfills on Different Columns

When multiple backfills run on the same table but different columns, Geneva handles version conflicts automatically:
  1. Each backfill writes to different column files (field IDs)
  2. If a commit conflict occurs, Geneva retries at the latest version
  3. The retry merges the new column data without overwriting other columns
This is controlled by the GENEVA_VERSION_CONFLICT_MAX_RETRIES environment variable (default: 10). See Advanced Configuration for details.

Compaction Between Backfills

When you run compaction between backfills (not during), Geneva handles it efficiently:
Geneva’s default behavior is to skip rows that already have values (WHERE <col> IS NULL). This means compaction doesn’t cause unnecessary recomputation.

Recovery Steps

When a conflict occurs during a backfill:
  1. Wait for any concurrent operations (compaction, updates) to complete
  2. Re-run the backfill:
  3. Only uncomputed rows will be processed (rows with NULL values in the target column)
Checkpoints from the previous run are preserved, so you won’t lose progress on successfully computed rows.

Best Practices

Sequence Your Operations

For the smoothest experience, sequence your operations:

Use Insert-Only Operations During Backfill

If you need to add data while a backfill is running, use insert-only operations:

Monitor Backfill Progress

Use async backfills to monitor progress and handle errors:

Disable Auto-Compaction During Large Backfills

If using LanceDB Enterprise which has auto-compaction enabled, consider disabling it during large backfill operations to avoid conflicts.

API Reference

  • Tablebackfill(), add(), merge_insert(), and other table mutation methods