Skip to main content

Key Product Features

Pauseless Ingestion (Beta)

This feature makes real-time ingestion in Pinot truly pauseless, thus improving the data freshness even further. In the original design, there was a small pause in real-time ingestion (partition level) when the consuming segment was being committed. Pauseless consumption removes this constraint, thereby allowing to resume the process of consuming the next segment while the current consuming segment is being committed. Current caveats: Dedup and partial upserts are not currently supported (support for these is planned in a future release).

Alter Table Task (ATT / SRT) (Beta)

The StarTree Alter Table Task is an improved alternative to the Segment Refresh Task, designed for more efficient, batch-wise segment refreshes. Unlike the Segment Refresh Task, where the map phase and segment generation are local, leading to inefficiencies due to redundant segment creation and merging, the alter table task optimizes this process by writing all mapper output files to a single location, allowing segments to be generated directly from the output. This eliminates the extra merge step, reducing overhead and improving performance. The task follows a structured Map → Reduce → Upload workflow, ensuring better resource utilization, fault tolerance, and deep store integration. With built-in retries that dynamically adjust parameters, it provides a more scalable and reliable approach for large table refreshes.

CTE Reuse (Alpha/Experimental)

In the Multi-Stage Query Engine (MSQE), there are several cases in which the same table is scanned twice or the same join is executed again. Some of these parts can be quite expensive (eg: table scan) and therefore doubles the cost of the query. This feature allows parts of the query subtree to be reused, resulting in optimized query execution. More details in this PR. This feature needs a hint to enable. Described in this PR Example:

Snapshot support for offheap Dedup in real-time tables

Improved the offheap deduplication feature in Pinot real-time tables by adding support for snapshots. This refers to the metadata snapshot that can be preloaded into the server, thus dramatically improving the restart time. These snapshots are handled by a minion task called DedupSnapshotCreationTask. For more details, see the documentation.

New Stability Features

  • Group by trimming in MSQE: Parity with v1 engine regarding group by trimming support (needs to be explicitly configured in the query).
  • Improve performance of MSQE in the presence of large IN clause.
  • Added support for using the failure detector module in broker with the Multi-Stage Engine (MSE). Previously this was only enabled for the V1 engine.
  • Rebalance Hardening:
    • Added a dry-run mode with summary that provides important stats such as total segments to be moved, number of servers and so on (see this PR for details).
    • Added several pre-checks (eg: minimizeDataMovement, needsReload).
  • Correctly handle the case where the number of partitions in the input stream (eg: Kafka) have been reduced since the real-time table was created.
  • Trigger an alert if the streaming consumer is not updating the ingestion delay metric correctly. This will help detect data freshness issues proactively.
  • Fixed broken alerts in Cluster Health Check (eg: Query Health)
  • Clean up verbose logging in case of virtual columns
  • Bug fixes:
    • Ensuring segments in the deep store are cleaned up properly (post retention).
    • Prevent creating tables with a replication factor > number of available servers. This was allowed this earlier, which resulted in ingestion pause issues.
    • Remove snapshot lock on upsert tables which otherwise might cause ingestion issues.
    • Cleanup stale state of dimension tables on servers post deletion
    • Use Ideal State (IS) for computing segment list in consistent push (previously it relied on segment Zookeeper metadata which can get stale during failures).

Now() Function in Multi-Stage Engine Returns TIMESTAMP

As part of our ongoing efforts to align Pinot SQL more closely with the widely adopted Postgres SQL standard, the return type for the NOW() function in the Multi-Stage Engine (MSE) has been upgraded from LONG/BIGINT to TIMESTAMP.This change delivers two key benefits:
  • Postgres Compatibility: You can expect NOW() to behave just as it does in Postgres, making your SQL experience more seamless across systems.
  • Enhanced Functionality: NOW() can be directly used with functions like TIMESTAMPADD, and anywhere a TIMESTAMP type is expected in the multi-stage engine, improving usability and reducing friction.
What does this mean for you?If you have existing queries that perform arithmetic with NOW() as a LONG/BIGINT, you’ll want to update them to use CAST() for compatibility. For example:
  • CAST(NOW() AS BIGINT) - 86400000
  • WHERE longCol <= CAST(NOW() AS BIGINT)
Note: As a matter of convenience, the MSE engine will automatically add type coercion (implicit cast) rules for TIMESTAMP / LONG so that the user doesn’t have to add such cast functions explicitly.

Default Configuration Flags for Pinot

Zookeeper Configuration Changes

Default Configuration Flags for Cluster

  • publishNotReadyAddresses is set to True by default. This helps address DNS resolution issues during restarts/upgrades.