DataExportTask is a Pinot minion task that exports completed REALTIME segments to external storage as Parquet files. It is the complement of ExternalTableSyncTask: where that task reads external Parquet into Pinot, DataExportTask writes Pinot data back out to your data lake. Common uses include cold-tier archival, feeding downstream Iceberg catalogs, and cross-system data sharing without a separate ETL pipeline.
Two destinations are supported: a plain filesystem path (any S3-compatible URI via PinotFS) and an Iceberg REST catalog (AWS Glue, S3 Tables, or any Iceberg REST-compliant catalog).
How it works
Each cycle, the Generator runs on the controller: it loads a time-based watermark from ZooKeeper, filters REALTIME segments that are completed, past thebufferTimePeriod, and not already checkpointed or in a running task. It then emits one PinotTaskConfig per eligible segment, capped by tableMaxNumTasks.
The Executor runs on a minion: it downloads the segment from Pinot deep store, converts it to Parquet using the configured writer, and uploads the result to the destination. On success, it posts a COMPLETED checkpoint back so the segment is not re-exported.
Supported destinations
Prerequisites
- A REALTIME table with completed segments exists in your StarTree cluster.
- A minion tier is provisioned in the cluster.
- The minion has network access to the destination (S3 bucket, GCS bucket, or Iceberg REST endpoint).
- For Iceberg REST: the target table must already exist in the catalog, must not be partitioned, and must use Parquet as its file format.
Configuring the task
AddDataExportTask to the table’s task.taskTypeConfigsMap.
AWS S3 using Basic Authentication
AWS S3 using IAM-Based Authentication
GCS
UseGcsPinotFS with a service account key:
Iceberg REST
For an Iceberg REST destination, replace the filesystem keys with the catalog connection:Config reference
Core settings
Filesystem target
Set these whendataExport.target=filesystem.
AWS S3 using Basic Authentication
AWS S3 using IAM-Based Authentication
GCS
Parquet format
These apply to both destinations.Iceberg REST target
Set these whendataExport.target=iceberg-rest.
For AWS Glue and S3 Tables, the catalog vends short-lived S3 credentials automatically — do not set static
s3.* keys unless you want to override them. The minion’s IAM role must have glue:GetTable and s3:PutObject (or equivalent S3 Tables) permissions on the target.Iceberg batch commits
By default, each minion subtask uploads a Parquet file and stages it. The Generator accumulates staged files in ZooKeeper and issues a single Iceberg snapshot commit (AppendFiles.commit()) when the batch is ready — one snapshot for many segments instead of one per segment. This reduces Iceberg snapshot churn on high-throughput tables.
The Generator runs an EMIT / WAIT / COMMIT decision each cycle:
Scheduling and monitoring
DataExportTask uses the standard Pinot minion task scheduler. To trigger a run immediately without waiting for the next schedule tick, use the task schedule endpoint:

