Skip to main content

RewriteDataFiles

The RewriteDataFiles action rewrites data files according to a rewrite strategy to optimize file sizing and layout within a table. This is commonly used for compaction and data optimization.

Interface

Overview

Rewriting data files helps maintain optimal query performance by:
  • Combining small files into larger ones (compaction)
  • Splitting large files into smaller ones
  • Reorganizing data by sort order or Z-order
  • Aligning data with new partition specifications

Configuration Options

Partial Progress

partial-progress.enabled (default: false) Enable committing groups of files before the entire rewrite completes. partial-progress.max-commits (default: 10) Maximum number of commits when partial progress is enabled. partial-progress.max-failed-commits Maximum number of failed commits allowed.

File Grouping

max-file-group-size-bytes (default: 100 GB) Maximum data size to compact in a single file group. Helps prevent resource exhaustion when rewriting large partitions. max-concurrent-file-group-rewrites (default: 5) Maximum number of file groups to rewrite simultaneously.

File Sizing

target-file-size-bytes Target output file size. Defaults to the table’s write.target-file-size-bytes property.

Advanced Options

use-starting-sequence-number (default: true) Use the sequence number from compaction start time instead of the new snapshot’s sequence number. This avoids conflicts with newer equality deletes. remove-dangling-deletes (default: false) Remove delete files that don’t apply to any live data files after compaction. rewrite-job-order (default: none) Order for processing file groups: bytes-asc, bytes-desc, files-asc, files-desc, or none. output-spec-id Partition specification ID for rewritten files. Used to reorganize data with a new partitioning scheme.

Methods

Strategy Selection

binPack

Use the BINPACK strategy to combine small files.
Example:

sort

Use the SORT strategy with the table’s sort order.
Example:

sort (with custom order)

Use the SORT strategy with a custom sort order.
Parameters:
  • sortOrder - Custom sort order to use
Example:

zOrder

Use the Z-ORDER strategy for multi-dimensional clustering.
Parameters:
  • columns - Column names to use for Z-ordering
Example:

Filtering

filter

Filter which files to consider for rewriting.
Parameters:
  • expression - Iceberg expression to filter files
Example:

Result

The Result interface provides statistics about the rewrite operation.

Methods

FileGroupRewriteResult

Usage Examples

Basic Compaction

Sort Optimization

Z-Order Clustering

Partition-Specific Rewrite

With Partial Progress

Remove Dangling Deletes

Best Practices

  1. Choose the right strategy:
    • Use BINPACK for general compaction
    • Use SORT when query patterns favor sorted data
    • Use Z-ORDER for multi-dimensional range queries
  2. Set appropriate file sizes: Target sizes between 128MB and 1GB depending on your workload
  3. Use filters for incremental optimization: Rewrite only problematic partitions
  4. Enable partial progress for large tables: Prevents losing all work on failure
  5. Monitor resource usage: Adjust concurrency settings based on cluster capacity
Rewriting data files creates a new snapshot. Old data remains accessible through previous snapshots until they are expired.