Skip to main content
Iceberg provides flexible APIs for writing data to tables, supporting atomic operations, transactions, and row-level modifications. This guide covers all write operations from simple appends to complex row-level deltas.

Appending Data

The most common write operation is appending new data files to a table.

Basic Append

Fast Append

For streaming workloads with frequent small appends, use fast append to reduce commit overhead:
Fast appends skip manifest compaction, which can slow down scan planning over time. Use regular appends for batch workloads.

Append Multiple Files

Append Manifest Files

Directly append pre-built manifest files:
Appending manifests is efficient for bulk imports and can significantly reduce commit time for large datasets.

Overwriting Data

Overwrite operations replace data matching specific criteria.

Dynamic Overwrite by Filter

Overwrite all data matching a row filter:

Explicit File Overwrite

Delete specific files and add new ones:

Validated Overwrite

Ensure idempotent overwrites with validation:

Conflict Detection

Detect and handle concurrent modifications:
Conflict detection is essential for non-idempotent operations like UPDATE and DELETE to maintain data consistency.

Deleting Data

Delete Files by Path

Delete by DataFile

Delete by Row Filter

Delete all files where all rows match a filter:
Row filter deletes only work when the filter matches entire files. If a file contains both matching and non-matching rows, the operation will fail with a ValidationException.

Validate Files Exist

Row-Level Changes

Row delta operations enable fine-grained updates and deletes using delete files.

Simple Row Delta

Update Operation (Copy-on-Write)

Update with Equality Deletes (Merge-on-Read)

Position Deletes

Validated Row Delta

Ensure concurrent operations don’t conflict:

Transactions

Group multiple operations into an atomic transaction.

Basic Transaction

Multi-Operation Transaction

Transactions ensure all operations succeed or fail together, maintaining table consistency.

Replace Partitions

Dynamically overwrite partitions (legacy operation):
ReplacePartitions is a legacy API. Use OverwriteFiles with overwriteByRowFilter() for better control and safety.

Complete Examples

Write Properties

Configure write behavior with table properties:

Best Practices

  1. Use transactions: Group related operations for atomic commits
  2. Batch appends: Append multiple files in a single commit to reduce metadata overhead
  3. Fast append for streaming: Use newFastAppend() for high-frequency writes
  4. Validate overwrites: Use conflict detection for non-idempotent operations
  5. Target file size: Configure appropriate file sizes (256-512 MB) for optimal performance
  6. Partition pruning: Structure writes to align with common query patterns
  7. Use row deltas for updates: Leverage delete files for efficient row-level modifications
  8. Monitor snapshot growth: Regularly expire snapshots to prevent metadata bloat