bharos opened a new issue, #11699:
URL: https://github.com/apache/gravitino/issues/11699

   ### Describe the feature
   
   Add end-to-end support for a **sort** maintenance strategy for Iceberg 
tables in the Table Maintenance Service (Optimizer), so a table can be 
automatically rewritten into a sorted (or z-ordered) data file layout based on 
a policy — analogous to the existing `system_iceberg_compaction` strategy.
   
   The execution layer already exists: the built-in 
`builtin-iceberg-rewrite-data-files` job (`IcebergRewriteDataFilesJob`) already 
supports `--strategy sort` and `--sort-order`. What is missing is the **policy 
+ strategy-recommendation layer** that decides *when* a table should be sorted 
and emits the corresponding job.
   
   ### Motivation
   
   Sorting (and z-ordering) data files significantly improves query performance 
via better data skipping and file pruning, especially for high-cardinality 
filter columns. Today the optimizer only has a compaction (`binpack`) strategy 
(`CompactionStrategyHandler` / `system_iceberg_compaction`); there is no way to 
express "keep this table sorted by columns X, Y" as a managed policy and have 
the optimizer schedule it.
   
   This complements the in-flight expire-snapshots (#11194), 
remove-orphan-files (#11195), and rewrite-manifests (#11196) work under 
umbrella #8864, reusing the same strategy → job design pattern established in 
the expire-snapshots design doc (#11206).
   
   ### Describe the solution
   
   Following the existing compaction flow and the design pattern in #11206:
   
   1. **Policy content** — add `IcebergSortContent` (similar to 
`IcebergDataCompactionContent`) with: sort order (list of `{column, direction, 
nullOrdering}`), sort `strategy` (`sort` | `zorder`), optional `where` filter, 
and rewrite options (e.g. `target-file-size-bytes`, `min-input-files`).
   2. **Policy type** — add `system_iceberg_sort` to `Policy.BuiltInType` and 
the matching `PolicyContentDTO` / `PolicyDTO` JSON subtypes (mirroring 
`system_iceberg_compaction`).
   3. **Strategy handler** — add `SortStrategyHandler extends 
BaseExpressionStrategyHandler` (mirroring `CompactionStrategyHandler`), 
emitting a `JobExecutionContext` that invokes 
`builtin-iceberg-rewrite-data-files` with `strategy=sort` and the configured 
`sort-order`. Register it in `GravitinoStrategyProvider`.
   4. **Reuse** the existing `IcebergRewriteDataFilesJob` — no new job class is 
needed.
   5. Unit tests for the policy content (serde), the strategy handler 
(recommendation logic), and the job-options mapping, consistent with the 
existing compaction / expire-snapshots test coverage.
   
   ### Additional context
   
   - Umbrella: #8864 (built-in jobs for table maintenance)
   - Sibling strategies: #11194 (expire-snapshots), #11195 
(remove-orphan-files), #11196 (rewrite-manifests)
   - Design pattern reference: #11206 (expire-snapshots end-to-end design doc)
   - Trino-side `rewrite_data_files` (incl. sort) procedure delegation already 
merged in #10500
   
   I'd like to work on this.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to