Columnar segment processing is an opt-in task configuration. Keep row-based processing as the default until compare mode succeeds for your table.
When to use it
Supported task types
Additional segment rewrite tasks may use the same task properties as support is added in StarTree releases.
Configuration properties
Set these properties in the task config for the segment-building task.Enable compare mode for FileIngestionTask
Compare mode is the safest migration path. It builds row-based and columnar output for the same input and fails the task if the generated segments differ.tableMaxNumTasks=1 during compare mode so the validation run does not consume unnecessary minion capacity.
Look for minion log messages that report row-based and columnar timings and whether segment comparison succeeded. If comparison fails, keep row-based processing enabled and inspect the columns reported in the comparison error.
Enable columnar processing
After compare mode succeeds on representative input, turn compare mode off and enable columnar processing.Memory tuning
Columnar processing keeps active column data, partition mapping, stats collectors, and segment index creators in memory. Memory use grows with:- Number of active partitions in one task.
- Number of concurrently built segments.
- Column cardinality and configured indexes.
- Parquet file width and nested column size.
Behavioral differences to check
Columnar output is often closer to the Parquet source representation, but it can differ from row-based processing in edge cases.Dependent transforms
Row-based processing evaluates all transforms for a row before final type conversion. Columnar processing can type-convert a derived column before a later derived column reads it. For example, iftransformA is declared as INT and transformB uses transformA, columnar processing may use the converted integer value while row-based processing uses the intermediate expression value. Validate dependent transforms in compare mode before enabling columnar processing.
Nested Parquet values
Parquet struct and nested values can be represented differently from row-based conversion. For example, row-based conversion may stringify booleans or wrap nested values, while columnar processing preserves the Parquet value shape more directly.Unsupported features
If the task detects unsupported features, it can fall back to row-based processing. Watch minion logs when using:- Sorted columns.
- Complex type transformers.
- Filter functions.
- Partition transform functions.
- Rollup or aggregation merge types.

