arrow-left

All pages
gitbookPowered by GitBook
1 of 19

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Releases

The following summarizes Pinot's releases, from the latest one to the earliest one.

hashtag
Note

Before upgrading from one version to another one, read the release notes. While the Pinot committers strive to keep releases backward-compatible and introduce new features in a compatible manner, your environment may have a unique combination of configurations/data/schema that may have been somehow overlooked. Before you roll out a new release of Pinot on your cluster, it is best that you run the compatibility test suite that Pinot provides. The tests can be easily customized to suit the configurations and tables in your pinot cluster(s). As a good practice, you should build your own test suite, mirroring the table configurations, schema, sample data, and queries that are used in your cluster.

hashtag
1.0.0 (September 2023)

hashtag
0.12.1 (March 2023)

hashtag
0.12.0 (December 2022)

hashtag
0.11.0 (September 2022)

hashtag
0.10.0 (March 2022)

hashtag
0.9.3 (December 2021)

hashtag
0.9.2 (December 2021)

hashtag
0.9.1 (December 2021)

hashtag
0.9.0 (November 2021)

hashtag
0.8.0 (August 2021)

hashtag
0.7.1 (April 2021)

hashtag
0.6.0 (November 2020)

hashtag
0.5.0 (September 2020)

hashtag
0.4.0 (June 2020)

hashtag
0.3.0 (March 2020)

hashtag
0.2.0 (November 2019)

hashtag
0.1.0 (March 2019, First release)

Apache Pinot™ 1.0.0 release noteschevron-right
0.12.1chevron-right
0.12.0chevron-right
0.11.0chevron-right
0.10.0chevron-right
0.9.3chevron-right
0.9.2chevron-right
0.9.1chevron-right
0.9.0chevron-right
0.8.0chevron-right
0.7.1chevron-right
0.6.0chevron-right
0.5.0chevron-right
0.4.0chevron-right
0.3.0chevron-right
0.2.0chevron-right
0.1.0chevron-right

0.9.2

hashtag
Summary

This is a bug fixing release contains:

  • Upgrade log4j to 2.16.0 to fix CVE-2021-45046arrow-up-right (#7903arrow-up-right)

  • Upgrade swagger-ui to 3.23.11 to fix ()

  • Fix the bug that RealtimeToOfflineTask failed to progress with large time bucket gaps ().

The release is based on the release 0.9.1 with the following cherry-picks:

0.1.0

The 0.1.0 is first release of Pinot as an Apache project

hashtag
New Features

  • First release

0.9.1

hashtag
Summary

This release fixes the major issue of and a major bug fixing of pinot admin exit code issue().

The release is based on the release 0.9.0 with the following cherry-picks:

Off-line data ingestion from Apache Hadoop
  • Real-time data ingestion from Apache Kafka

  • CVE-2019-17495arrow-up-right
    #7902arrow-up-right
    #7814arrow-up-right
    9ed6498arrow-up-right
    50e1613arrow-up-right
    767aa8aarrow-up-right
    CVE-2021-44228arrow-up-right
    #7798arrow-up-right
    e44d2e4arrow-up-right
    af2858aarrow-up-right

    0.12.1

    hashtag
    Summary

    This is a bug-fixing release contains:

    • use legacy case-when format (https://github.com/apache/pinot/pull/10291arrow-up-right)

    The release is based on the release 0.12.0 with the following cherry-picks:

    hashtag

    6f5a8fc883e1d576117fdb92f09103067672aacaarrow-up-right

    0.4.0

    0.4.0 release introduced the theta-sketch based distinct count function, an S3 filesystem plugin, a unified star-tree index implementation, migration from TimeFieldSpec to DateTimeFieldSpec, etc.

    hashtag
    Summary

    0.4.0 release introduced various new features, including the theta-sketch based distinct count aggregation function, an S3 filesystem plugin, a unified star-tree index implementation, deprecation of TimeFieldSpec in favor of DateTimeFieldSpec, etc. Miscellaneous refactoring, performance improvement and bug fixes were also included in this release. See details below.

    hashtag
    Notable New Features

    • Made DateTimeFieldSpecs mainstream and deprecated TimeFieldSpec (#2756)

      • Used time column from table config instead of schema (#5320)

      • Included dateTimeFieldSpec in schema columns of Pinot Query Console #5392

    hashtag
    Major Bug Fixes

    • Do not release the PinotDataBuffer when closing the index (#5400)

    • Handled a no-arg function in query parsing and expression tree (#5375)

    • Fixed compatibility issues during rolling upgrade due to unknown json fields (#5376)

    hashtag
    Work in Progress

    • Upsert: support overriding data in the real-time table (#4261).

      • Add pinot upsert features to pinot common (#5175)

    • Enhancements for theta-sketch, e.g. multiValue aggregation support, complex predicates, performance tuning, etc

    hashtag
    Backward Incompatible Changes

    • TableConfig no longer support de-serialization from json string of nested json string (i.e. no \" inside the json) (#5194)

    • The following APIs are changed in AggregationFunction (use TransformExpressionTree instead of String as the key of blockValSetMap) (#5371):

    Used DATE_TIME as the primary time column for Pinot tables (#5399)

  • Supported range queries using indexes (#5240)

  • Supported complex aggregation functions

    • Supported Aggregation functions with multiple arguments (#5261)

    • Added api in AggregationFunction to get compiled input expressions (#5339)

  • Added a simple PinotFS benchmark driver (#5160)

  • Supported default star-tree (#5147)

  • Added an initial implementation for theta-sketch based distinct count aggregation function (#5316)

    • One minor side effect: DataSchemaPruner won't work for DistinctCountThetaSketchAggregatinoFunction (#5382)

  • Added access control for Pinot server segment download api (#5260)

  • Added Pinot S3 Filesystem Plugin (#5249)

  • Text search improvement

    • Pruned stop words for text index (#5297)

    • Used 8byte offsets in chunk based raw index creator (#5285)

    • Derived num docs per chunk from max column value length for varbyte raw index creator (#5256)

    • Added inter segment tests for text search and fixed a bug for Lucene query parser creation (#5226)

    • Made text index query cache a configurable option (#5176)

    • Added Lucene DocId to PinotDocId cache to improve performance (#5177)

    • Removed the construction of second bitmap in text index reader to improve performance (#5199)

  • Tooling/usability improvement

    • Added template support for Pinot Ingestion Job Spec (#5341)

    • Allowed user to specify zk data dir and don't do clean up during zk shutdown (#5295)

    • Allowed configuring minion task timeout in the PinotTaskGenerator (#5317)

    • Update JVM settings for scripts (#5127)

    • Added Stream github events demo (#5189)

    • Moved docs link from gitbook to docs.pinot.apache.org (#5193)

  • Re-implemented ORCRecordReader (#5267)

  • Evaluated schema transform expressions during ingestion (#5238)

  • Handled count distinct query in selection list (#5223)

  • Enabled async processing in pinot broker query api (#5229)

  • Supported bootstrap mode for table rebalance (#5224)

  • Supported order-by on BYTES column (#5213)

  • Added Nightly publish to binary (#5190)

  • Shuffled the segments when rebalancing the table to avoid creating hotspot servers (#5197)

  • Supported built-in transform functions (#5312)

    • Added date time transform functions (#5326)

  • Deepstore by-pass in LLC: introduced segment uploader (#5277, #5314)

  • APIs Additions/Changes

    • Added a new server api for download of segments

      • /GET /segments/{tableNameWithType}/{segmentName}

  • Upgraded helix to 0.9.7 (#5411)

  • Added support to execute functions during query compilation (#5406)

  • Other notable refactoring

    • Moved table config into pinot-spi (#5194)

    • Cleaned up integration tests. Standardized the creation of schema, table config and segments (#5385)

    • Added jsonExtractScalar function to extract field from json object (#4597)

    • Added template support for Pinot Ingestion Job Spec #5372

    • Cleaned up AggregationFunctionContext (#5364)

    • Optimized real-time range predicate when cardinality is high (#5331)

    • Made PinotOutputFormat use table config and schema to create segments (#5350)

    • Tracked unavailable segments in InstanceSelector (#5337)

    • Added a new best effort segment uploader with bounded upload time (#5314)

    • In SegmentPurger, used table config to generate the segment (#5325)

    • Decoupled schema from RecordReader and StreamMessageDecoder (#5309)

    • Implemented ARRAYLENGTH UDF for multi-valued columns (#5301)

    • Improved GroupBy query performance (#5291)

    • Optimized ExpressionFilterOperator (#5132)

  • Fixed missing error message from pinot-admin command (#5305)

  • Fixed HDFS copy logic (#5218)

  • Fixed spark ingestion issue (#5216)

  • Fixed the capacity of the DistinctTable (#5204)

  • Fixed various links in the Pinot website

  • void aggregate(int length, AggregationResultHolder aggregationResultHolder, Map<TransformExpressionTree, BlockValSet> blockValSetMap);
    void aggregateGroupBySV(int length, int[] groupKeyArray, GroupByResultHolder groupByResultHolder, Map<TransformExpressionTree, BlockValSet> blockValSetMap);
    void aggregateGroupByMV(int length, int[][] groupKeysArray, GroupByResultHolder groupByResultHolder, Map<TransformExpressionTree, BlockValSet> blockValSetMap);

    0.2.0

    The 0.2.0 release is the first release after the initial one and includes several improvements, reported following.

    hashtag
    New Features and Bug Fixes

    • Added support for Kafka 2.0

    • Table rebalancer now supports a minimum number of serving replicas during rebalance

    • Added support for UDF in filter predicates and selection

    • Added support to use hex string as the representation of byte array for queries (see PR )

    • Added support for parquet reader (see PR )

    • Introduced interface stability and audience annotations (see PR )

    • Refactor HelixBrokerStarter to separate constructor and start() - backwards incompatible (see PR )

    • Admin tool for listing segments with invalid intervals for offline tables

    • Migrated to log4j2 (see PR )

    • Added simple avro msg decoder

    • Added support for passing headers in Pinot client

    • Table rebalancer now supports a minimum number of serving replicas during rebalance

    • Support transform functions with AVG aggregation function (see PR )

    • Configurations additions/changes

      • Allow customized metrics prefix (see PR )

      • Controller.enable.batch.message.mode to false by default (see PR )

    hashtag
    Work in Progress

    • We are in the process of separating Helix and Pinot controllers, so that administrators can have the option of running independent Helix controllers and Pinot controllers.

    • We are in the process of moving towards supporting SQL query format and results.

    • We are in the process of separating instance and segment assignment using instance pools to optimize the number of Helix state transitions in Pinot clusters with thousands of tables.

    hashtag
    Other Notes

    • Task management does not work correctly in this release, due to bugs in Helix. We will upgrade to Helix 0.9.2 (or later) version to get this fixed.

    • You must upgrade to this release before moving onto newer versions of Pinot release. The protocol between Pinot-broker and Pinot-server has been changed and this release has the code to retain compatibility moving forward. Skipping this release may (depending on your environment) cause query errors if brokers are upgraded and servers are in the process of being upgraded.

    • As always, we recommend that you upgrade controllers first, and then brokers and lastly the servers in order to have zero downtime in production clusters.

    RetentionManager and OfflineSegmentIntervalChecker initial delays configurable (see PR )

  • Config to control kafka fetcher size and increase default (see PR )

  • Added a percent threshold to consider startup of services (see PR )

  • Make SingleConnectionBrokerRequestHandler as default (see PR )

  • Always enable default column feature, remove the configuration (see PR )

  • Remove redundant default broker configurations (see PR )

  • Removed some config keys in server(see PR )

  • Add config to disable HLC realtime segment (see PR )

  • Make RetentionManager and OfflineSegmentIntervalChecker initial delays configurable (see PR )

  • The following config variables are deprecated and will be removed in the next release:

    • pinot.broker.requestHandlerType will be removed, in favor of using the "singleConnection" broker request handler. If you have set this configuration, remove it and use the default type ("singleConnection") for broker request handler.

  • Pull Request introduces a backwards incompatible change to Pinot broker. If you use the Java constructor on HelixBrokerStarter class, then you will face a compilation error with this version. You will need to construct the object and call start() method in order to start the broker.

  • Pull Request introduces a backwards incompatible change for log4j configuration. If you used a custom log4j configuration (log4j.xml), you need to write a new log4j2 configuration (log4j2.xml). In addition, you may need to change the arguments on the command line to start Pinot components.

    If you used Pinot-admin command to start Pinot components, you don't need any change. If you used your own commands to start pinot components, you will need to pass the new log4j2 config as a jvm parameter (i.e. substitute -Dlog4j.configuration or -Dlog4j.configurationFile argument with -Dlog4j2.configurationFile=log4j2.xml).

  • #4041arrow-up-right
    #3852arrow-up-right
    #4063arrow-up-right
    #4100arrow-up-right
    #4139arrow-up-right
    #4557arrow-up-right
    #4392arrow-up-right
    #3928arrow-up-right
    #3946arrow-up-right
    #3869arrow-up-right
    #4011arrow-up-right
    #4048arrow-up-right
    #4074arrow-up-right
    #4106arrow-up-right
    #4222arrow-up-right
    #4235arrow-up-right
    #3946arrow-up-right
    #4100arrow-up-right
    #4139arrow-up-right

    0.5.0

    This release includes many new features on Pinot ingestion and connectors, query capability and a revamped controller UI.

    hashtag
    Summary

    This release includes many new features on Pinot ingestion and connectors (e.g., support for filtering during ingestion which is configurable in table config; support for json during ingestion; proto buf input format support and a new Pinot JDBC client), query capability (e.g., a new GROOVY transform function UDF) and admin functions (a revamped Cluster Manager UI & Query Console UI). It also contains many key bug fixes. See details below.

    The release was cut from the following commit: d1b4586arrow-up-right and the following cherry-picks:

    hashtag
    Notable New Features

    • Allowing update on an existing instance config: PUT /instances/{instanceName} with Instance object as the pay-load ()

    • Add PinotServiceManager to start Pinot components ()

    • Support for protocol buffers input format. ()

    hashtag
    Special notes

    • Changed the stream and metadata interface () — This PR concludes the work for the issue to extend offset support for other streams

    • TransformConfig: ingestion level column transformations. This was previously introduced in Schema (FieldSpec#transformFunction), and has now been moved to TableConfig. It continues to remain under schema, but we recommend users to set it in the TableConfig starting this release ().

    • Config key enable.case.insensitive.pql in Helix cluster config is deprecated, and replaced with enable.case.insensitive. (

    hashtag
    Major Bug fixes

    • Fix bug in distinctCountRawHLL on SQL path ()

    • Fix backward incompatibility for existing stream implementations ()

    • Fix backward incompatibility in StreamFactoryConsumerProvider ()

    hashtag
    Backward Incompatible Changes

    • PQL queries with HAVING clause will no longer be accepted for the following reasons: () — HAVING clause does not apply to PQL GROUP-BY semantic where each aggregation column is ordered individually — The current behavior can produce inaccurate results without any notice — HAVING support will be added for SQL queries in the next release

    • Because of the standardization of the DistinctCountThetaSketch predicate strings, upgrade Broker before Server. The new Broker can handle both standard and non-standard predicate strings for backward-compatibility. ()

    0.6.0

    This release introduced some excellent new features, including upsert, tiered storage, pinot-spark-connector, support of having clause, more validations on table config and schema, support of ordinals

    hashtag
    Summary

    This release introduced some excellent new features, including upsert, tiered storage, pinot-spark-connector, support of having clause, more validations on table config and schema, support of ordinals in GROUP BY and ORDER BY clause, array transform functions, adding push job type of segment metadata only mode, and some new APIs like updating instance tags, new health check endpoint. It also contains many key bug fixes. See details below.

    The release was cut from the following commit: and the following cherry-picks:

    0.9.3

    hashtag
    Summary

    This is a bug fixing release contains:

    • Update Log4j to 2.17.0 to address ()

    The release is based on the release 0.9.2 with the following cherry-picks:
    • 93c0404arrow-up-right

    CVE-2021-45105arrow-up-right
    #7933arrow-up-right

    Add GenericTransformFunction wrapper for simple ScalarFunctions (PR#5440arrow-up-right) — Adding support to invoke any scalar function via GenericTransformFunction

  • Add Support for SQL CASE Statement (PR#5461arrow-up-right)

  • Support distinctCountRawThetaSketch aggregation that returns serialized sketch. (PR#5465arrow-up-right)

  • Add multi-value support to SegmentDumpTool (PR#5487arrow-up-right) — add segment dump tool as part of the pinot-tool.sh script

  • Add json_format function to convert json object to string during ingestion. (PR#5492arrow-up-right) — Can be used to store complex objects as a json string (which can later be queries using jsonExtractScalar)

  • Support escaping single quote for SQL literal (PR#5501arrow-up-right) — This is especially useful for DistinctCountThetaSketch because it stores expression as literal E.g. DistinctCountThetaSketch(..., 'foo=''bar''', ...)

  • Support expression as the left-hand side for BETWEEN and IN clause (PR#5502arrow-up-right)

  • Add a new field IngestionConfig in TableConfig — FilterConfig: ingestion level filtering of records, based on filter function. (PR#5597arrow-up-right) — TransformConfig: ingestion level column transformations. This was previously introduced in Schema (FieldSpec#transformFunction), and has now been moved to TableConfig. It continues to remain under schema, but we recommend users to set it in the TableConfig starting this release (PR#5681arrow-up-right).

  • Allow star-tree creation during segment load (#PR5641arrow-up-right) — Introduced a new boolean config enableDynamicStarTreeCreation in IndexingConfig to enable/disable star-tree creation during segment load.

  • Support for Pinot clients using JDBC connection (#PR5602arrow-up-right)

  • Support customized accuracy for distinctCountHLL, distinctCountHLLMV functions by adding log2m value as the second parameter in the function. (#PR5564arrow-up-right) —Adding cluster config: default.hyperloglog.log2m to allow user set default log2m value.

  • Add segment encryption on Controller based on table config (PR#5617arrow-up-right)

  • Add a constraint to the message queue for all instances in Helix, with a large default value of 100000. (PR#5631arrow-up-right)

  • Support order-by aggregations not present in SELECT (PR#5637arrow-up-right) — Example: "select subject from transcript group by subject order by count() desc" This is equivalent to the following query but the return response should not contain count(). "select subject, count() from transcript group by subject order by count() desc"

  • Add geo support for Pinot queries (PR#5654arrow-up-right) — Added geo-spatial data model and geospatial functions

  • Cluster Manager UI & Query Console UI revamp (PR#5684arrow-up-right and PR#5732arrow-up-right) — updated cluster manage UI and added table details page and segment details page

  • Add Controller API to explore Zookeeper (PR#5687arrow-up-right)

  • Support BYTES type for dictinctCount and group-by (PR#5701arrow-up-right and PR#5708arrow-up-right) —Add BYTES type support to DistinctCountAggregationFunction —Correctly handle BYTES type in DictionaryBasedAggregationOperator for DistinctCount

  • Support for ingestion job spec in JSON format (#PR5729arrow-up-right)

  • Improvements to RealtimeProvisioningHelper command (#PR5737arrow-up-right) — Improved docs related to ingestion and plugins

  • Added GROOVY transform function UDF (#PR5748arrow-up-right) — Ability to run a groovy script in the query as a UDF. e.g. string concatenation: SELECT GROOVY('{"returnType": "INT", "isSingleValue": true}', 'arg0 + " " + arg1', columnA, columnB) FROM myTable

  • )
  • Change default segment load mode to MMAP. (PR#5539arrow-up-right) —The load mode for segments currently defaults to heap.

  • Fix logic in isLiteralOnlyExpression. (#5611arrow-up-right)

  • Fix double memory allocation during operator setup (#5619arrow-up-right)

  • Allow segment download url in Zookeeper to be deep store uri instead of hardcoded controller uri (#5639arrow-up-right)

  • Fix a backward compatible issue of converting BrokerRequest to QueryContext when querying from Presto segment splits (#5676arrow-up-right)

  • Fix the issue that PinotSegmentToAvroConverter does not handle BYTES data type. (#5789arrow-up-right)

  • 63a4fd4arrow-up-right
    a7f7f46arrow-up-right
    dafbef1arrow-up-right
    ced3a70arrow-up-right
    d902c1aarrow-up-right
    #PR4952arrow-up-right
    #PR5266arrow-up-right
    #PR5293arrow-up-right
    PR#5542arrow-up-right
    #5359arrow-up-right
    PR#5681arrow-up-right
    #5494arrow-up-right
    #5549arrow-up-right
    #5557arrow-up-right
    #PR5570arrow-up-right
    #PR5613arrow-up-right
    #PR5546arrow-up-right
  • d033a11arrow-up-right

  • hashtag
    Notable New Features

    • Tiered storage (#5793arrow-up-right)

    • Upsert feature (#6096arrow-up-right, #6113arrow-up-right, #6141arrow-up-right, #6149arrow-up-right, #6167arrow-up-right)

    • Pre-generate aggregation functions in QueryContext (#5805arrow-up-right)

    • Adding controller healthcheck endpoint: /health ()

    • Add pinot-spark-connector ()

    • Support multi-value non-dictionary group by ()

    • Support type conversion for all scalar functions ()

    • Add additional datetime functionality ()

    • Support post-aggregation in ORDER-BY ()

    • Support post-aggregation in SELECT ()

    • Add RANGE FilterKind to support merging ranges for SQL ()

    • Add HAVING support (5889)

    • Support for exact distinct count for non int data types ()

    • Add max qps bucket count ()

    • Add Range Indexing support for raw values ()

    • Add IdSet and IdSetAggregationFunction ()

    • [Deepstore by-pass]Add a Deepstore bypass integration test with minor bug fixes. ()

    • Add Hadoop counters for detecting schema mismatch ()

    • Add RawThetaSketchAggregationFunction ()

    • Instance API to directly updateTags ()

    • Add streaming query handler ()

    • Add InIdSetTransformFunction ()

    • Add ingestion descriptor in the header ()

    • Zookeeper put api ()

    • Feature/#5390 segment indexing reload status api ()

    • Segment processing framework ()

    • Support streaming query in QueryExecutor ()

    • Add list of allowed tables for emitting table level metrics ()

    • Add FilterOptimizer which supports optimizing both PQL and SQL query filter ()

    • Adding push job type of segment metadata only mode ()

    • Minion taskExecutor for RealtimeToOfflineSegments task (, )

    • Adding array transform functions: array_average, array_max, array_min, array_sum ()

    • Allow modifying/removing existing star-trees during segment reload ()

    • Implement off-heap bloom filter reader ()

    • Support for multi-threaded Group By reducer for SQL. ()

    • Add OnHeapGuavaBloomFilterReader ()

    • Support using ordinals in GROUP BY and ORDER BY clause ()

    • Merge common APIs for Dictionary ()

    • Add table level lock for segment upload ([#6165])

    • Added recursive functions validation check for group by ()

    • Add StrictReplicaGroupInstanceSelector ()

    • Add IN_SUBQUERY support ()

    • Add IN_PARTITIONED_SUBQUERY support ()

    • Some UI features (, , , )

    hashtag
    Special notes

    • Brokers should be upgraded before servers in order to keep backward-compatible:

      • Change group key delimiter from '\t' to '\0' (#5858arrow-up-right)

      • Support for exact distinct count for non int data types (#5872arrow-up-right)

    • Pinot Components have to be deployed in the following order:

      (PinotServiceManager -> Bootstrap services in role ServiceRole.CONTROLLER -> All remaining bootstrap services in parallel)

      • Starts Broker and Server in parallel when using ServiceManager ()

      • New settings introduced and old ones deprecated:

    • This aggregation function is still in beta version. This PR involves change on the format of data sent from server to broker, so it works only when both broker and server are upgraded to the new version:

      • Enhance DistinctCountThetaSketchAggregationFunction ()

    hashtag
    Major Bug fixes

    • Improve performance of DistinctCountThetaSketch by eliminating empty sketches and unions. (#5798arrow-up-right)

    • Enhance VarByteChunkSVForwardIndexReader to directly read from data buffer for uncompressed data (#5816arrow-up-right)

    • Fixing backward-compatible issue of schema fetch call (#5885arrow-up-right)

    • Fix race condition in MetricsHelper ()

    • Fixing the race condition that segment finished before ControllerLeaderLocator created. ()

    • Fix CSV and JSON converter on BYTES column ()

    • Fixing the issue that transform UDFs are parsed as function name 'OTHER', not the real function names ()

    • Incorporating embedded exception while trying to fetch stream offset ()

    • Use query timeout for planning phase ()

    • Add null check while fetching the schema ()

    • Validate timeColumnName when adding/updating schema/tableConfig ()

    • Handle the partitioning mismatch between table config and stream ()

    • Fix built-in virtual columns for immutable segment ()

    • Refresh the routing when real-time segment is committed ()

    • Add support for Decimal with Precision Sum aggregation ()

    • Fixing the calls to Helix to throw exception if zk connection is broken ()

    • Allow modifying/removing existing star-trees during segment reload ()

    • Add max length support in schema builder ()

    • Enhance star-tree to skip matching-all predicate on non-star-tree dimension ()

    hashtag
    Backward Incompatible Changes

    • Make real-time threshold property names less ambiguous (#5953arrow-up-right)

    • Enhance DistinctCountThetaSketchAggregationFunction (#6004arrow-up-right)

    • Deep Extraction Support for ORC, Thrift, and ProtoBuf Records (#6046arrow-up-right)

    e5c9becarrow-up-right

    Make real-time threshold property names less ambiguous ()

  • Change Signature of Broker API in Controller ()

  • #5846arrow-up-right
    #5787arrow-up-right
    #5851arrow-up-right
    #5849arrow-up-right
    #5438arrow-up-right
    #5856arrow-up-right
    #5867arrow-up-right
    #5898arrow-up-right
    #5889arrow-up-right
    #5872arrow-up-right
    #5922arrow-up-right
    #5853arrow-up-right
    #5926arrow-up-right
    #5857arrow-up-right
    #5873arrow-up-right
    #5970arrow-up-right
    #5902arrow-up-right
    #5717arrow-up-right
    #5973arrow-up-right
    #5995arrow-up-right
    #5949arrow-up-right
    #5718arrow-up-right
    #5934arrow-up-right
    #6027arrow-up-right
    #6037arrow-up-right
    #6056arrow-up-right
    #5967arrow-up-right
    #6050arrow-up-right
    #6124arrow-up-right
    #6084arrow-up-right
    #6100arrow-up-right
    #6118arrow-up-right
    #6044arrow-up-right
    #6147arrow-up-right
    #6152arrow-up-right
    #6176arrow-up-right
    #6186arrow-up-right
    #6208arrow-up-right
    #6022arrow-up-right
    #6043arrow-up-right
    #5810arrow-up-right
    #5981arrow-up-right
    #6117arrow-up-right
    #6215arrow-up-right
    #5917arrow-up-right
    #6004arrow-up-right
    #5887arrow-up-right
    #5864arrow-up-right
    #5931arrow-up-right
    #5940arrow-up-right
    #5956arrow-up-right
    #5990arrow-up-right
    #5994arrow-up-right
    #5966arrow-up-right
    #6031arrow-up-right
    #6042arrow-up-right
    #6078arrow-up-right
    #6053arrow-up-right
    #6069arrow-up-right
    #6100arrow-up-right
    #6112arrow-up-right
    #6109arrow-up-right
    #5953arrow-up-right
    #6119arrow-up-right

    0.8.0

    This release introduced several new features, including compatibility tests, enhanced complex type and Json support, partial upsert support, and new stream ingestion plugins.

    hashtag
    Summary

    This release introduced several awesome new features, including compatibility tests, enhanced complex type and Json support, partial upsert support, and new stream ingestion plugins (AWS Kinesis, Apache Pulsar). It contains a lot of query enhancements such as new timestamp and boolean type support and flexible numerical column comparison. It also includes many key bug fixes. See details below.

    The release was cut from the following commit: fe83e95aa9124ee59787c580846793ff7456eaa5

    and the following cherry-picks:

    hashtag
    Notable New Features

    • Extract time handling for SegmentProcessorFramework ()

    • Add Apache Pulsar low level and high level connector ()

    • Enable parallel builds for compat checker ()

    hashtag
    Special notes

    • After the 0.8.0 release, we will officially support jdk 11, and can now safely start to use jdk 11 features. Code is still compilable with jdk 8 ()

    • RealtimeToOfflineSegmentsTask config has some backward incompatible changes ()

      — timeColumnTransformFunction is removed (backward-incompatible, but rollup is not supported anyway)

      — Deprecate

    hashtag
    Major Bug fixes

    • Fix race condition in MinionInstancesCleanupTask ()

    • Fix custom instance id for controller/broker/minion ()

    • Fix UpsertConfig JSON deserialization. ()

    0.9.0

    hashtag
    Summary

    This release introduces a new features: Segment Merge and Rollup to simplify users day to day operational work. A new metrics plugin is added to support dropwizard. As usual, new functionalities and many UI/ Performance improvements.

    The release was cut from the following commit: 13c9ee9arrow-up-right and the following cherry-picks: 668b5e0arrow-up-right, ee887b9arrow-up-right

    hashtag
    Support Segment Merge and Roll-up

    LinkedIn operates a large multi-tenant cluster that serves a business metrics dashboard, and noticed that their tables consisted of millions of small segments. This was leading to slow operations in Helix/Zookeeper, long running queries due to having too many tasks to process, as well as using more space because of a lack of compression.

    To solve this problem they added the Segment Merge task, which compresses segments based on timestamps and rolls up/aggregates older data. The task can be run on a schedule or triggered manually via the Pinot REST API.

    At the moment this feature is only available for offline tables, but will be added for real-time tables in a future release.

    Major Changes:

    • Integrate enhanced SegmentProcessorFramework into MergeRollupTaskExecutor ()

    • Merge/Rollup task scheduler for offline tables. ()

    • Fix MergeRollupTask uploading segments not updating their metadata ()

    hashtag
    UI Improvement

    This release also sees improvements to Pinot’s query console UI.

    • Cmd+Enter shortcut to run query in query console ()

    • Showing tooltip in SQL Editor ()

    • Make the SQL Editor box expandable ()

    hashtag
    SQL Improvements

    There have also been improvements and additions to Pinot’s SQL implementation.

    hashtag
    New functions:

    • IN ()

    • LASTWITHTIME ()

    • ID_SET on MV columns ()

    hashtag
    New predicates are supported:

    • LIKE()

    • REGEXP_EXTRACT()

    • FILTER()

    hashtag
    Query compatibility improvements:

    • Infer data type for Literal ()

    • Support logical identifier in predicate ()

    • Support JSON queries with top-level array path expression. ()

    hashtag
    Performance Improvements

    This release contains many performance improvement, you may sense it for you day to day queries. Thanks to all the great contributions listed below:

    • Reduce the disk usage for segment conversion task ()

    • Simplify association between Java Class and PinotDataType for faster mapping ()

    • Avoid creating stateless ParseContextImpl once per jsonpath evaluation, avoid varargs allocation ()

    hashtag
    Other Notable New Features and Changes

    • Human Readable Controller Configs ()

    • Add the support of geoToH3 function ()

    • Add Apache Pulsar as Pinot Plugin () ()

    hashtag
    Major Bug fixes

    • Fix null pointer exception for non-existed metric columns in schema for JDBC driver ()

    • Fix the config key for TASK_MANAGER_FREQUENCY_PERIOD ()

    • Fixed pinot java client to add zkClient close ()

    0.11.0

    hashtag
    Summary

    Apache Pinot 0.11.0 has introduced many new features to extend the query abilities, e.g. the Multi-Stage query engine enables Pinot to do distributed joins, more sql syntax(DML support), query functions and indexes(Text index, Timestamp index) supported for new use cases. And as always, more integrations with other systems(E.g. Spark3, Flink).

    circle-info

    0.7.1

    This release introduced several awesome new features, including JSON index, lookup-based join support, geospatial support, TLS support for pinot connections, and various performance optimizations.

    hashtag
    Summary

    This release introduced several awesome new features, including JSON index, lookup-based join support, geospatial support, TLS support for pinot connections, and various performance optimizations and improvements.

    It also adds several new APIs to better manage the segments and upload data to the offline table. It also contains many key bug fixes. See details below.

    c1ac8a1arrow-up-right
  • 4da1daearrow-up-right

  • 573651barrow-up-right

  • c6c407darrow-up-right

  • 0d96c7farrow-up-right

  • c2637d1arrow-up-right

  • Add controller/server API to fetch aggregated segment metadata (#7102arrow-up-right)

  • Support Dictionary Based Plan For DISTINCT (#7141arrow-up-right)

  • Provide HTTP client to kinesis builder (#7148arrow-up-right)

  • Add datetime function with 2 arguments (#7116arrow-up-right)

  • Adding ability to check ingestion status for Offline Pinot table (#7070arrow-up-right)

  • Add timestamp datatype support in JDBC (#7117arrow-up-right)

  • Allow updating controller and broker helix hostname (#7064arrow-up-right)

  • Cancel running Kinesis consumer tasks when timeout occurs (#7109arrow-up-right)

  • Implement Append merger for partial upsert (#7087arrow-up-right)

    `* SegmentProcessorFramework Enhancement (#7092arrow-up-right)

  • Added TaskMetricsEmitted periodic controler job (#7091arrow-up-right)

  • Support json path expressions in query. (#6998arrow-up-right)

  • Support data preprocessing for AVRO and ORC formats (#7062arrow-up-right)

  • Add partial upsert config and mergers (#6899arrow-up-right)

  • Add support for range index rule recommendation(#7034) (#7063arrow-up-right)

  • Allow reloading consuming segment by default (#7078arrow-up-right)

  • Add LZ4 Compression Codec (#6804) ([#7035](https://github.com/apache/pinot/pull/7035arrow-up-right

    ))

  • Make Pinot JDK 11 Compilable (#6424arrow-up-right\

  • Introduce in-Segment Trim for GroupBy OrderBy Query (#6991arrow-up-right)

  • Produce GenericRow file in segment processing mapper (#7013arrow-up-right)

  • Add ago() scalar transform function (#6820arrow-up-right)

  • Add Bloom Filter support for IN predicate(#7005) (#7007arrow-up-right)

  • Add genericRow file reader and writer (#6997arrow-up-right)

  • Normalize LHS and RHS numerical types for >, >=, <, and <= operators. (#6927arrow-up-right)

  • Add Kinesis Stream Ingestion Plugin (#6661arrow-up-right)

  • feature/#6766 JSON and Startree index information in API (#6873arrow-up-right)

  • Support null value fields in generic row ser/de (#6968arrow-up-right)

  • Implement PassThroughTransformOperator to optimize select queries(#6972) (#6973arrow-up-right)

  • Optimize TIME_CONVERT/DATE_TIME_CONVERT predicates (#6957arrow-up-right)

  • Prefetch call to fetch buffers of columns seen in the query (#6967arrow-up-right)

  • Enabling compatibility tests in the script (#6959arrow-up-right)

  • Add collectionToJsonMode to schema inference (#6946arrow-up-right)

  • Add the complex-type support to decoder/reader (#6945arrow-up-right)

  • Adding a new Controller API to retrieve ingestion status for real-time… (#6890arrow-up-right)

  • Add support for Long in Modulo partition function. (#6929arrow-up-right)

  • Enhance PinotSegmentRecordReader to preserve null values (#6922arrow-up-right)

  • add complex-type support to avro-to-pinot schema inference (#6928arrow-up-right)

  • Add correct yaml files for real-time data(#6787) (#6916arrow-up-right)

  • Add complex-type transformation to offline segment creation (#6914arrow-up-right)

  • Add config File support(#6787) (#6901arrow-up-right)

  • Enhance JSON index to support nested array (#6877arrow-up-right)

  • Add debug endpoint for tables. (#6897arrow-up-right)

  • JSON column datatype support. (#6878arrow-up-right)

  • Allow empty string in MV column (#6879arrow-up-right)

  • Add Zstandard compression support with JMH benchmarking(#6804) (#6876arrow-up-right)

  • Normalize LHS and RHS numerical types for = and != operator. (#6811arrow-up-right)

  • Change ConcatCollector implementation to use off-heap (#6847arrow-up-right)

  • [PQL Deprecation] Clean up the old BrokerRequestOptimizer (#6859arrow-up-right)

  • [PQL Deprecation] Do not compile PQL broker request for SQL query (#6855arrow-up-right)

  • Add TIMESTAMP and BOOLEAN data type support (#6719arrow-up-right)

  • Add admin endpoint for Pinot Minon. (#6822arrow-up-right)

  • Remove the usage of PQL compiler (#6808arrow-up-right)

  • Add endpoints in Pinot Controller, Broker and Server to get system and application configs. (#6817arrow-up-right)

  • Support IN predicate in ColumnValue SegmentPruner(#6756) (#6776arrow-up-right)

  • Enable adding new segments to a upsert-enabled real-time table (#6567arrow-up-right)

  • Interface changes for Kinesis connector (#6667arrow-up-right)

  • Pinot Minion SegmentGenerationAndPush task: PinotFS configs inside taskSpec is always temporary and has higher priority than default PinotFS created by the minion server configs (#6744arrow-up-right)

  • DataTable V3 implementation and measure data table serialization cost on server (#6710arrow-up-right)

  • add uploadLLCSegment endpoint in TableResource (#6653arrow-up-right)

  • File-based SegmentWriter implementation (#6718arrow-up-right)

  • Basic Auth for pinot-controller (#6613arrow-up-right)

  • UI integration with Authentication API and added login page (#6686arrow-up-right)

  • Support data ingestion for offline segment in one pass (#6479arrow-up-right)

  • SumPrecision: support all data types and star-tree (#6668arrow-up-right)

  • complete compatibility regression testing (#6650arrow-up-right)

  • Kinesis implementation Part 1: Rename partitionId to partitionGroupId (#6655arrow-up-right)

  • Make Pinot metrics pluggable (#6640arrow-up-right)

  • Recover the segment from controller when LLC table cannot load it (#6647arrow-up-right)

  • Adding a new API for validating specified TableConfig and Schema (#6620arrow-up-right)

  • Introduce a metric for query/response size on broker. (#6590arrow-up-right)

  • Adding a controller periodic task to clean up dead minion instances (#6543arrow-up-right)

  • Adding new validation for Json, TEXT indexing (#6541arrow-up-right)

  • Always return a response from query execution. (#6596arrow-up-right)

  • collectorType
    and replace it with
    mergeType

    — Add roundBucketTimePeriod and partitionBucketTimePeriod to config the time bucket for round and partition

  • Regex path for pluggable MinionEventObserverFactory is changed from org.apache.pinot.*.event.* to org.apache.pinot.*.plugin.minion.tasks.* (#6980arrow-up-right)

  • Moved all pinot built-in minion tasks to the pinot-minion-builtin-tasks module and package them into a shaded jar (#6618arrow-up-right)

  • Reloading consuming segment flag pinot.server.instance.reload.consumingSegment will be true by default (#7078arrow-up-right)

  • Move JSON decoder from pinot-kafka to pinot-json package. (#7021arrow-up-right)

  • Backward incompatible schema change through controller rest API PUT /schemas/{schemaName} will be blocked. (#6737arrow-up-right)

  • Deprecated /tables/validateTableAndSchema in favor of the new configs/validate API and introduced new APIs for /tableConfigs to operate on the real-time table config, offline table config and schema in one shot. (#6840arrow-up-right)

  • Fix the memory issue for selection query with large limit (#7112arrow-up-right)

  • Fix the deleted segments directory not exist warning (#7097arrow-up-right)

  • Fixing docker build scripts by providing JDK_VERSION as parameter (#7095arrow-up-right)

  • Misc fixes for json data type (#7057arrow-up-right)

  • Fix handling of date time columns in query recommender(#7018) (#7031arrow-up-right)

  • fixing pinot-hadoop and pinot-spark test (#7030arrow-up-right)

  • Fixing HadoopPinotFS listFiles method to always contain scheme (#7027arrow-up-right)

  • fixed GenericRow compare for different _fieldToValueMap size (#6964arrow-up-right)

  • Fix NPE in NumericalFilterOptimizer due to IS NULL and IS NOT NULL operator. (#7001arrow-up-right)

  • Fix the race condition in real-time text index refresh thread (#6858) (#6990arrow-up-right)

  • Fix deep store directory structure (#6976arrow-up-right)

  • Fix NPE issue when consumed kafka message is null or the record value is null. (#6950arrow-up-right)

  • Mitigate calcite NPE bug. (#6908arrow-up-right)

  • Fix the exception thrown in the case that a specified table name does not exist (#6328) (#6765arrow-up-right)

  • Fix CAST transform function for chained transforms (#6941arrow-up-right)

  • Fixed failing pinot-controller npm build (#6795arrow-up-right)

  • 668b5e0arrow-up-right
    ee887b9arrow-up-right
    c2f7fccarrow-up-right
    #7158arrow-up-right
    #7026arrow-up-right
    #7149arrow-up-right
    #6424arrow-up-right
    #7158arrow-up-right
    #7122arrow-up-right
    #7127arrow-up-right
    #7125arrow-up-right

    MergeRollupTask integration tests (#7283arrow-up-right)

  • Add mergeRollupTask delay metrics (#7368arrow-up-right)

  • MergeRollupTaskGenerator enhancement: enable parallel buckets scheduling (#7481arrow-up-right)

  • Use maxEndTimeMs for merge/roll-up delay metrics. (#7617arrow-up-right)

  • Fix tables ordering by number of segments (#7564arrow-up-right)

    Raw results for Percentile TDigest and Est (#7226arrow-up-right),

  • Add timezone as argument in function toDateTime (#7552arrow-up-right)

  • Support configurable group by trim size to improve results accuracy (#7241arrow-up-right)

    Replace MINUS with STRCMP (#7394arrow-up-right)

  • Bit-sliced range index for int, long, float, double, dictionarized SV columns (#7454arrow-up-right)

  • Use MethodHandle to access vectorized unsigned comparison on JDK9+ (#7487arrow-up-right)

  • Add option to limit thread usage per query (#7492arrow-up-right)

  • Improved range queries (#7513arrow-up-right)

  • Faster bitmap scans (#7530arrow-up-right)

  • Optimize EmptySegmentPruner to skip pruning when there is no empty segments (#7531arrow-up-right)

  • Map bitmaps through a bounded window to avoid excessive disk pressure (#7535arrow-up-right)

  • Allow RLE compression of bitmaps for smaller file sizes (#7582arrow-up-right)

  • Support raw index properties for columns with JSON and RANGE indexes (#7615arrow-up-right)

  • Enhance BloomFilter rule to include IN predicate(#7444arrow-up-right) (#7624arrow-up-right)

  • Introduce LZ4_WITH_LENGTH chunk compression type (#7655arrow-up-right)

  • Enhance ColumnValueSegmentPruner and support bloom filter prefetch (#7654arrow-up-right)

  • Apply the optimization on dictIds within the segment to DistinctCountHLL aggregation func (#7630arrow-up-right)

  • During segment pruning, release the bloom filter after each segment is processed (#7668arrow-up-right)

  • Fix JSONPath cache inefficient issue (#7409arrow-up-right)

  • Optimize getUnpaddedString with SWAR padding search (#7708arrow-up-right)

  • Lighter weight LiteralTransformFunction, avoid excessive array fills (#7707arrow-up-right)

  • Inline binary comparison ops to prevent function call overhead (#7709arrow-up-right)

  • Memoize literals in query context in order to deduplicate them (#7720arrow-up-right)

  • Add dropwizard metrics plugin (#7263arrow-up-right)

  • Introduce OR Predicate Execution On Star Tree Index (#7184arrow-up-right)

  • Allow to extract values from array of objects with jsonPathArray (#7208arrow-up-right)

  • Add Realtime table metadata and indexes API. (#7169arrow-up-right)

  • Support array with mixing data types (#7234arrow-up-right)

  • Support force download segment in reload API (#7249arrow-up-right)

  • Show uncompressed znRecord from zk api (#7304arrow-up-right)

  • Add debug endpoint to get minion task status. (#7300arrow-up-right)

  • Validate CSV Header For Configured Delimiter (#7237arrow-up-right)

  • Add auth tokens and user/password support to ingestion job command (#7233arrow-up-right)

  • Add option to store the hash of the upsert primary key (#7246arrow-up-right)

  • Add null support for time column (#7269arrow-up-right)

  • Add mode aggregation function (#7318arrow-up-right)

  • Support disable swagger in Pinot servers (#7341arrow-up-right)

  • Delete metadata properly on table deletion (#7329arrow-up-right)

  • Add basic Obfuscator Support (#7407arrow-up-right)

  • Add AWS sts dependency to enable auth using web identity token. (#7017arrow-up-right)(#7445arrow-up-right)

  • Mask credentials in debug endpoint /appconfigs (#7452arrow-up-right)

  • Fix /sql query endpoint now compatible with auth (#7230arrow-up-right)

  • Fix case sensitive issue in BasicAuthPrincipal permission check (#7354arrow-up-right)

  • Fix auth token injection in SegmentGenerationAndPushTaskExecutor (#7464arrow-up-right)

  • Add segmentNameGeneratorType config to IndexingConfig (#7346arrow-up-right)

  • Support trigger PeriodicTask manually (#7174arrow-up-right)

  • Add endpoint to check minion task status for a single task. (#7353arrow-up-right)

  • Showing partial status of segment and counting CONSUMING state as good segment status (#7327arrow-up-right)

  • Add "num rows in segments" and "num segments queried per host" to the output of Realtime Provisioning Rule (#7282arrow-up-right)

  • Check schema backward-compatibility when updating schema through addSchema with override (#7374arrow-up-right)

  • Optimize IndexedTable (#7373arrow-up-right)

  • Support indices remove in V3 segment format (#7301arrow-up-right)

  • Optimize TableResizer (#7392arrow-up-right)

  • Introduce resultSize in IndexedTable (#7420arrow-up-right)

  • Offset based real-time consumption status checker (#7267arrow-up-right)

  • Add causes to stack trace return (#7460arrow-up-right)

  • Create controller resource packages config key (#7488arrow-up-right)

  • Enhance TableCache to support schema name different from table name (#7525arrow-up-right)

  • Add validation for realtimeToOffline task (#7523arrow-up-right)

  • Unify CombineOperator multi-threading logic (#7450arrow-up-right)

  • Support no downtime rebalance for table with 1 replica in TableRebalancer (#7532arrow-up-right)

  • Introduce MinionConf, move END_REPLACE_SEGMENTS_TIMEOUT_MS to minion config instead of task config. (#7516arrow-up-right)

  • Adjust tuner api (#7553arrow-up-right)

  • Adding config for metrics library (#7551arrow-up-right)

  • Add geo type conversion scalar functions (#7573arrow-up-right)

  • Add BOOLEAN_ARRAY and TIMESTAMP_ARRAY types (#7581arrow-up-right)

  • Add MV raw forward index and MV BYTES data type (#7595arrow-up-right)

  • Enhance TableRebalancer to offload the segments from most loaded instances first (#7574arrow-up-right)

  • Improve get tenant API to differentiate offline and real-time tenants (#7548arrow-up-right)

  • Refactor query rewriter to interfaces and implementations to allow customization (#7576arrow-up-right)

  • In ServiceStartable, apply global cluster config in ZK to instance config (#7593arrow-up-right)

  • Make dimension tables creation bypass tenant validation (#7559arrow-up-right)

  • Allow Metadata and Dictionary Based Plans for No Op Filters (#7563arrow-up-right)

  • Reject query with identifiers not in schema (#7590arrow-up-right)

  • Round Robin IP addresses when retry uploading/downloading segments (#7585arrow-up-right)

  • Support multi-value derived column in offline table reload (#7632arrow-up-right)

  • Support segmentNamePostfix in segment name (#7646arrow-up-right)

  • Add select segments API (#7651arrow-up-right)

  • Controller getTableInstance() call now returns the list of live brokers of a table. (#7556arrow-up-right)

  • Allow MV Field Support For Raw Columns in Text Indices (#7638arrow-up-right)

  • Allow override distinctCount to segmentPartitionedDistinctCount (#7664arrow-up-right)

  • Add a quick start with both UPSERT and JSON index (#7669arrow-up-right)

  • Add revertSegmentReplacement API (#7662arrow-up-right)

  • Smooth segment reloading with non blocking semantic (#7675arrow-up-right)

  • Clear the reused record in PartitionUpsertMetadataManager (#7676arrow-up-right)

  • Replace args4j with picocli (#7665arrow-up-right)

  • Handle datetime column consistently (#7645arrow-up-right)(#7705arrow-up-right)

  • Allow to carry headers with query requests (#7696arrow-up-right) (#7712arrow-up-right)

  • Allow adding JSON data type for dimension column types (#7718arrow-up-right)

  • Separate SegmentDirectoryLoader and tierBackend concepts (#7737arrow-up-right)

  • Implement size balanced V4 raw chunk format (#7661arrow-up-right)

  • Add presto-pinot-driver lib (#7384arrow-up-right)

  • Ignore query json parse errors (#7165arrow-up-right)

  • Fix shutdown hook for PinotServiceManager (#7251arrow-up-right) (#7253arrow-up-right)

  • Make STRING to BOOLEAN data type change as backward compatible schema change (#7259arrow-up-right)

  • Replace gcp hardcoded values with generic annotations (#6985arrow-up-right)

  • Fix segment conversion executor for in-place conversion (#7265arrow-up-right)

  • Fix reporting consuming rate when the Kafka partition level consumer isn't stopped (#7322arrow-up-right)

  • Fix the issue with concurrent modification for segment lineage (#7343arrow-up-right)

  • Fix TableNotFound error message in PinotHelixResourceManager (#7340arrow-up-right)

  • Fix upload LLC segment endpoint truncated download URL (#7361arrow-up-right)

  • Fix task scheduling on table update (#7362arrow-up-right)

  • Fix metric method for ONLINE_MINION_INSTANCES metric (#7363arrow-up-right)

  • Fix JsonToPinotSchema behavior to be consistent with AvroSchemaToPinotSchema (#7366arrow-up-right)

  • Fix currentOffset volatility in consuming segment(#7365arrow-up-right)

  • Fix misleading error msg for missing URI (#7367arrow-up-right)

  • Fix the correctness of getColumnIndices method (#7370arrow-up-right)

  • Fix SegmentZKMetadta time handling (#7375arrow-up-right)

  • Fix retention for cleaning up segment lineage (#7424arrow-up-right)

  • Fix segment generator to not return illegal filenames (#7085arrow-up-right)

  • Fix missing LLC segments in segment store by adding controller periodic task to upload them (#6778arrow-up-right)

  • Fix parsing error messages returned to FileUploadDownloadClient (#7428arrow-up-right)

  • Fix manifest scan which drives /version endpoint (#7456arrow-up-right)

  • Fix missing rate limiter if brokerResourceEV becomes null due to ZK connection (#7470arrow-up-right)

  • Fix race conditions between segment merge/roll-up and purge (or convertToRawIndex) tasks: (#7427arrow-up-right)

  • Fix pql double quote checker exception (#7485arrow-up-right)

  • Fix minion metrics exporter config (#7496arrow-up-right)

  • Fix segment unable to retry issue by catching timeout exception during segment replace (#7509arrow-up-right)

  • Add Exception to Broker Response When Not All Segments Are Available (Partial Response) (#7397arrow-up-right)

  • Fix segment generation commands (#7527arrow-up-right)

  • Return non zero from main with exception (#7482arrow-up-right)

  • Fix parquet plugin shading error (#7570arrow-up-right)

  • Fix the lowest partition id is not 0 for LLC (#7066arrow-up-right)

  • Fix star-tree index map when column name contains '.' (#7623arrow-up-right)

  • Fix cluster manager URLs encoding issue(#7639arrow-up-right)

  • Fix fieldConfig nullable validation (#7648arrow-up-right)

  • Fix verifyHostname issue in FileUploadDownloadClient (#7703arrow-up-right)

  • Fix TableCache schema to include the built-in virtual columns (#7706arrow-up-right)

  • Fix DISTINCT with AS function (#7678arrow-up-right)

  • Fix SDF pattern in DataPreprocessingHelper (#7721arrow-up-right)

  • Fix fields missing issue in the source in ParquetNativeRecordReader (#7742arrow-up-right)

  • #7180arrow-up-right
    #7178arrow-up-right
    #7289arrow-up-right
    #7359arrow-up-right
    #7387arrow-up-right
    #7381arrow-up-right
    #7542arrow-up-right
    #7584arrow-up-right
    #7355arrow-up-right
    #7214arrow-up-right
    #7114arrow-up-right
    #7566arrow-up-right
    #7332arrow-up-right
    #7347arrow-up-right
    #7511arrow-up-right
    #7193arrow-up-right
    #7402arrow-up-right
    #7412arrow-up-right
    #7173arrow-up-right
    #7182arrow-up-right
    #7223arrow-up-right
    #7247arrow-up-right
    #7175arrow-up-right
    #7198arrow-up-right
    #7196arrow-up-right
    Note: there is a major upgrade for Apache Helix to 1.0.4, so make sure you upgrade the system in the order of:

    Helix Controller -> Pinot Controller -> Pinot Broker -> Pinot server

    hashtag
    Multi-Stage Query Engine

    The new multi-stage query engine (a.k.a V2 query engine) is designed to support more complex SQL semantics such as JOIN, OVER window, MATCH_RECOGNIZE and eventually, make Pinot support closer to full ANSI SQL semantics. More to read: https://docs.pinot.apache.org/developers/advanced/v2-multi-stage-query-enginearrow-up-right

    hashtag
    Pause Stream Consumption on Apache Pinot

    Pinot operators can pause real-time consumption of events while queries are being executed, and then resume consumption when ready to do so again.\

    More to read: https://medium.com/apache-pinot-developer-blog/pause-stream-consumption-on-apache-pinot-772a971ef403arrow-up-right

    hashtag
    Gap-filling function

    The gapfilling functions allow users to interpolate data and perform powerful aggregations and data processing over time series data. More to read: https://www.startree.ai/blog/gapfill-function-for-time-series-datasets-in-pinotarrow-up-right

    hashtag
    Add support for Spark 3.x (#8560arrow-up-right)

    Long waiting feature for segment generation on Spark 3.x.

    hashtag
    Add Flink Pinot connector (#8233arrow-up-right)

    Similar to the Spark Pinot connector, this allows Flink users to dump data from the Flink application to Pinot.

    hashtag
    Show running queries and cancel query by id (#9171arrow-up-right)

    This feature allows better fine-grained control on pinot queries.

    hashtag
    Timestamp Index (#8343arrow-up-right)

    This allows users to have better query performance on the timestamp column for lower granularity. See: https://docs.pinot.apache.org/basics/indexing/timestamp-indexarrow-up-right

    hashtag
    Native Text Indices (#8384arrow-up-right)

    Wanna search text in real time? The new text indexing engine in Pinot supports the following capabilities:

    1. New operator: LIKE

    1. New operator: CONTAINS

    1. Native text index, built from the ground up, focusing on Pinot’s time series use cases and utilizing existing Pinot indices and structures(inverted index, bitmap storage).

    2. Real Time Text Index

    Read more: https://medium.com/@atri.jiit/text-search-time-series-style-681af37ba42earrow-up-right

    hashtag
    Adding DML definition and parse SQL InsertFile (#8557arrow-up-right)

    Now you can use INSERT INTO [database.]table FROM FILE dataDirURI OPTION ( k=v ) [, OPTION (k=v)]* to load data into Pinot from a file using Minion. See: https://docs.pinot.apache.org/basics/data-import/from-query-consolearrow-up-right

    hashtag
    Deduplication (#8708arrow-up-right)

    This feature supports enabling deduplication for real-time tables, via a top-level table config. At a high level, primaryKey (as defined in the table schema) hashes are stored into in-memory data structures, and each incoming row is validated against it. Duplicate rows are dropped.

    The expectation while using this feature is for the stream to be partitioned by the primary key, strictReplicaGroup routing to be enabled, and the configured stream consumer type to be low level. These requirements are therefore mandated via table config API's input validations.

    hashtag
    Functions support and changes:

    • Add support for functions arrayConcatLong, arrayConcatFloat, arrayConcatDouble (#9131arrow-up-right)

    • Add support for regexpReplace scalar function (#9123arrow-up-right)

    • Add support for Base64 Encode/Decode Scalar Functions (#9114arrow-up-right)

    • Optimize like to regexp conversion to do not include unnecessary ^._ and ._$ ()

    • Support DISTINCT on multiple MV columns ()

    • Support DISTINCT on single MV column ()

    • Add histogram aggregation function ()

    • Optimize dateTimeConvert scalar function to only parse the format once ()

    • Support conjugates for scalar functions, add more scalar functions ()

    • add FIRSTWITHTIME aggregate function support ()

    • Add PercentileSmartTDigestAggregationFunction ()

    • Simplify the parameters for DistinctCountSmartHLLAggregationFunction ()

    • add scalar function for cast so it can be calculated at compile time ()

    • Scalable Gapfill Implementation for Avg/Count/Sum ()

    • Add commonly used math, string and date scalar functions in Pinot ()

    • Datetime transform functions ()

    • Scalar function for url encoding and decoding ()

    • Add support for IS NULL and NOT IS NULL in transform functions ()

    • Support st_contains using H3 index ()

    hashtag
    The full list of features introduced in this release

    • add query cancel APIs on controller backed by those on brokers (#9276arrow-up-right)

    • Add an option to search input files recursively in ingestion job. The default is set to true to be backward compatible. (#9265arrow-up-right)

    • Adding endpoint to download local log files for each component (#9259arrow-up-right)

    • Add metrics to track controller segment download and upload requests in progress ()

    • add a freshness based consumption status checker ()

    • Force commit consuming segments ()

    • Adding kafka offset support for period and timestamp ()

    • Make upsert metadata manager pluggable ()

    • Adding logger utils and allow change logger level at runtime ()

    • Proper null handling in equality, inequality and membership operators for all SV column data types ()

    • support to show running queries and cancel query by id ()

    • Enhance upsert metadata handling ()

    • Proper null handling in Aggregation functions for SV data types ()

    • Add support for IAM role based credentials in Kinesis Plugin ()

    • Task genrator debug api ()

    • Add Segment Lineage List API ()

    • [colocated-join] Adds Support for instancePartitionsMap in Table Config ()

    • Support pause/resume consumption of real-time tables ()

    • Minion tab in Pinot UI ()

    • Add Protocol Buffer Stream Decoder ()

    • Update minion task metadata ZNode path ()

    • add /tasks/{taskType}/{tableNameWithType}/debug API ()

    • Defined a new broker metric for total query processing time ()

    • Proper null handling in SELECT, ORDER BY, DISTINCT, and GROUP BY ()

    • fixing REGEX OPTION parser ()

    • Enable key value byte stitching in PulsarMessageBatch ()

    • Add property to skip adding hadoop jars to package ()

    • Support DISTINCT on multiple MV columns ()

    • Implement Mutable FST Index ()

    • Support DISTINCT on single MV column ()

    • Add controller API for reload segment task status ()

    • Spark Connector, support for TIMESTAMP and BOOLEAN fields ()

    • Allow moveToFinalLocation in METADATA push based on config () ()

    • allow up to 4GB per bitmap index ()

    • Deprecate debug options and always use query options ()

    • Streamed segment download & untar with rate limiter to control disk usage ()

    • Improve the Explain Plan accuracy ()

    • allow to set https as the default scheme ()

    • Add histogram aggregation function ()

    • Allow table name with dots by a PinotConfiguration switch ()

    • Disable Groovy function by default ()

    • Deduplication ()

    • Add pluggable client auth provider ()

    • Adding pinot file system command ()

    • Allow broker to automatically rewrite expensive function to its approximate counterpart ()

    • allow to take data outside the time window by negating the window filter ()

    • Support BigDecimal raw value forward index; Support BigDecimal in many transforms and operators ()

    • Ingestion Aggregation Feature ()

    • Enable uploading segments to real-time tables ()

    • Package kafka 0.9 shaded jar to pinot-distribution ()

    • Simplify the parameters for DistinctCountSmartHLLAggregationFunction ()

    • Add PercentileSmartTDigestAggregationFunction ()

    • Add support for Spark 3.x ()

    • Adding DML definition and parse SQL InsertFile ()

    • endpoints to get and delete minion task metadata ()

    • Add query option to use more replica groups ()

    • Only discover public methods annotated with @ScalarFunction ()

    • Support single-valued BigDecimal in schema, type conversion, SQL statements and minimum set of transforms. ()

    • Add connection based FailureDetector ()

    • Add endpoints for some finer control on minion tasks ()

    • Add adhoc minion task creation endpoint ()

    • Rewrite PinotQuery based on expression hints at instance/segment level ()

    • Allow disabling dict generation for High cardinality columns ()

    • add segment size metric on segment push ()

    • Implement Native Text Operator ()

    • Change default memory allocation for consuming segments from on-heap to off-heap ()

    • New Pinot storage metrics for compressed tar.gz and table size w/o replicas ()

    • add a experiment API for upsert heap memory estimation ()

    • Timestamp type index ()

    • Upgrade Helix to 1.0.4 in Pinot ()

    • Allow overriding expression in query through query config ()

    • Always handle null time values ()

    • Add prefixesToRename config for renaming fields upon ingestion ()

    • Added multi column partitioning for offline table ()

    • Automatically update broker resource on broker changes ()

    hashtag
    Vulnerability fixs

    Pinot has resolved all the high-level vulnerabilities issues:

    • Add a new workflow to check vulnerabilities using trivy (#9044arrow-up-right)

    • Disable Groovy function by default (#8711arrow-up-right)

    • Upgrade netty due to security vulnerability (#8328arrow-up-right)

    • Upgrade protobuf as the current version has security vulnerability ()

    • Upgrade to hadoop 2.10.1 due to cves ()

    • Upgrade Helix to 1.0.4 ()

    • Upgrade thrift to 0.15.0 ()

    • Upgrade jetty due to security issue ()

    • Upgrade netty ()

    • Upgrade snappy version ()

    hashtag
    Bug fixs

    • Nested arrays and map not handled correctly for complex types (#9235arrow-up-right)

    • Fix empty data block not returning schema (#9222arrow-up-right)

    • Allow mvn build with development webpack; fix instances default value (#9179arrow-up-right)

    • Fix the race condition of reflection scanning classes ()

    • Fix ingress manifest for controller and broker ()

    • Fix jvm processors count ()

    • Fix grpc query server not setting max inbound msg size ()

    • Fix upsert replace ()

    • Fix the race condition for partial upsert record read ()

    • Fix log msg, as it missed one param value ()

    • Fix authentication issue when auth annotation is not required ()

    • Fix segment pruning that can break server subquery ()

    • Fix the NPE for ADLSGen2PinotFS ()

    • Fix cross merge ()

    • Fix LaunchDataIngestionJobCommand auth header ()

    • Fix catalog skipping ()

    • Fix adding util for getting URL from InstanceConfig ()

    • Fix string length in MutableColumnStatistics ()

    • Fix instance details page loading table for tenant ()

    • Fix thread safety issue with java client ()

    • Fix allSegmentLoaded check ()

    • Fix bug in segmentDetails table name parsing; style the new indexes table ()

    • Fix pulsar close bug ()

    • Fix REGEX OPTION parser ()

    • Avoid reporting negative values for server latency. ()

    • Fix getConfigOverrides in MinionQuickstart ()

    • Fix segment generation error handling ()

    • Fix multi stage engine serde ()

    • Fix server discovery ()

    • Fix Upsert config validation to check for metrics aggregation ()

    • Fix multi value column index creation ()

    • Fix grpc port assignment in multiple server quickstart ()

    • Spark Connector GRPC reader fix for reading real-time tables ()

    • Fix auth provider for minion ()

    • Fix metadata push mode in IngestionUtils ()

    • Misc fixes on segment validation for uploaded real-time segments ()

    • Fix a typo in ServerInstance.startQueryServer() ()

    • Fix the issue of server opening up query server prematurely ()

    • Fix regression where case order was reversed, add regression test ()

    • Fix dimension table load when server restart or reload table ()

    • Fix when there're two index filter operator h3 inclusion index throw exception ()

    • Fix the race condition of reading time boundary info ()

    • Fix pruning in expressions by max/min/bloom ()

    • Fix GcsPinotFs listFiles by using bucket directly ()

    • Fix column data type store for data table ()

    • Fix the potential NPE for timestamp index rewrite ()

    • Fix on timeout string format in KinesisDataProducer ()

    • Fix bug in segment rebalance with replica group segment assignment ()

    • Fix the upsert metadata bug when adding segment with same comparison value ()

    • Fix the deadlock in ClusterChangeMediator ()

    • Fix BigDecimal ser/de on negative scale ()

    • Fix table creation bug for invalid real-time consumer props ()

    • Fix the bug of missing dot to extract sub props from ingestion job filesytem spec and minion segmentNameGeneratorSpec ()

    • Fix to query inconsistencies under heavy upsert load (resolves ) ()

    • Fix ChildTraceId when using multiple child threads, make them unique ()

    • Fix the group-by reduce handling when query times out ()

    • Fix a typo in BaseBrokerRequestHandler ()

    • Fix TIMESTAMP data type usage during segment creation ()

    • Fix async-profiler install ()

    • Fix ingestion transform config bugs. ()

    • Fix upsert inconsistency by snapshotting the validDocIds before reading the numDocs ()

    • Fix bug when importing files with the same name in different directories ()

    • Fix the missing NOT handling ()

    • Fix setting of metrics compression type in RealtimeSegmentConverter ()

    • Fix segment status checker to skip push in-progress segments ()

    • Fix datetime truncate for multi-day ()

    • Fix redirections for routes with access-token ()

    • Fix CSV files surrounding space issue ()

    • Fix suppressed exceptions in GrpcBrokerRequestHandler()

    The release was cut from the following commit:

    and the following cherry-picks:

    • b527af3arrow-up-right

    • 84d59e3arrow-up-right

    • a18dc60arrow-up-right

    hashtag
    Notable New Features

    • Add a server metric: queriesDisabled to check if queries disabled or not. (#6586arrow-up-right)

    • Optimization on GroupKey to save the overhead of ser/de the group keys (#6593arrow-up-right) (#6559arrow-up-right)

    • Support validation for jsonExtractKey and jsonExtractScalar functions () ()

    • Real Time Provisioning Helper tool improvement to take data characteristics as input instead of an actual segment ()

    • Add the isolation level config isolation.level to Kafka consumer (2.0) to ingest transactionally committed messages only ()

    • Enhance StarTreeIndexViewer to support multiple trees ()

    • Improves ADLSGen2PinotFS with service principal based auth, auto create container on initial run. It's backwards compatible with key based auth. ()

    • Add metrics for minion tasks status ()

    • Use minion data directory as tmp directory for SegmentGenerationAndPushTask to ensure directory is always cleaned up ()

    • Add optional HTTP basic auth to pinot broker, which enables user- and table-level authentication of incoming queries. ()

    • Add Access Control for REST endpoints of Controller ()

    • Add date_trunc to scalar functions to support date_trunc during ingestion ()

    • Allow tar gz with > 8gb size ()

    • Add Lookup UDF Join support (), (), () ()

    • Add cron scheduler metrics reporting ()

    • Support generating derived column during segment load, so that derived columns can be added on-the-fly ()

    • Support chained transform functions ()

    • Add scalar function JsonPathArray to extract arrays from json ()

    • Add a guard against multiple consuming segments for same partition ()

    • Remove the usage of deprecated range delimiter ()

    • Handle scheduler calls with proper response when it's disabled. ()

    • Simplify SegmentGenerationAndPushTask handling getting schema and table config ()

    • Add a cluster config to config number of concurrent tasks per instance for minion task: SegmentGenerationAndPushTaskGenerator ()

    • Replace BrokerRequestOptimizer with QueryOptimizer to also optimize the PinotQuery ()

    • Add additional string scalar functions ()

    • Add additional scalar functions for array type ()

    • Add CRON scheduler for Pinot tasks ()

    • Set default Data Type while setting type in Add Schema UI dialog ()

    • Add ImportData sub command in pinot admin ()

    • H3-based geospatial index () ()

    • Add JSON index support () () ()

    • Make minion tasks pluggable via reflection ()

    • Add compatibility test for segment operations upload and delete ()

    • Add segment reset API that disables and then enables the segment ()

    • Add Pinot minion segment generation and push task. ()

    • Add a version option to pinot admin to show all the component versions ()

    • Add FST index using lucene lib to speedup REGEXP_LIKE operator on text ()

    • Add APIs for uploading data to an offline table. ()

    • Allow the use of environment variables in stream configs ()

    • Enhance task schedule api for single type/table support ()

    • Add broker time range based pruner for routing. Query operators supported: RANGE, =, <, <=, >, >=, AND, OR()

    • Add json path functions to extract values from json object ()

    • Create a pluggable interface for Table config tuner ()

    • Add a Controller endpoint to return table creation time ()

    • Add tooltips, ability to enable-disable table state to the UI ()

    • Add Pinot Minion client ()

    • Add more efficient use of RoaringBitmap in OnHeapBitmapInvertedIndexCreator and OffHeapBitmapInvertedIndexCreator ()

    • Add decimal percentile support. ()

    • Add API to get status of consumption of a table ()

    • Add support to add offline and real-time tables, individually able to add schema and schema listing in UI ()

    • Improve performance for distinct queries ()

    • Allow adding custom configs during the segment creation phase ()

    • Use sorted index based filtering only for dictionary encoded column ()

    • Enhance forward index reader for better performance ()

    • Support for text index without raw ()

    • Add api for cluster manager to get table state ()

    • Perf optimization for SQL GROUP BY ORDER BY ()

    • Add support using environment variables in the format of ${VAR_NAME:DEFAULT_VALUE} in Pinot table configs. ()

    hashtag
    Special notes

    • Pinot controller metrics prefix is fixed to add a missing dot (#6499arrow-up-right). This is a backward-incompatible change that JMX query on controller metrics must be updated

    • Legacy group key delimiter (\t) was removed to be backward-compatible with release 0.5.0 (#6589arrow-up-right)

    • Upgrade zookeeper version to 3.5.8 to fix ZOOKEEPER-2184: Zookeeper Client should re-resolve hosts when connection attempts fail. (#6558arrow-up-right)

    • Add TLS-support for client-pinot and pinot-internode connections () Upgrades to a TLS-enabled cluster can be performed safely and without downtime. To achieve a live-upgrade, go through the following steps:

      • First, configure alternate ingress ports for https/netty-tls on brokers, controllers, and servers. Restart the components with a rolling strategy to avoid cluster downtime.

      • Second, verify manually that https access to controllers and brokers is live. Then, configure all components to prefer TLS-enabled connections (while still allowing unsecured access). Restart the individual components.

    • PQL endpoint on Broker is deprecated ()

      • Apache Pinot has adopted SQL syntax and semantics. Legacy PQL (Pinot Query Language) is deprecated and no longer supported. Use SQL syntax to query Pinot on broker endpoint /query/sql and controller endpoint /sql

    hashtag
    Major Bug fixes

    • Fix the SIGSEGV for large index (#6577arrow-up-right)

    • Handle creation of segments with 0 rows so segment creation does not fail if data source has 0 rows. (#6466arrow-up-right)

    • Fix QueryRunner tool for multiple runs (#6582arrow-up-right)

    • Use URL encoding for the generated segment tar name to handle characters that cannot be parsed to URI. ()

    • Fix a bug of miscounting the top nodes in StarTreeIndexViewer ()

    • Fix the raw bytes column in real-time segment ()

    • Fixes a bug to allow using JSON_MATCH predicate in SQL queries ()

    • Fix the overflow issue when loading the large dictionary into the buffer ()

    • Fix empty data table for distinct query ()

    • Fix the default map return value in DictionaryBasedGroupKeyGenerator ()

    • Fix log message in ControllerPeriodicTask ()

    • Fix bug : RealtimeTableDataManager shuts down SegmentBuildTimeLeaseExtender for all tables in the host ()

    • Fix license headers and plugin checks

    78152cdarrow-up-right

    0.10.0

    hashtag
    Summary

    This release introduces some new great features, performance enhancements, UI improvements, and bug fixes which are described in details in the following sections. The release was cut from this commit fd9c58aarrow-up-right.

    hashtag
    Dependency Graph

    The dependency graph for plug-and-play architecture that was introduced in release has been extended and now it contains new nodes for Pinot Segment SPI.

    hashtag
    SQL Improvements

    • Implement NOT Operator

    • Add DistinctCountSmartHLLAggregationFunction which automatically store distinct values in Set or HyperLogLog based on cardinality

    • Add LEAST and GREATEST functions

    hashtag
    UI Enhancements

    • Show Reported Size and Estimated Size in human readable format in UI

    • Make query console state URL based

    • Improve query console to not show query result when multiple columns have the same name

    hashtag
    Performance Improvements

    • Reuse regex matcher in dictionary based LIKE queries

    • Early terminate orderby when columns already sorted

    • Do not do another pass of Query Automaton Minimization

    hashtag
    Other Notable Features

    • Adding NoopPinotMetricFactory and corresponding changes

    • Allow to specify fixed segment name for SegmentProcessorFramework

    • Move all prestodb dependencies into a separated module

    hashtag
    Major Bug Fixes

    • Fix string comparisons

    • Bugfix for order-by all sorted optimization

    • Fix dockerfile

    hashtag
    Backward Incompatible Changes

    • Fix the issue with HashCode partitioning function

    • Fix the issue with validation on table creation

    • Change PinotFS API's

    Apache Pinot™ 1.0.0 release notes

    This page covers the latest changes included in the Apache Pinot™ 1.0.0 release, including new features, enhancements, and bug fixes.

    hashtag
    1.0.0 (2023-09-19)

    This release includes the several new features, enhancements, and bug fixes, including the following highlights:

    • Multi-stage query engine: , , and . Learn how to or more about how the works.

    hashtag
    Multi-stage query engine new features

    • Support for

      • Initial (phase 1) Query runtime for window functions with ORDER BY within the OVER() clause (#10449)

    hashtag
    Multi-stage query engine enhancements

    • Turn on v2 engine by default ()

    • Introduced the ability to stream leaf stage blocks for more efficient data processing ().

    • Early terminate SortOperator if there is a limit ()

    hashtag
    Multi-stage query engine bug fixes

    • Fix Predicate Pushdown by Using Rule Collection ()

    • Try fixing mailbox cancel race condition ()

    • Catch Throwable to Propagate Proper Error Message ()

    hashtag
    Index SPI

    • Add the ability to include new index types at runtime in Apache Pinot. This opens the ability of adding third party indexes, including proprietary indexes. More details

    hashtag
    Null value support for pinot queries

    • NULL support for ORDER BY, DISTINCT, GROUP BY, value transform functions and filtering.

    hashtag
    Upsert enhancements

    Delete support in upsert enabled tables ()

    Support added to extend upserts and allow deleting records from a realtime table. The design details can be found .

    Preload segments with upsert snapshots to speedup table loading ()

    Adds a feature to preload segments from a table that uses the upsert snapshot feature. The segments with validDocIds snapshots can be preloaded in a more efficient manner to speed up the table loading (thus server restarts).

    TTL configs for upsert primary keys ()

    Adds support for specifying expiry TTL for upsert primary key metadata cleanup.

    Segment compaction for upsert real-time tables ()

    Adds a new minion task to compact segments belonging to a real-time table with upserts.

    hashtag
    Pinot Spark Connector for Spark3 ()

    • Added spark3 support for Pinot Spark Connector ()

    • Also added support to pass pinot query options to spark connector ()

    hashtag
    PinotDataBufferFactory and new PinotDataBuffer implementations ()

    Adds new implementations of PinotDataBuffer that uses Unsafe java APIs and foreign memory APIs. Also added support for PinotDataBufferFactory to allow plugging in custom PinotDataBuffer implementations.

    hashtag
    Query functions enhancements

    • Add PercentileKLL aggregation function ()

    • Support for ARG_MIN and ARG_MAX Functions ()

    • refactor argmin/max to exprmin/max and make it calcite compliant ()

    hashtag
    JSON and CLP encoded message ingestion and querying

    • Add clpDecode transform function for decoding CLP-encoded fields. ()

    • Add CLPDecodeRewriter to make it easier to call clpDecode with a column-group name rather than the individual columns. ()

    • Add SchemaConformingTransformer to transform records with varying keys to fit a table's schema without dropping fields. ()

    hashtag
    Tier level index config override ()

    • Allows overriding index configs at tier level, allowing for more flexible index configurations for different tiers.

    hashtag
    Ingestion connectors and features

    • Kinesis stream header extraction ()

    • Extract record keys, headers and metadata from Pulsar sources ()

    • Realtime pre-aggregation for Distinct Count HLL & Big Decimal ()

    hashtag
    UI enhancements

    • Adds persistence of authentication details in the browser session. This means that even if you refresh the app, you will still be logged in until the authentication session expires ()

    • AuthProvider logic updated to decode the access token and extract user name and email. This information will now be available in the app for features to consume. ()

    hashtag
    Pinot docker image improvements and enhancements

    • Make Pinot base build and runtime images support Amazon Corretto and MS OpenJDK ()

    • Support multi-arch pinot docker image ()

    • Update dockerfile with recent jdk distro changes ()

    hashtag
    Operational improvements

    Rebalance

    • Rebalance status API ()

    • Tenant level rebalance API Tenant rebalance and status tracking APIs ()

    Config to use customized broker query thread pool ()

    Added new configuration options below which allow use of a bounded thread pool and allocate capacities for it.

    This feature allows better management of broker resources.

    Drop results support ()

    Adds a parameter to queryOptions to drop the resultTable from the response. This mode can be used to troubleshoot a query (which may have sensitive data in the result) using metadata only.

    Make column order deterministic in segment ()

    In segment metadata and index map, store columns in alphabetical order so that the result is deterministic. Segments generated before/after this PR will have different CRC, so during the upgrade, we might get segments with different CRC from old and new consuming servers. For the segment consumed during the upgrade, some downloads might be needed.

    Allow configuring helix timeouts for EV dropped in Instance manager ()

    Adds options to configure helix timeouts external.view.dropped.max.wait.ms`` - The duration of time in milliseconds to wait for the external view to be dropped. Default - 20 minutes. external.view.check.interval.ms`` - The period in milliseconds in which to ping ZK for latest EV state.

    Enable case insensitivity by default ()

    This PR makes Pinot case insensitive be default, and removes the deprecated property enable.case.insensitive.pql

    Newly added APIs and client methods

    • Add Server API to get tenant pools ()

    • Add new broker query point for querying multi-stage engine ()

    • Add a new controller endpoint for segment deletion with a time window ()

    hashtag
    Cleanup and backward incompatible changes

    High level consumers are no longer supported

    • Cleanup HLC code ()

    • Remove support for High level consumers in Apache Pinot ()

    Type information preservation of query literals

    • [feature] [backward-incompat] [null support # 2] Preserve null literal information in literal context and literal transform () String versions of numerical values are no longer accepted. For example, "123" won't be treated as a numerical anymore.

    Controller job status ZNode path update

    • Moving Zk updates for reload, force_commit to their own Znodes which … () The status of previously completed reload jobs will not be available after this change is deployed.

    Metric names for mutable indexes to change

    • Implement mutable index using index SPI () Due to a change in the IndexType enum used for some logs and metrics in mutable indexes, the metric names may change slightly.

    Update in controller API to enable / disable / drop instances

    • Update getTenantInstances call for controller and separate POST operations on it ()

    Change in substring query function definition

    • Change substring to comply with standard sql definition ()

    hashtag
    Full list of features added

    • Allow queries on multiple tables of same tenant to be executed from controller UI

    • Encapsulate changes in IndexLoadingConfig and SegmentGeneratorConfig

    • [Index SPI] IndexType ()

    hashtag
    Vulnerability fixes, bugfixes, cleanups and deprecations

    • Remove support for High level consumers in Apache Pinot ()

    • Fix JDBC driver check for username ()

    • [Clean up] Remove getColumnName() from AggregationFunction interface ()

    0.3.0

    0.3.0 release of Apache Pinot introduces the concept of plugins that makes it easy to extend and integrate with other systems.

    hashtag
    What's the big change?

    The reason behind the architectural change from the previous release (0.2.0) and this release (0.3.0), is the possibility of extending Apache Pinot. The 0.2.0 release was not flexible enough to support new storage types nor new stream types. Basically, inserting a new functionality required to change too much code. Thus, the Pinot team went through an extensive refactoring and improvement of the source code.

    For instance, the picture below shows the module dependencies of the 0.2.X or previous releases. If we wanted to support a new storage type, we would have had to change several modules. Pretty bad, huh?

    select * FROM foo where text_col LIKE 'a%'
    select * from foo where text_col CONTAINS 'bar'

    Third, disable insecure connections via configuration. You may also have to set controller.vip.protocol and controller.vip.port and update the configuration files of any ingestion jobs. Restart components a final time and verify that insecure ingress via http is not available anymore.

    4ec38f7arrow-up-right
    b48dac0arrow-up-right
    5d2bc0carrow-up-right
    913492earrow-up-right
    50a4531arrow-up-right
    1f21403arrow-up-right
    8dbb70barrow-up-right
    #6246arrow-up-right
    #6594arrow-up-right
    #6546arrow-up-right
    #6580arrow-up-right
    #6569arrow-up-right
    #6531arrow-up-right
    #6549arrow-up-right
    #6560arrow-up-right
    #6552arrow-up-right
    #6507arrow-up-right
    #6538arrow-up-right
    #6533arrow-up-right
    #6530arrow-up-right
    #6465arrow-up-right
    #6383arrow-up-right
    #6286arrow-up-right
    #6502arrow-up-right
    #6494arrow-up-right
    #6495arrow-up-right
    #6490arrow-up-right
    #6483arrow-up-right
    #6475arrow-up-right
    #6474arrow-up-right
    #6469arrow-up-right
    #6468arrow-up-right
    #6423arrow-up-right
    #6458arrow-up-right
    #6446arrow-up-right
    #6451arrow-up-right
    #6452arrow-up-right
    #6396arrow-up-right
    #6409arrow-up-right
    #6306arrow-up-right
    #6408arrow-up-right
    #6216arrow-up-right
    #6346arrow-up-right
    #6395arrow-up-right
    #6382arrow-up-right
    #6336arrow-up-right
    #6340arrow-up-right
    #6380arrow-up-right
    #6120arrow-up-right
    #6354arrow-up-right
    #6373arrow-up-right
    #6352arrow-up-right
    #6259arrow-up-right
    #6347arrow-up-right
    #6255arrow-up-right
    #6331arrow-up-right
    #6327arrow-up-right
    #6339arrow-up-right
    #6320arrow-up-right
    #6323arrow-up-right
    #6322arrow-up-right
    #6296arrow-up-right
    #6285arrow-up-right
    #6299arrow-up-right
    #6288arrow-up-right
    #6262arrow-up-right
    #6284arrow-up-right
    #6211arrow-up-right
    #6225arrow-up-right
    #6271arrow-up-right
    #6418arrow-up-right
    #6607arrow-up-right
    #6571arrow-up-right
    #6569arrow-up-right
    #6574arrow-up-right
    #6535arrow-up-right
    #6476arrow-up-right
    #6363arrow-up-right
    #6712arrow-up-right
    #6709arrow-up-right
    #6671arrow-up-right
    #6682arrow-up-right
    Support for the ranking ROW_NUMBER() window function (#10527arrow-up-right, #10587arrow-up-right)
  • Set operations support:

    • Support SetOperations (UNION, INTERSECT, MINUS) compilation in query planner (#10535arrow-up-right)

  • Timestamp and Date Operations

  • Support TIMESTAMP type and date ops functions (#11350arrow-up-right)

  • Aggregate functions

    • Support more aggregation functions that are currently implementable (#11208arrow-up-right)

    • Support multi-value aggregation functions (#11216arrow-up-right)

  • Support Sketch based functions (#11153arrow-up-right), (#11517arrow-up-right)

  • Make Intermediate Stage Worker Assignment Tenant Aware (#10617arrow-up-right)

  • Evaluate literal expressions during query parsing, enabling more efficient query execution (#11438arrow-up-right)arrow-up-right

  • Added support for partition parallelism in partitioned table scans, allowing for more efficient data retrieval (#11266arrow-up-right)

  • [multistage]Adding more tuple sketch scalar functions and integration tests (#11517arrow-up-right)

  • Implement ordering for SortExchange (#10408arrow-up-right)

  • Table level Access Validation, QPS Quota, Phase Metrics for multistage queries (#10534arrow-up-right)

  • Support partition based leaf stage processing (#11234arrow-up-right)

  • Populate queryOption down to leaf (#10626arrow-up-right)

  • Pushdown explain plan queries from the controller to the broker (#10505arrow-up-right)

  • Enhanced the multi-stage group-by executor to support limiting the number of groups,

  • improving query performance and resource utilization (#11424arrow-up-right).

  • Improved resilience and reliability of the multi-stage join operator, now with added support for hash join right table protection (#11401arrow-up-right).

  • Fix tenant detection issues (#10546arrow-up-right)

  • Handle Integer.MIN_VALUE in hashCode based FieldSelectionKeySelector (#10596arrow-up-right)

  • Improve error message in case of non-existent table queried from the controller (#10599arrow-up-right)

  • Derive SUM return type to be PostgreSQL compatible (#11151arrow-up-right)

  • Integer Tuple Sketch support (#10427arrow-up-right)

  • Adding vector scalar functions (#11222arrow-up-right)

  • [feature] multi-value datetime transform variants (#10841arrow-up-right)

  • FUNNEL_COUNT Aggregation Function (#10867arrow-up-right)

  • [multistage] Add support for RANK and DENSE_RANK ranking window functions (#10700arrow-up-right)

  • add theta sketch scalar (#11153arrow-up-right)

  • Register dateTimeConverter,timeConvert,dateTrunc, regexpReplace to v2 functions (#11097arrow-up-right)

  • Add extract(quarter/dow/doy) support (#11388arrow-up-right)

  • Funnel Count - Multiple Strategies (no partitioning requisites) (#11092arrow-up-right)

  • Add Boolean assertion transform functions. (#11547arrow-up-right)

  • Added support to skip unparseable records in the csv record reader (#11487arrow-up-right)

  • Null support for protobuf ingestion. (#11553arrow-up-right)

  • New API to get tenant tags (#10937arrow-up-right)

  • Instance retag validation check api (#11077arrow-up-right)

  • Use PUT request to enable/disable table/instance (#11109arrow-up-right)

  • Update the pinot tenants tables api to support returning broker tagged tables (#11184arrow-up-right)

  • Add requestId for BrokerResponse in pinot-broker and java-client (#10943arrow-up-right)

  • Provide results in CompletableFuture for java clients and expose metrics (#10326arrow-up-right)

  • Simplify filtered aggregate transform operator creation (#10410arrow-up-right)

  • Introduce BaseProjectOperator and ValueBlock (#10405arrow-up-right)

  • Add support to create realtime segment in local (#10433arrow-up-right)

  • Refactor: Pass context instead on individual arguments to operator (#10413arrow-up-right)

  • Add "processAll" mode for MergeRollupTask (#10387arrow-up-right)

  • Upgrade h2 version from 1.x to 2.x (#10456arrow-up-right)

  • Added optional force param to the table configs update API (#10441arrow-up-right)

  • Enhance broker reduce to handle different column names from server response (#10454arrow-up-right)

  • Adding fields to enable/disable dictionary optimization. (#10484arrow-up-right)

  • Remove converted H2 type NUMERIC(200, 100) from BIG_DECIMAL (#10483arrow-up-right)

  • Add JOIN support to PinotQuery (#10421arrow-up-right)

  • Add testng on verifier (#10491arrow-up-right)

  • Clean up temp consuming segment files during server start (#10489arrow-up-right)

  • make pinot k8s sts and deployment start command configurable (#10509arrow-up-right)

  • Fix Bottleneck for Server Bootstrap by Making maxConnsPerRoute Configurable (#10487arrow-up-right)

  • Type match between resultType and function's dataType (#10472arrow-up-right)

  • create segment zk metadata cache (#10455arrow-up-right)

  • Allow ValueBlock length to increase in TransformFunction (#10515arrow-up-right)

  • Allow configuring helix timeouts for EV dropped in Instance manager (#10510arrow-up-right)

  • Enhance error reporting (#10531arrow-up-right)

  • Combine "GET /segments" API & "GET /segments/{tableName}/select" (#10412arrow-up-right)

  • Exposed the CSV header map as part of CSVRecordReader (#10542arrow-up-right)

  • Moving Zk updates for reload,force_commit to their own Znodes which will spread out Zk write load across jobTypes (#10451arrow-up-right)

  • Enabling dictionary override optimization on the segment reload path as well. (#10557arrow-up-right)

  • Make broker's rest resource packages configurable (#10588arrow-up-right)

  • Check EV not exist before allowing creating the table (#10593arrow-up-right)

  • Adding an parameter (toSegments) to the endSegmentReplacement API (#10630arrow-up-right)

  • update target tier for segments if tierConfigs is provided (#10642arrow-up-right)

  • Add support for custom compression factor for Percentile TDigest aggregation functions (#10649arrow-up-right)

  • Utility to convert table config into updated format (#10623arrow-up-right)

  • Segment lifecycle event listener support (#10536arrow-up-right)

  • Add server metrics to capture gRPC activity (#10678arrow-up-right)

  • Separate and parallelize BloomFilter based semgment pruner (#10660arrow-up-right)

  • API to expose the contract/rules imposed by pinot on tableConfig #10655arrow-up-right

  • Add description field to metrics in Pinot (#10744arrow-up-right)

  • changing the dedup store to become pluggable #10639arrow-up-right

  • Make the TimeUnit in the DATETRUNC function case insensitive. (#10750arrow-up-right)

  • [feature] Consider tierConfigs when assigning new offline segment #10746arrow-up-right

  • Compress idealstate according to estimated size #10766arrow-up-right

  • 10689: Update for pinot helm release version 0.2.7 (#10723arrow-up-right)

  • Fail the query if a filter's rhs contains NULL. (#11188arrow-up-right)

  • Support Off Heap for Native Text Indices (#10842arrow-up-right)

  • refine segment reload executor to avoid creating threads unbounded #10837arrow-up-right

  • compress nullvector bitmap upon seal (#10852arrow-up-right)

  • Enable case insensitivity by default (#10771arrow-up-right)

  • Push out-of-order events metrics for full upsert (#10944arrow-up-right)

  • [feature] add requestId for BrokerResponse in pinot-broker and java-client #10943arrow-up-right

  • Provide results in CompletableFuture for java clients and expose metrics #10326arrow-up-right

  • Add minion observability for segment upload/download failures (#10978arrow-up-right)

  • Enhance early terminate for combine operator (#10988arrow-up-right)

  • Add fromController method that accepts a PinotClientTransport (#11013arrow-up-right)

  • Ensure min/max value generation in the segment metadata. (#10891arrow-up-right)

  • Apply some allocation optimizations on GrpcSendingMailbox (#11015arrow-up-right)

  • When enable case-insensitive, don't allow to add newly column name which have the same lowercase name with existed columns. (#10991arrow-up-right)

  • Replace Long attributes with primitive values to reduce boxing (#11059arrow-up-right)

  • retry KafkaConsumer creation in KafkaPartitionLevelConnectionHandler.java (#253arrow-up-right) (#11040arrow-up-right)

  • Support for new dataTime format in DateTimeGranularitySpec without explicitly setting size (#11057arrow-up-right)

  • Returning 403 status code in case of authorization failures (#11136arrow-up-right)

  • Simplify compatible test to avoid test against itself (#11163arrow-up-right)

  • Updated code for setting value of segment min/max property. (#10990arrow-up-right)

  • Add stat to track number of segments that have valid doc id snapshots (#11110arrow-up-right)

  • Add brokerId and brokerReduceTimeMs to the broker response stats (#11142arrow-up-right)

  • safely multiply integers to prevent overflow (#11186arrow-up-right)

  • Move largest comparison value update logic out of map access (#11157arrow-up-right)

  • Optimize DimensionTableDataManager to abort unnecesarry loading (#11192arrow-up-right)

  • Refine isNullsLast and isAsc functions. (#11199arrow-up-right)

  • Update the pinot tenants tables api to support returning broker tagged tables (#11184arrow-up-right)

  • add multi-value support for native text index (#11204arrow-up-right)

  • Add percentiles report in QuerySummary (#11299arrow-up-right)

  • Add meter for broker responses with unavailable segments (#11301arrow-up-right)

  • Enhance Minion task management (#11315arrow-up-right)

  • add additional lucene index configs (#11354arrow-up-right)

  • Add DECIMAL data type to orc record reader (#11377arrow-up-right)

  • add configuration to fail server startup on non-good status checker (#11347arrow-up-right)

  • allow passing freshness checker after an idle threshold (#11345arrow-up-right)

  • Add broker validation for hybrid tableConfig creation (#7908arrow-up-right)

  • Support partition parallelism for partitioned table scan (#11266arrow-up-right)

  • fix jersey TerminalWriterInterceptor MessageBodyWriter not found issue (#10462arrow-up-right)

  • Bug fix: Start counting operator execution time from first NoOp block (#10450arrow-up-right)

  • Fix unavailable instances issues for StrictReplicaGroup (#10466arrow-up-right)

  • Change shell to bash (#10469arrow-up-right)

  • Fix the double destroy of segment data manager during server shutdown (#10475arrow-up-right)

  • Remove "isSorted()" precondition check in the ForwardIndexHandler (#10476arrow-up-right)

  • Fix null handling in streaming selection operator (#10453arrow-up-right)

  • Fix jackson dependencies (#10477arrow-up-right)

  • Startree index build enhancement (#10905arrow-up-right)

  • optimize queries where lhs and rhs of predicate are equal (#10444arrow-up-right)

  • Trivial fix on a warning detected by static checker (#10492arrow-up-right)

  • wait for full segment commit protocol on force commit (#10479arrow-up-right)

  • Fix bug and add test for noDict -> Dict conversion for sorted column (#10497arrow-up-right)

  • Make column order deterministic in segment (#10468arrow-up-right)

  • Type match between resultType and function's dataType (#10472arrow-up-right)

  • Allow empty segmentsTo for segment replacement protocol (#10511arrow-up-right)

  • Use string as default compatible type for coalesce (#10516arrow-up-right)

  • Use threadlocal variable for genericRow to make the MemoryOptimizedTable threadsafe (#10502arrow-up-right)

  • Fix shading in spark2 connector pom file (#10490arrow-up-right)

  • Fix ramping delay caused by long lasting sequence of unfiltered messa… (#10418arrow-up-right)

  • Do not serialize metrics in each Operator (#10473arrow-up-right)

  • Make pinot-controller apply webpack production mode when bin-dist profile is used. (#10525arrow-up-right)

  • Fix FS props handling when using /ingestFromUri (#10480arrow-up-right)

  • Clean up v0_deprecated batch ingestion jobs (#10532arrow-up-right)

  • Deprecate kafka 0.9 support (#10522arrow-up-right)

  • safely multiply integers to prevent overflow (#11186arrow-up-right)

  • Reduce timeout for codecov and not fail the job in any case (#10547arrow-up-right)

  • Fix DataTableV3 serde bug for empty array (#10583arrow-up-right)

  • Do not record operator stats when tracing is enabled (#10447arrow-up-right)

  • Forward auth token for logger APIs from controller to other controllers and brokers (#10590arrow-up-right)

  • Bug fix: Partial upsert default strategy is null (#10610arrow-up-right)

  • Fix flaky test caused by EV check during table creation (#10616arrow-up-right)

  • Fix withDissabledTrue typo (#10624arrow-up-right)

  • Cleanup unnecessary mailbox id ser/de (#10629arrow-up-right)

  • no error metric for queries where all segments are pruned (#10589arrow-up-right)

  • bug fix: to keep QueryParser thread safe when handling many read requests on class RealtimeLuceneTextIndex (#10620arrow-up-right)

  • Fix static DictionaryIndexConfig.DEFAULT_OFFHEAP being actually onheap (#10632arrow-up-right)

  • 10567: [cleanup pinot-integration-test-base], clean query generations and some other refactoring. (#10648arrow-up-right)

  • Fixes backward incompatability with SegmentGenerationJobSpec for segment push job runners (#10645arrow-up-right)

  • Bug fix to get the toSegments list correctly (#10659arrow-up-right)

  • 10661: Fix for failing numeric comparison in where clause for IllegalStateException. (#10662arrow-up-right)

  • Fixes partial upsert not reflecting multiple comparison column values (#10693arrow-up-right)

  • Fix Bug in Reporting Timer Value for Min Consuming Freshness (#10690arrow-up-right)

  • Fix typo of rowSize -> columnSize (#10699arrow-up-right)

  • update segment target tier before table rebalance (#10695arrow-up-right)

  • Fix a bug in star-tree filter operator which can incorrecly filter documents (#10707arrow-up-right)

  • Enhance the instrumentation for a corner case where the query doesn't go through DocIdSetOp (#10729arrow-up-right)

  • bug fix: add missing properties when edit instance config (#10741arrow-up-right)

  • Making segmentMapper do the init and cleanup of RecordReader (#10874arrow-up-right)

  • Fix githubEvents table for quickstart recipes (#10716arrow-up-right)

  • Minor Realtime Segment Commit Upload Improvements (#10725arrow-up-right)

  • Return 503 for all interrupted queries. Refactor the query killing code. (#10683arrow-up-right)

  • Add decoder initialization error to the server's error cache (#10773arrow-up-right)

  • bug fix: add @JsonProperty to SegmentAssignmentConfig (#10759arrow-up-right)

  • ensure we wait the full no query timeout before shutting down (#10784arrow-up-right)

  • Clean up KLL functions with deprecated convention (#10795arrow-up-right)

  • Redefine the semantics of SEGMENT_STREAMED_DOWNLOAD_UNTAR_FAILURES metric to count individual segment fetch failures. (#10777arrow-up-right)

  • fix excpetion during exchange routing causes stucked pipeline (#10802arrow-up-right)

  • [bugfix] fix floating point and integral type backward incompatible issue (#10650arrow-up-right)

  • [pinot-core] Start consumption after creating segment data manager (#11227arrow-up-right)

  • Fix IndexOutOfBoundException in filtered aggregation group-by (#11231arrow-up-right)

  • Fix null pointer exception in segment debug endpoint #11228arrow-up-right

  • Clean up RangeIndexBasedFilterOperator. (#11219arrow-up-right)

  • Fix the escape/unescape issue for property value in metadata (#11223arrow-up-right)

  • Fix a bug in the order by comparator (#10818arrow-up-right)

  • Keeps nullness attributes of merged in comparison column values (#10704arrow-up-right)

  • Add required JSON annotation in H3IndexResolution (#10792arrow-up-right)

  • Fix a bug in SELECT DISTINCT ORDER BY. (#10827arrow-up-right)

  • jsonPathString should return null instead of string literal "null" (#10855arrow-up-right)

  • Bug Fix: Segment Purger cannot purge old segments after schema evolution (#10869arrow-up-right)

  • Fix #10713arrow-up-right by giving metainfo more priority than config (#10851arrow-up-right)

  • Close PinotFS after Data Manager Shutdowns (#10888arrow-up-right)

  • bump awssdk version for a bugfix on http conn leakage (#10898arrow-up-right)

  • Fix MultiNodesOfflineClusterIntegrationTest.testServerHardFailure() (#10909arrow-up-right)

  • Fix a bug in SELECT DISTINCT ORDER BY LIMIT. (#10887arrow-up-right)

  • Fix an integer overflow bug. (#10940arrow-up-right)

  • Return true when _resultSet is not null (#10899arrow-up-right)

  • Fixing table name extraction for lateral join queries (#10933arrow-up-right)

  • Fix casting when prefetching mmap'd segment larger than 2GB (#10936arrow-up-right)

  • Null check before closing reader (#10954arrow-up-right)

  • Fixes SQL wildcard escaping in LIKE queries (#10897arrow-up-right)

  • [Clean up] Do not count DISTINCT as aggregation (#10985arrow-up-right)

  • do not readd lucene readers to queue if segment is destroyed #10989arrow-up-right

  • Message batch ingestion lag fix (#10983arrow-up-right)

  • Fix a typo in snapshot lock (#11007arrow-up-right)

  • When extracting root-level field name for complex type handling, use the whole delimiter (#11005arrow-up-right)

  • update jersey to fix Denial of Service (DoS) (#11021arrow-up-right)

  • Update getTenantInstances call for controller and separate POST operations on it (#10993arrow-up-right)

  • update freemaker to fix Server-side Template Injection (#11019arrow-up-right)

  • format double 0 properly to compare with h2 results (#11049arrow-up-right)

  • Fix double-checked locking in ConnectionFactory (#11014arrow-up-right)

  • Remove presto-pinot-driver and pinot-java-client-jdk8 module (#11051arrow-up-right)

  • Make RequestUtils always return a string array when getTableNames (#11069arrow-up-right)

  • Fix BOOL_AND and BOOL_OR result type (#11033arrow-up-right)

  • [cleanup] Consolidate some query and controller/broker methods in integration tests (#11064arrow-up-right)

  • Fix grpc regression on multi-stage engine (#11086arrow-up-right)

  • Delete an obsolete TODO. (#11080arrow-up-right)

  • Minor fix on AddTableCommand.toString() (#11082arrow-up-right)

  • Allow using Lucene text indexes on mutable MV columns. (#11093arrow-up-right)

  • Allow offloading multiple segments from same table in parallel (#11107arrow-up-right)

  • Added serviceAccount to minion-stateless (#11095arrow-up-right)

  • Bug fix: TableUpsertMetadataManager is null (#11129arrow-up-right)

  • Fix reload bug (#11131arrow-up-right)

  • Allow extra aggregation types in RealtimeToOfflineSegmentsTask (#10982arrow-up-right)

  • Fix a bug when use range index to solve EQ predicate (#11146arrow-up-right)

  • Sanitise API inputs used as file path variables (#11132arrow-up-right)

  • Fix NPE when nested query doesn't have gapfill (#11155arrow-up-right)

  • Fix the NPE when query response error stream is null (#11154arrow-up-right)

  • Make interface methods non private, for java 8 compatibility (#11164arrow-up-right)

  • Increment nextDocId even if geo indexing fails (#11158arrow-up-right)

  • Fix the issue of consuming segment entering ERROR state due to stream connection errors (#11166arrow-up-right)

  • In TableRebalancer, remove instance partitions only when reassigning instances (#11169arrow-up-right)

  • Remove JDK 8 unsupported code (#11176arrow-up-right)

  • Fix compat test by adding -am flag to build pinot-integration-tests (#11181arrow-up-right)

  • dont duplicate register scalar function in CalciteSchema (#11190arrow-up-right)

  • Fix the storage quota check for metadata push (#11193arrow-up-right)

  • Delete filtering NULL support dead code paths. (#11198arrow-up-right)

  • [bugfix] Do not move real-time segments to working dir on restart (#11226arrow-up-right)

  • Fix a bug in ExpressionScanDocIdIterator for multi-value. (#11253arrow-up-right)

  • Exclude NULLs when PredicateEvaluator::isAlwaysTrue is true. (#11261arrow-up-right)

  • UI: fix sql query options seperator (#10770arrow-up-right)

  • Fix a NullPointerException bug in ScalarTransformFunctionWrapper. (#11309arrow-up-right)

  • [refactor] improve disk read for partial upsert handler (#10927arrow-up-right)

  • Fix the wrong query time when the response is empty (#11349arrow-up-right)

  • getMessageAtIndex should actually return the value in the streamMessage for compatibility (#11355arrow-up-right)

  • Remove presto jdk8 related dependencies (#11285arrow-up-right)

  • Remove special routing handling for multiple consuming segments (#11371arrow-up-right)

  • Properly handle shutdown of TableDataManager (#11380arrow-up-right)

  • Fixing the stale pinot ServerInstance in _tableTenantServersMap (#11386arrow-up-right)

  • Fix the thread safety issue for mutable forward index (#11392arrow-up-right)

  • Fix RawStringDistinctExecutor integer overflow (#11403arrow-up-right)

  • [logging] fix consume rate logging bug to respect 1 minute threshold (#11421arrow-up-right)

  • new features
    enhancements
    bug fixes
    enable and use the multi-stage query engine
    multi-stage query engine
    window functions
    #10543arrow-up-right
    #11472arrow-up-right
    #11334arrow-up-right
    #10409arrow-up-right
    #10432arrow-up-right
    #10438arrow-up-right
    herearrow-up-right
    #10703arrow-up-right
    herearrow-up-right
    #11020arrow-up-right
    #10915arrow-up-right
    #10463arrow-up-right
    #10394arrow-up-right
    #10394arrow-up-right
    #10443arrow-up-right
    #10528arrow-up-right
    #10643arrow-up-right
    #10636arrow-up-right
    #11296arrow-up-right
    #10885arrow-up-right
    #11006arrow-up-right
    #11210arrow-up-right
    #10553arrow-up-right
    #9713arrow-up-right
    #10995arrow-up-right
    #10926arrow-up-right
    #10389arrow-up-right
    #10925arrow-up-right
    #10422arrow-up-right
    #10429arrow-up-right
    #10963arrow-up-right
    #10359arrow-up-right
    #11128arrow-up-right
    #10614arrow-up-right
    #10419arrow-up-right
    #10468arrow-up-right
    #10510arrow-up-right
    #10771arrow-up-right
    #11273arrow-up-right
    #11341arrow-up-right
    #10758arrow-up-right
    #11326arrow-up-right
    #11017arrow-up-right
    #10380arrow-up-right
    #10451arrow-up-right
    #10687arrow-up-right
    #10993arrow-up-right
    #11502arrow-up-right
    #10336arrow-up-right
    #10352arrow-up-right
    #10191arrow-up-right
    #11017arrow-up-right
    #10416arrow-up-right
    #10431arrow-up-right
    pinot.broker.enable.bounded.http.async.executor
    pinot.broker.http.async.executor.max.pool.size
    pinot.broker.http.async.executor.core.pool.size
    pinot.broker.http.async.executor.queue.size

    Handle SELECT * with extra columns (#7959)arrow-up-right

  • Add FILTER clauses for aggregates (#7916)arrow-up-right

  • Add ST_Within function (#7990)arrow-up-right

  • Handle semicolon in query (#7861)arrow-up-right

  • Add EXPLAIN PLAN (#7568)arrow-up-right

  • Improve Pinot dashboard tenant view to show correct amount of servers and brokers (#8115)arrow-up-right

  • Fix issue with opening new tabs from Pinot Dashboard (#8021)arrow-up-right

  • Fix issue with Query console going blank on syntax error (#8006)arrow-up-right

  • Make query stats always show even there's error (#7981)arrow-up-right

  • Implement OIDC auth workflow in UI (#7121)arrow-up-right

  • Add tooltip and modal for table status (#7899)arrow-up-right

  • Add option to wrap lines in custom code mirror (#7857)arrow-up-right

  • Add ability to comment out queries with cmd + / (#7841)arrow-up-right

  • Return exception when unavailable segments on empty broker response (#7823)arrow-up-right

  • Properly handle the case where segments are missing in externalview (#7803)arrow-up-right

  • Add TIMESTAMP to datetime column Type (#7746)arrow-up-right

  • Improve RangeBitmap by upgrading RoaringBitmap (#8206)arrow-up-right

  • Optimize geometry serializer usage when literal is available (#8167)arrow-up-right

  • Improve performance of no-dictionary group by (#8195)arrow-up-right

  • Allocation free DataBlockCache lookups (#8140)arrow-up-right

  • Prune unselected THEN statements in CaseTransformFunction (#8138)arrow-up-right

  • Aggregation delay conversion to double (#8139)arrow-up-right

  • Reduce object allocation rate in ExpressionContext or FunctionContext (#8124)arrow-up-right

  • Lock free DimensionDataTableManager (#8102)arrow-up-right

  • Improve json path performance during ingestion by upgrading JsonPath (#7819)arrow-up-right

  • Reduce allocations and speed up StringUtil.sanitizeString (#8013)arrow-up-right

  • Faster metric scans - ForwardIndexReader (#7920)arrow-up-right

  • Unpeel group by 3 ways to enable vectorization (#7949)arrow-up-right

  • Power of 2 fixed size chunks (#7934)arrow-up-right

  • Don't use mmap for compression except for huge chunks (#7931)arrow-up-right

  • Exit group-by marking loop early (#7935)arrow-up-right

  • Improve performance of base chunk forward index write (#7930)arrow-up-right

  • Cache JsonPaths to prevent compilation per segment (#7826)arrow-up-right

  • Use LZ4 as default compression mode (#7797)arrow-up-right

  • Peel off special case for 1 dimensional groupby (#7777)arrow-up-right

  • Bump roaringbitmap version to improve range queries performance (#7734)arrow-up-right

  • Include docIds in Projection and Transform block (#8262)arrow-up-right

  • Automatically update broker resource on broker changes (#8249)arrow-up-right

  • Update ScalarFunction annotation from name to names to support function alias. (#8252)arrow-up-right

  • Implemented BoundedColumnValue partition function (#8224)arrow-up-right

  • Add copy recursive API to pinotFS (#8200)arrow-up-right

  • Add Support for Getting Live Brokers for a Table (without type suffix) (#8188)arrow-up-right

  • Pinot docker image - cache prometheus rules (#8241)arrow-up-right

  • In BrokerRequestToQueryContextConverter, remove unused filterExpressionContext (#8238)arrow-up-right

  • Adding retention period to segment delete REST API (#8122)arrow-up-right

  • Pinot docker image - upgrade prometheus and scope rulesets to components (#8227)arrow-up-right

  • Allow segment name postfix for SegmentProcessorFramework (#8230)arrow-up-right

  • Superset docker image - update pinotdb version in superset image (#8231)arrow-up-right

  • Add retention period to deleted segment files and allow table level overrides (#8176)arrow-up-right

  • Remove incubator from pinot and superset (#8223)arrow-up-right

  • Adding table config overrides for disabling groovy (#8196)arrow-up-right

  • Optimise sorted docId iteration order in mutable segments (#8213)arrow-up-right

  • Adding secure grpc query server support (#8207)arrow-up-right

  • Move Tls configs and utils from pinot-core to pinot-common (#8210)arrow-up-right

  • Reduce allocation rate in LookupTransformFunction (#8204)arrow-up-right

  • Allow subclass to customize what happens pre/post segment uploading (#8203)arrow-up-right

  • Enable controller service auto-discovery in Jersey framework (#8193)arrow-up-right

  • Add support for pushFileNamePattern in pushJobSpec (#8191)arrow-up-right

  • Add additionalMatchLabels to helm chart (#7177)arrow-up-right

  • Simulate rsvps after meetup.com retired the feed (#8180)arrow-up-right

  • Adding more checkstyle rules (#8197)arrow-up-right

  • Add persistence.extraVolumeMounts and persistence.extraVolumes to Kubernetes statefulsets (#7486)arrow-up-right

  • Adding scala profile for kafka 2.x build and remove root pom scala dependencies (#8174)arrow-up-right

  • Allow real-time data providers to accept non-kafka producers (#8190)arrow-up-right

  • Enhance revertReplaceSegments api (#8166)arrow-up-right

  • Adding broker level config for disabling Pinot queries with Groovy (#8159)arrow-up-right

  • Make presto driver query pinot server with SQL (#8186)arrow-up-right

  • Adding controller config for disabling Groovy in ingestionConfig (#8169)arrow-up-right

  • Adding main method for LaunchDataIngestionJobCommand for spark-submit command (#8168)arrow-up-right

  • Add auth token for segment replace rest APIs (#8146)arrow-up-right

  • Add allowRefresh option to UploadSegment (#8125)arrow-up-right

  • Add Ingress to Broker and Controller helm charts (#7997)arrow-up-right

  • Improve progress reporter in SegmentCreationMapper (#8129)arrow-up-right

  • St_* function error messages + support literal transform functions (#8001)arrow-up-right

  • Add schema and segment crc to SegmentDirectoryContext (#8127)arrow-up-right

  • Extend enableParallePushProtection support in UploadSegment API (#8110)arrow-up-right

  • Support BOOLEAN type in Config Recommendation Engine (#8055)arrow-up-right

  • Add a broker metric to distinguish exception happens when acquire channel lock or when send request to server (#8105)arrow-up-right

  • Add pinot.minion prefix on minion configs for consistency (#8109)arrow-up-right

  • Enable broker service auto-discovery in Jersey framework (#8107)arrow-up-right

  • Timeout if waiting server channel lock takes a long time (#8083)arrow-up-right

  • Wire EmptySegmentPruner to routing config (#8067)arrow-up-right

  • Support for TIMESTAMP data type in Config Recommendation Engine (#8087)arrow-up-right

  • Listener TLS customization (#8082)arrow-up-right

  • Add consumption rate limiter for LLConsumer (#6291)arrow-up-right

  • Implement Real Time Mutable FST (#8016)arrow-up-right

  • Allow quickstart to get table files from filesystem (#8093)arrow-up-right

  • Add support for instant segment deletion (#8077)arrow-up-right

  • Add a config file to override quickstart configs (#8059)arrow-up-right

  • Add pinot server grpc metadata acl (#8030)arrow-up-right

  • Move compatibility verifier to a separate module (#8049)arrow-up-right

  • Move hadoop and spark ingestion libs from plugins directory to external-plugins (#8048)arrow-up-right

  • Add global strategy for partial upsert (#7906)arrow-up-right

  • Upgrade kafka to 2.8.1 (#7883)arrow-up-right

  • Created EmptyQuickstart command (#8024)arrow-up-right

  • Allow SegmentPushUtil to push real-time segment (#8032)arrow-up-right

  • Add ignoreMerger for partial upsert (#7907)arrow-up-right

  • Make task timeout and concurrency configurable (#8028)arrow-up-right

  • Return 503 response from health check on shut down (#7892)arrow-up-right

  • Pinot-druid-benchmark: set the multiValueDelimiterEnabled to false when importing TPC-H data (#8012)arrow-up-right

  • Cleanup: Remove remaining occurrences of incubator. (#8023)arrow-up-right

  • Refactor segment loading logic in BaseTableDataManager to decouple it with local segment directory (#7969)arrow-up-right

  • Improving segment replacement/revert protocol (#7995)arrow-up-right

  • PinotConfigProvider interface (#7984)arrow-up-right

  • Enhance listSegments API to exclude the provided segments from the output (#7878)arrow-up-right

  • Remove outdated broker metric definitions (#7962)arrow-up-right

  • Add skip key for realtimeToOffline job validation (#7921)arrow-up-right

  • Upgrade async-http-client (#7968)arrow-up-right

  • Allow Reloading Segments with Multiple Threads (#7893)arrow-up-right

  • Ignore query options in commented out queries (#7894)arrow-up-right

  • Remove TableConfigCache which does not listen on ZK changes (#7943)arrow-up-right

  • Switch to zookeeper of helm 3.0x (#7955)arrow-up-right

  • Use a single react hook for table status modal (#7952)arrow-up-right

  • Add debug logging for real-time ingestion (#7946)arrow-up-right

  • Separate the exception for transform and indexing for consuming records (#7926)arrow-up-right

  • Disable JsonStatementOptimizer (#7919)arrow-up-right

  • Make index readers/loaders pluggable (#7897)arrow-up-right

  • Make index creator provision pluggable (#7885)arrow-up-right

  • Support loading plugins from multiple directories (#7871)arrow-up-right

  • Update helm charts to honour readinessEnabled probes flags on the Controller, Broker, Server and Minion StatefulSets (#7891)arrow-up-right

  • Support non-selection-only GRPC server request handler (#7839)arrow-up-right

  • GRPC broker request handler (#7838)arrow-up-right

  • Add validator for SDF (#7804)arrow-up-right

  • Support large payload in zk put API (#7364)arrow-up-right

  • Push JSON Path evaluation down to storage layer (#7820)arrow-up-right

  • When upserting new record, index the record before updating the upsert metadata (#7860)arrow-up-right

  • Add Post-Aggregation Gapfilling functionality. (#7781)arrow-up-right

  • Clean up deprecated fields from segment metadata (#7853)arrow-up-right

  • Remove deprecated method from StreamMetadataProvider (#7852)arrow-up-right

  • Obtain replication factor from tenant configuration in case of dimension table (#7848)arrow-up-right

  • Use valid bucket end time instead of segment end time for merge/rollup delay metrics (#7827)arrow-up-right

  • Make pinot start components command extensible (#7847)arrow-up-right

  • Make upsert inner segment update atomic (#7844)arrow-up-right

  • Clean up deprecated ZK metadata keys and methods (#7846)arrow-up-right

  • Add extraEnv, envFrom to statefulset help template (#7833)arrow-up-right

  • Make openjdk image name configurable (#7832)arrow-up-right

  • Add getPredicate() to PredicateEvaluator interface (#7840)arrow-up-right

  • Make split commit the default commit protocol (#7780)arrow-up-right

  • Pass Pinot connection properties from JDBC driver (#7822)arrow-up-right

  • Add Pinot client connection config to allow skip fail on broker response exception (#7816)arrow-up-right

  • Change default range index version to v2 (#7815)arrow-up-right

  • Put thread timer measuring inside of wall clock timer measuring (#7809)arrow-up-right

  • Add getRevertReplaceSegmentRequest method in FileUploadDownloadClient (#7796)arrow-up-right

  • Add JAVA_OPTS env var in docker image (#7799)arrow-up-right

  • Split thread cpu time into three metrics (#7724)arrow-up-right

  • Add config for enabling real-time offset based consumption status checker (#7753)arrow-up-right

  • Add timeColumn, timeUnit and totalDocs to the json segment metadata (#7765)arrow-up-right

  • Set default Dockerfile CMD to -help (#7767)arrow-up-right

  • Add getName() to PartitionFunction interface (#7760)arrow-up-right

  • Support Native FST As An Index Subtype for FST Indices (#7729)arrow-up-right

  • Add forceCleanup option for 'startReplaceSegments' API (#7744)arrow-up-right

  • Add config for keystore types, switch tls to native implementation, and add authorization for server-broker tls channel (#7653)arrow-up-right

  • Extend FileUploadDownloadClient to send post request with json body (#7751)arrow-up-right

  • Ensure partition function never return negative partition (#8221)arrow-up-right

  • Handle indexing failures without corrupting inverted indexes (#8211)arrow-up-right

  • Fixed broken HashCode partitioning (#8216)arrow-up-right

  • Fix segment replace test (#8209)arrow-up-right

  • Fix filtered aggregation when it is mixed with regular aggregation (#8172)arrow-up-right

  • Fix FST Like query benchmark to remove SQL parsing from the measurement (#8097)arrow-up-right

  • Do not identify function types by throwing exceptions (#8137)arrow-up-right

  • Fix regression bug caused by sharing TSerializer across multiple threads (#8160)arrow-up-right

  • Fix validation before creating a table (#8103)arrow-up-right

  • Check cron schedules from table configs after subscribing child changes (#8113)arrow-up-right

  • Disallow duplicate segment name in tar file (#8119)arrow-up-right

  • Fix storage quota checker NPE for Dimension Tables (#8132)arrow-up-right

  • Fix TraceContext NPE issue (#8126)arrow-up-right

  • Update gcloud libraries to fix underlying issue with api's with CMEK (#8121)arrow-up-right

  • Fix error handling in jsonPathArray (#8120)arrow-up-right

  • Fix error handling in json functions with default values (#8111)arrow-up-right

  • Fix controller config validation failure for customized TLS listeners (#8106)arrow-up-right

  • Validate the numbers of input and output files in HadoopSegmentCreationJob (#8098)arrow-up-right

  • Broker Side validation for the query with aggregation and col but without group by (#7972)arrow-up-right

  • Improve the proactive segment clean-up for REVERTED (#8071)arrow-up-right

  • Allow JSON forward indexes (#8073)arrow-up-right

  • Fix the PinotLLCRealtimeSegmentManager on segment name check (#8058)arrow-up-right

  • Always use smallest offset for new partitionGroups (#8053)arrow-up-right

  • Fix RealtimeToOfflineSegmentsTaskExecutor to handle time gap (#8054)arrow-up-right

  • Refine segment consistency checks during segment load (#8035)arrow-up-right

  • Fixes for various JDBC issues (#7784)arrow-up-right

  • Delete tmp- segment directories on server startup (#7961)arrow-up-right

  • Fix ByteArray datatype column metadata getMaxValue NPE bug and expose maxNumMultiValues (#7918)arrow-up-right

  • Fix the issues that Pinot upsert table's uploaded segments get deleted when a server restarts. (#7979)arrow-up-right

  • Fixed segment upload error return (#7957)arrow-up-right

  • Fix QuerySchedulerFactory to plug in custom scheduler (#7945)arrow-up-right

  • Fix the issue with grpc broker request handler not started correctly (#7950)arrow-up-right

  • Fix real-time ingestion when an entire batch of messages is filtered out (#7927)arrow-up-right

  • Move decode method before calling acquireSegment to avoid reference count leak (#7938)arrow-up-right

  • Fix semaphore issue in consuming segments (#7886)arrow-up-right

  • Add bootstrap mode for PinotServiceManager to avoid glitch for health check (#7880)arrow-up-right

  • Fix the broker routing when segment is deleted (#7817)arrow-up-right

  • Fix obfuscator not capturing secretkey and keytab (#7794)arrow-up-right

  • Fix segment merge delay metric when there is empty bucket (#7761)arrow-up-right

  • Fix QuickStart by adding types for invalid/missing type (#7768)arrow-up-right

  • Use oldest offset on newly detected partitions (#7756)arrow-up-right

  • Fix javadoc to compatible with jdk8 source (#7754)arrow-up-right

  • Handle null segment lineage ZNRecord for getSelectedSegments API (#7752)arrow-up-right

  • Handle fields missing in the source in ParquetNativeRecordReader (#7742)arrow-up-right

  • 0.3.0arrow-up-right
    (#8148)arrow-up-right
    (#8189)arrow-up-right
    (#8100)arrow-up-right
    (#8199)arrow-up-right
    (#8194)arrow-up-right
    (#8131)arrow-up-right
    (#8261)arrow-up-right
    (#8228)arrow-up-right
    (#8237)arrow-up-right
    (#8270)arrow-up-right
    (#8269)arrow-up-right
    (#8266)arrow-up-right
    (#8253)arrow-up-right
    (#8263)arrow-up-right
    (#8239)arrow-up-right
    (#8216)arrow-up-right
    (#8103)arrow-up-right
    (#8603)arrow-up-right
    Dependency graph after introducing pinot-segment-api.
    0.2.0 and before Pinot Module Dependency Diagram

    In order to conquer this challenge, below major changes are made:

    • Refactored common interfaces to pinot-spi module

    • Concluded four types of modules:

      • Pinot input format: How to read records from various data/file formats: e.g. Avro/CSV/JSON/ORC/Parquet/Thrift

      • Pinot filesystem: How to operate files on various filesystems: e.g. Azure Data Lake/Google Cloud Storage/S3/HDFS

      • Pinot stream ingestion: How to ingest data stream from various upstream systems, e.g. Kafka/Kinesis/Eventhub

      • Pinot batch ingestion: How to run Pinot batch ingestion jobs in various frameworks, like Standalone, Hadoop, Spark.

    • Built shaded jars for each individual plugin

    • Added support to dynamically load pinot plugins at server startup time

    Now the architecture supports a plug-and-play fashion, where new tools can be supported with little and simple extensions, without affecting big chunks of code. Integrations with new streaming services and data formats can be developed in a much more simple and convenient way.

    Dependency graph after introducing pinot-plugin in 0.3.0

    hashtag
    Notable New Features

    • SQL Support

      • Added Calcite SQL compiler

      • Added SQL response format (#4694arrow-up-right, #4877arrow-up-right)

      • Added support for GROUP BY with ORDER BY ()

      • Query console defaults to use SQL syntax ()

      • Support column alias (, )

      • Added SQL query endpoint: /query/sql ()

      • Support arithmetic operators ()

      • Support non-literal expressions for right-side operand in predicate comparison()

    • Added support for DISTINCT ()

    • Added support default value for BYTES column ()

    • JDK 11 Support

    • Added support to tune size vs accuracy for approximation aggregation functions: DistinctCountHLL, PercentileEst, PercentileTDigest ()

    • Added Data Anonymizer Tool ()

    • Deprecated pinot-hadoop and pinot-spark modules, replace with pinot-batch-ingestion-hadoop and pinot-batch-ingestion-spark

    • Support STRING and BYTES for no dictionary columns in real-time consuming segments ()

    • Make pinot-distribution to build a pinot-all jar and assemble it ()

    • Added support for PQL case insensitive ()

    • Enhanced TableRebalancer logics

      • Moved to new rebalance strategy ()

      • Supported rebalancing tables under any condition()

    • Added experimental support for Text Search‌ ()

    • Upgraded Helix to version 0.9.4, task management now works as expected ()

    • Added date_trunc transformation function. ()

    • Support schema evolution for consuming segment. ()

    • APIs Additions/Changes

      • Pinot Admin Command

        • Added -queryType option in PinotAdmin PostQuery

    • Configurations Additions/Changes

      • Config: controller.host is now optional in Pinot Controller

      • Added instance config: queriesDisabled to disable query sending to a running server (

    hashtag
    Major Bug Fixes

    • Fixed the bug of releasing the segment when there are still threads working on it. (#4764arrow-up-right)

    • Fixed the bug of uneven task distribution for threads (#4793arrow-up-right)

    • Fixed encryption for .tar.gz segment file upload (#4855arrow-up-right)

    • Fixed controller rest API to download segment from non local FS. ()

    • Fixed the bug of not releasing segment lock if segment recovery throws exception ()

    • Fixed the issue of server not registering state model factory before connecting the Helix manager ()

    • Fixed the exception in server instance when Helix starts a new ZK session ()

    • Fixed ThreadLocal DocIdSet issue in ExpressionFilterOperator ()

    • Fixed the bug in default value provider classes ()

    • Fixed the bug when no segment exists in RealtimeSegmentSelector ()

    hashtag
    Work in Progress

    • We are in the process of supporting text search query functionalities.

    • We are in the process of supporting null value (#4230arrow-up-right), currently limited query feature is supported

      • Added Presence Vector to represent null value (#4585arrow-up-right)

      • Added null predicate support for leaf predicates ()

    hashtag
    Backward Incompatible Changes

    • It’s a disruptive upgrade from version 0.1.0 to this because of the protocol changes between Pinot Broker and Pinot Server. Ensure that you upgrade to release 0.2.0 first, then upgrade to this version.

    • If you build your own startable or war without using scripts generated in Pinot-distribution module. For Java 8, an environment variable “plugins.dir” is required for Pinot to find out where to load all the Pinot plugin jars. For Java 11, plugins directory is required to be explicitly set into classpath. See pinot-admin.sh as an example.

    • As always, we recommend that you upgrade controllers first, and then brokers and lastly the servers in order to have zero downtime in production clusters.

    • Kafka 0.9 is no longer included in the release distribution.

    • Pull request introduces a backward incompatible API change for segments management.

      • Removed segment toggle APIs

      • Removed list all segments in cluster APIs

    • Pull request deprecated below task related APIs:

      • GET:

        • /tasks/taskqueues: List all task queues

    • Deprecated modules pinot-hadoop and pinot-spark and replaced with pinot-batch-ingestion-hadoop and pinot-batch-ingestion-spark.

    • Introduced new Pinot batch ingestion jobs and yaml based job specs to define segment generation jobs and segment push jobs.

    • You may see exceptions like below in pinot-brokers during cluster upgrade, but it's safe to ignore them.

    #8893arrow-up-right
    #8873arrow-up-right
    #8857arrow-up-right
    #8724arrow-up-right
    #8939arrow-up-right
    #8582arrow-up-right
    #7647arrow-up-right
    #8181arrow-up-right
    #8565arrow-up-right
    #8566arrow-up-right
    #8535arrow-up-right
    #8647arrow-up-right
    #8304arrow-up-right
    #8397arrow-up-right
    #8378arrow-up-right
    #8264arrow-up-right
    #8498arrow-up-right
    #9258arrow-up-right
    #9244arrow-up-right
    #9197arrow-up-right
    #9193arrow-up-right
    #9186arrow-up-right
    #9180arrow-up-right
    #9173arrow-up-right
    #9171arrow-up-right
    #9095arrow-up-right
    #9086arrow-up-right
    #9071arrow-up-right
    #9058arrow-up-right
    #9005arrow-up-right
    #9006arrow-up-right
    #8989arrow-up-right
    #8986arrow-up-right
    #8970arrow-up-right
    #8978arrow-up-right
    #8972arrow-up-right
    #8959arrow-up-right
    #8949arrow-up-right
    #8941arrow-up-right
    #8927arrow-up-right
    #8905arrow-up-right
    #8897arrow-up-right
    #8888arrow-up-right
    #8873arrow-up-right
    #8861arrow-up-right
    #8857arrow-up-right
    #8828arrow-up-right
    #8825arrow-up-right
    #8823arrow-up-right
    #8815arrow-up-right
    #8796arrow-up-right
    #8768arrow-up-right
    #8753arrow-up-right
    #8738arrow-up-right
    #8729arrow-up-right
    #8724arrow-up-right
    #8713arrow-up-right
    #8711arrow-up-right
    #8708arrow-up-right
    #8670arrow-up-right
    #8659arrow-up-right
    #8655arrow-up-right
    #8640arrow-up-right
    #8622arrow-up-right
    #8611arrow-up-right
    #8584arrow-up-right
    #8569arrow-up-right
    #8566arrow-up-right
    #8565arrow-up-right
    #8560arrow-up-right
    #8557arrow-up-right
    #8551arrow-up-right
    #8550arrow-up-right
    #8544arrow-up-right
    #8503arrow-up-right
    #8491arrow-up-right
    #8486arrow-up-right
    #8465arrow-up-right
    #8451arrow-up-right
    #8398arrow-up-right
    #8387arrow-up-right
    #8384arrow-up-right
    #8380arrow-up-right
    #8358arrow-up-right
    #8355arrow-up-right
    #8343arrow-up-right
    #8325arrow-up-right
    #8319arrow-up-right
    #8310arrow-up-right
    #8273arrow-up-right
    #8255arrow-up-right
    #8249arrow-up-right
    #8287arrow-up-right
    #8478arrow-up-right
    #8325arrow-up-right
    #8427arrow-up-right
    #8348arrow-up-right
    #8346arrow-up-right
    #8494arrow-up-right
    #9167arrow-up-right
    #9135arrow-up-right
    #9138arrow-up-right
    #9126arrow-up-right
    #9132arrow-up-right
    #9130arrow-up-right
    #9124arrow-up-right
    #9110arrow-up-right
    #9090arrow-up-right
    #9088arrow-up-right
    #9087arrow-up-right
    #9070arrow-up-right
    #9069arrow-up-right
    #8856arrow-up-right
    #9059arrow-up-right
    #9035arrow-up-right
    #8971arrow-up-right
    #9010arrow-up-right
    #8958arrow-up-right
    #8913arrow-up-right
    #8905arrow-up-right
    #8892arrow-up-right
    #8858arrow-up-right
    #8812arrow-up-right
    #8689arrow-up-right
    #8664arrow-up-right
    #8781arrow-up-right
    #8848arrow-up-right
    #8834arrow-up-right
    #8824arrow-up-right
    #8831arrow-up-right
    #8802arrow-up-right
    #8786arrow-up-right
    #8794arrow-up-right
    #8785arrow-up-right
    #8748arrow-up-right
    #8721arrow-up-right
    #8707arrow-up-right
    #8685arrow-up-right
    #8672arrow-up-right
    #8656arrow-up-right
    #8648arrow-up-right
    #8633arrow-up-right
    #8631arrow-up-right
    #8598arrow-up-right
    #8590arrow-up-right
    #8572arrow-up-right
    #8553arrow-up-right
    #8509arrow-up-right
    #8511arrow-up-right
    #7958arrow-up-right
    #7971arrow-up-right
    #8443arrow-up-right
    #8450arrow-up-right
    #8448arrow-up-right
    #8407arrow-up-right
    #8404arrow-up-right
    #8394arrow-up-right
    #8392arrow-up-right
    #8337arrow-up-right
    #8366arrow-up-right
    #8350arrow-up-right
    #8323arrow-up-right
    #8327arrow-up-right
    #8285arrow-up-right
    #9028arrow-up-right
    #8272arrow-up-right

    Supported reassigning completed segments along with Consuming segments for LLC real-time table (#5015arrow-up-right)

    subcommand (
    )
  • Added -schemaFile as option in AddTable command (#4959arrow-up-right)

  • Added OperateClusterConfig sub command in PinotAdmin (#5073arrow-up-right)

  • Pinot Controller Rest APIs

    • Get Table leader controller resource (#4545arrow-up-right)

    • Support HTTP POST/PUT to upload JSON encoded schema (#4639arrow-up-right)

    • Table rebalance API now requires both table name and type as parameters. ()

    • Refactored Segments APIs ()

    • Added segment batch deletion REST API ()

    • Update schema API to reload table on schema change when applicable ()

    • Enhance the task related REST APIs ()

    • Added PinotClusterConfig REST APIs ()

      • GET /cluster/configs

      • POST /cluster/configs

  • )
  • Added broker config: pinot.broker.enable.query.limit.override configurable max query response size (#5040arrow-up-right)

  • Removed deprecated server configs (#4903arrow-up-right)

    • pinot.server.starter.enableSegmentsLoadingCheck

    • pinot.server.starter.timeoutInSeconds

    • pinot.server.instance.enable.shutdown.delay

    • pinot.server.instance.starter.maxShutdownWaitTime

    • pinot.server.instance.starter.checkIntervalTime

  • Decouple server instance id with hostname/port config. (#4995arrow-up-right)

  • Add FieldConfig to encapsulate encoding, indexing info for a field.(#5006arrow-up-right)

  • Deprecated below APIs:

    • GET /tables/{tableName}/segments

    • GET /tables/{tableName}/segments/metadata

    • GET /tables/{tableName}/segments/crc

    • GET /tables/{tableName}/segments/{segmentName}

    • GET /tables/{tableName}/segments/{segmentName}/metadata

    • GET /tables/{tableName}/segments/{segmentName}/reload

    • POST /tables/{tableName}/segments/{segmentName}/reload

    • GET /tables/{tableName}/segments/reload

    • POST /tables/{tableName}/segments/reload

    /tasks/taskqueuestate/{taskType} -> /tasks/{taskType}/state

  • /tasks/tasks/{taskType} -> /tasks/{taskType}/tasks

  • /tasks/taskstates/{taskType} -> /tasks/{taskType}/taskstates

  • /tasks/taskstate/{taskName} -> /tasks/task/{taskName}/taskstate

  • /tasks/taskconfig/{taskName} -> /tasks/task/{taskName}/taskconfig

  • PUT:

    • /tasks/scheduletasks -> POST /tasks/schedule

    • /tasks/cleanuptasks/{taskType} -> /tasks/{taskType}/cleanup

    • /tasks/taskqueue/{taskType}: Toggle a task queue

  • DELETE:

    • /tasks/taskqueue/{taskType} -> /tasks/{taskType}

  • #4602arrow-up-right
    #4994arrow-up-right
    #5016arrow-up-right
    #5033arrow-up-right
    #4964arrow-up-right
    #5018arrow-up-right
    #5070arrow-up-right
    #4535arrow-up-right
    #4583arrow-up-right
    #4666arrow-up-right
    #4747arrow-up-right
    #4791arrow-up-right
    #4977arrow-up-right
    #4983arrow-up-right
    #4695arrow-up-right
    #4990arrow-up-right
    #4993arrow-up-right
    #5020arrow-up-right
    #4740arrow-up-right
    #4954arrow-up-right
    #4767arrow-up-right
    #4808arrow-up-right
    #4882arrow-up-right
    #4929arrow-up-right
    #4976arrow-up-right
    #5114arrow-up-right
    #5137arrow-up-right
    #5138arrow-up-right
    #4943arrow-up-right
    #4806arrow-up-right
    #5054arrow-up-right
    #4726arrow-up-right
    2020/03/09 23:37:19.879 ERROR [HelixTaskExecutor] [CallbackProcessor@b808af5-pinot] [pinot-broker] [] Message cannot be processed: 78816abe-5288-4f08-88c0-f8aa596114fe, {CREATE_TIMESTAMP=1583797034542, MSG_ID=78816abe-5288-4f08-88c0-f8aa596114fe, MSG_STATE=unprocessable, MSG_SUBTYPE=REFRESH_SEGMENT, MSG_TYPE=USER_DEFINE_MSG, PARTITION_NAME=fooBar_OFFLINE, RESOURCE_NAME=brokerResource, RETRY_COUNT=0, SRC_CLUSTER=pinot, SRC_INSTANCE_TYPE=PARTICIPANT, SRC_NAME=Controller_hostname.domain,com_9000, TGT_NAME=Broker_hostname,domain.com_6998, TGT_SESSION_ID=f6e19a457b80db5, TIMEOUT=-1, segmentName=fooBar_559, tableName=fooBar_OFFLINE}{}{}
    java.lang.UnsupportedOperationException: Unsupported user defined message sub type: REFRESH_SEGMENT
          at org.apache.pinot.broker.broker.helix.TimeboundaryRefreshMessageHandlerFactory.createHandler(TimeboundaryRefreshMessageHandlerFactory.java:68) ~[pinot-broker-0.2.1172.jar:0.3.0-SNAPSHOT-c9d88e47e02d799dc334d7dd1446a38d9ce161a3]
          at org.apache.helix.messaging.handling.HelixTaskExecutor.createMessageHandler(HelixTaskExecutor.java:1096) ~[helix-core-0.9.1.509.jar:0.9.1.509]
          at org.apache.helix.messaging.handling.HelixTaskExecutor.onMessage(HelixTaskExecutor.java:866) [helix-core-0.9.1.509.jar:0.9.1.509]

    DELETE /cluster/configs/{configName}

    #4824arrow-up-right
    #4806arrow-up-right
    #4828arrow-up-right
    #4838arrow-up-right
    #5054arrow-up-right
    #5073arrow-up-right

    1.1.0

    Release Notes for version 1.1.0

    hashtag
    Summary

    This release comes with several features, SQL /UI/Perf enhancements Bugfixes across areas ranging from Multistage Query Engine to Ingestion, Storage format, SQL support, etc.

    hashtag
    Multi-stage Query Engine

    hashtag
    Features

    Support RelDistribution-based trait Planning (, )

    • Adds support for RelDistribution optimization for more accurate leaf-stage direct exchange/shuffle. Also extends partition optimization beyond leaf stage to entire query plan.

    • Applies optimization based on distribution trait in the mailbox/worker assignment stage

      • Fixes previous direct exchange which was decided based on the table partition hint. Now direct exchange is decided via distribution trait: it will applied if-and-only-if the trait propagated matches the exchange requirement.

    Leaf stage planning with multi-semi join support ()

    • Solves the limitation of pinotQuery that supports limited amount of PlanNodes.

    • Splits the ServerRequest planning into 2 stages

      • First plan as much as possible into PinotQuery

    Support for ArrayAgg aggregation function ()

    • Usage: ArrayAgg(column, 'dataType' [, 'isDistinct'])

    • Float type column is treated as Double in the multistage engine, so FLOAT type is not supported.

    • Supports data BOOLEAN, INT, LONG

    hashtag
    Enhancements

    • Canonicalize SqlKind.OTHERS and SqlKind.OTHER_FUNCTIONS and support

      concat as || operator ()

    • Capability for constant filter in QueryContext, with support for server to handle it (

    hashtag
    Bugfixes, Refactoring, Cleanups, Tests

    • Bugfix for evaluation of chained literal functions ()

    • Fixes to sort copy rule ( and )

    • Fixes duplicate results for literal queries ()

    hashtag
    Notable Features

    hashtag
    Server-level throttling for realtime consumption ()

    • Use server config pinot.server.consumption.rate.limit to enable this feature

    • Server rate limiter is disabled by default (default value 0)

    hashtag
    Reduce segment generation disk footprint for Minion Tasks ()

    • Supported in MergeRollupTask and RealtimeToOfflineSegmentsTask minion tasks

    • Use taskConfig segmentMapperFileSizeThresholdInBytes to specify the threshold size

    hashtag
    Support for swapping of TLS keystore/truststore (, )

    • Security feature that makes the keystore/truststore swappable.

    • Auto-reloads keystore/truststore (without need for a restart) if they are local files

    hashtag
    Sticky Query Routing ()

    • Adds support for deterministic and sticky routing for a query / table / broker. This setting would lead to same server / set of servers (for MultiStageReplicaGroupSelector) being used for all queries of a given table.

    • Query option (takes precedence over fixed routing setting at table / broker config level) SET "useFixedReplica"=true;

    • Table config (takes precedence over fixed routing setting at broker config level)

    hashtag
    Table Config to disallow duplicate primary key for dimension tables ()

    • Use tableConfig dimensionTableConfig.errorOnDuplicatePrimaryKey=true to enable this behavior

    • Disabled by default

    hashtag
    Partition-Level ForceCommit for realtime tables ()

    • Support to force-commit specific partitions of a realtime table.

    • Partitions can be specified to the forceCommit API as a comma separated list of partition names or consuming segment names

    hashtag
    Support initializing broker tags from config ()

    • Support to give the broker initial tags on startup.

    • Automatically updates brokerResource when broker joins the cluster for the first time

    • Broker tags are provided as comma-separated values in pinot.broker.instance.tags

    hashtag
    Support for StreamNative OAuth2 authentication for pulsar ()

    • StreamNative (the cloud SAAS offering of Pulsar) uses OAuth2 to authenticate clients to their Pulsar clusters.

    • For more information, see how to

    • Can be configured by adding the following properties to streamConfigs:

    hashtag
    Introduce low disk mode to table rebalance ()

    • Introduces a new table rebalance boolean config lowDiskMode.Default value is false.

    • Applicable for rebalance with downtime=false.

    • When enabled, segments will first be offloaded from servers, then added to servers after offload is done. It may increase the total time of the rebalance, but can be useful when servers are low on disk space, and we want to scale up the cluster and rebalance the table to more servers.

    hashtag
    Support Vector index and Hierarchical Navigable Small Worlds (HNSW) ()

    • Supports Vector Index on float array/multi-value columnz

    • Add predicate and function to retrieve topK closest vector. Example query

    • The function VectorSimilarity will return a double value where the first parameter is the embedding column and the second parameter is the search term embedding literal.

    • Since VectorSimilarity is a predicate, once config the topK, this predicate will return topk rows per segment. Then if you are using this index with other predicate, you may not get expected number of rows since the records matching other predicate might not in the topk rows.

    hashtag
    Support for retention on deleted keys of upsert tables ()

    • Adds an upsert config deletedKeysTTL which will remove deleted keys from in-memory hashmap and mark the validDocID as invalid after the deletedKeysTTL threshold period.

    • Disabled by default. Enabled only if a valid value for deletedKeysTTL is set

    hashtag
    Configurable Lucene analyzer ()

    • Introduces the capability to specify a custom Lucene analyzer used by text index for indexing and search on an individual column basis.

    • Sample usage

    • Default Behavior falls back to using the standardAnalyzer unless the luceneAnalyzerClass property is specified.

    hashtag
    Support for murmur3 as a partition function ()

    • Murmur3 support with optional fields seed and variant for the hash in functionConfig field of columnPartitionMap.Default value for seed is 0.

    • Added support for 2 variants of Murmur3: x86_32

    hashtag
    New optimized MV forward index to only store unique MV values

    • Adds new MV dictionary encoded forward index format that only stores the unique MV entries.

    • This new index format can significantly reduce the index size when the MV entries repeat a lot

    • The new index format can be enabled during index creation, derived column creation, and segment reload

    hashtag
    Support for explicit null handling modes ()

    • Adds support for 2 possible ways to handle null:

      • Table mode - which already exists

      • Column mode, which means that each column specifies its own nullability in the FieldSpec

    hashtag
    Support tracking out of order events in Upsert ()

    • Adds a new upsert config outOfOrderRecordColumn

    • When set to a non-null value, we check whether an event is OOO or not and then accordingly update the corresponding column value to true / false.

    • This will help in tracking which event is out-of-order while using skipUpsert

    hashtag
    Compression configuration support for aggregationConfigs to StartreeIndexConfigs ()

    • Can be used to save space. For eg: when a functionColumnPairs has a output type of bytes, such as when you use distinctcountrawhll.

    • Sample config

    hashtag
    Preconfiguration based mirror instance assignment ()

    • Supports instance assignment based pre-configured instance assignment map.

    • The assignment will always respect the mirrored servers in the pre-configured map

    • More details

    hashtag
    Support for Listing Dimension Tables ()

    • Adds dimension as a valid option to table "type" in the /tables controller API

    hashtag
    Support in upsert for dropping out of order events ()

    • This patch adds a new config for upsert: dropOutOfOrderRecord

    • If set to true, pinot doesn't persist out-of-order events in the segment.

    • This feature is useful to

    hashtag
    Support to retry failed table rebalance tasks ()

    • New configs for the RebalanceChecker periodic task:

      • controller.rebalance.checker.frequencyPeriod: 5min by default ; -1 to disable

      • controller.rebalanceChecker.initialDelayInSeconds

    hashtag
    Support for UltraLogLog ()

    • UltraLogLog aggregations for Count Distinct (distinctCountULL and distinctCountRawULL)

    • UltraLogLog creation via Transform Function

    • UltraLogLog merging in MergeRollup

    hashtag
    Support for Apache Datasketches CPC sketch ()

    • Ingestion via transformation function

    • Extracting estimates via query aggregation functions

    • Segment rollup aggregation

    hashtag
    Support to reduce DirectMemory OOM chances on broker ()

    • Broadly there are two configs that will enable this feature:

      • maxServerResponseSizeBytes: Maximum serialized response size across all servers for a query. This value is equally divided across all servers processing the query.

      • maxQueryResponseSizeBytes: Maximum length of the serialized response per server for a query

    hashtag
    UI Support to Allow schema to be created with JSON config ()

    • This is helpful when user has the entire JSON handy

    • UI still keeps Form Way to add Schema along with JSON view

    hashtag
    Support in JSON index for ignoring values longer than a given length ()

    • Use option maxValueLength in jsonIndexConfig to restrict length of values

    • A value of 0 (or when the key is omitted) means there is no restriction

    hashtag
    Support for MultiValue VarByte V4 index writer ()

    • Supports serializing and writing MV columns in VarByteChunkForwardIndexWriterV4

    • Supports V4 reader that can be used to read SV var length, MV fixed length and MV var length buffers encoded with V4 writer

    hashtag
    Improved scalar function support for Multivalue columns(, )

    hashtag
    Support for FrequentStringsSketch and FrequentLonsSketch aggregation functions ()

    • Approximation aggregation functions for estimating the frequencies of items a dataset in a memory efficient way. More details in library.

    hashtag
    Controller API for Table Indexe ()

    • Table index api to get the aggregate index details of all segments for a table.

      • URL/tables/{tableName}/indexes

    • Response format

    hashtag
    Support for configurable rebalance delay at lead controller ()

    • The lead controller rebalance delay is now configurable with controller.resource.rebalance.delay_ms

    • Changing rebalance configurations will now update the lead controller resource

    hashtag
    Support for configuration through environment variables ()

    • Adds support for Pinot configuration through ENV variables with Dynamic mapping.

    • More details in issue:

    • Sample configs through ENV

    hashtag
    Add hyperLogLogPlus aggregation function for distinct count ()

    • HLL++ has higher accuracy than HLL when cardinality of dimension is at 10k-100k.

    • More details

    hashtag
    Support for clpMatch

    • Adds query rewriting logic to transform a "virtual" UDF, clpMatch, into a boolean expression on the columns of a CLP-encoded field.

    • To use the rewriter, modify broker config to add org.apache.pinot.sql.parsers.rewriter.ClpRewriter to pinot.broker.query.rewriter.class.names.

    hashtag
    Support for DATETIMECONVERTWINDOWHOP function ()

    hashtag
    Support for JSON_EXTRACT_INDEX transform function to leverage json index for json value extraction ()

    hashtag
    Support for ArrayAgg aggregation function ()

    hashtag
    GenerateData command support for generating data in JSON format ()

    hashtag
    Enhancements

    hashtag
    SQL

    • Support ARRAY function as a literal evaluation ()

    • Support for ARRAY literal transform functions ()

    • Theta Sketch Aggregation enhancements ()

    hashtag
    UI

    • Async rendering of UI elements to load UI elements async resulting in faster page loads ()

    • Make the table name link clickable in task details ()

    • Swagger UI enhancements to resumeConsumption API call ()

    hashtag
    Misc

    • Enhancement to reduce the heap usage of String Dictionaries that are loaded on-heap ()

    • Wire soft upsert delete for Compaction task ()

    • Upsert compaction debuggability APIs for validDocId metadata ()

    hashtag
    Bugfixes, Refactoring, Cleanups, Deprecations

    • Upsert bugfix in "rewind()" for CompactedPinotSegmentRecordReader ()

    • Fix error message format for Preconditions.checks failures()

    • Bugfix to distribute Pinot as a multi-release JAR (, )

    hashtag
    Backward incompatible Changes

    • Fix a race condition for upsert compaction (). Notes on backward incompatibility below:

      • This PR is introducing backward incompatibility for UpsertCompactionTask. Previously, we allowed to configure the compaction task without the snapshot enabled. We found that using in-memory based validDocIds is a bit dangerous as it will not give us the consistency (e.g. fetching validDocIds bitmap while the server is restarting & updating validDocIds).

        We now enforce the enableSnapshot=true for UpsertCompactionTask if the advanced customer wants to run the compaction with the in-memory validDocId bitmap.

    hashtag
    Library Upgrades and dependencies

    • update maven-jar-plugin and maven-enforcer-plugin version (#11637)

    • Update testng as the test provider explicitly instead of relying on the classpath. ()

    • Update compatibility verifier version ()

    As a side effect, is_colocated_by_join_keysquery option is reintroduced to ensure dynamic broadcast which can also benefit from direct exchange optimization

  • Allows propagation of partition distribution trait info across the tree to be used during Physical Planning phase. It can be used in the following scenarios (will follow up in separate PRs)

  • Note on backward incompatbility

    • is_colocated_by_join_keys hint is now required for making colocated joins

      • it should only affect semi-join b/c it is the only one utilizing broadcast exchange but were pulled to act as direct exchange.

      • inner/left/right/full join should automatically apply colocation thus the backward incompatibility should not affect these.

  • for any remainder nodes that cannot be planned into PinotQuery, will be run together with the LeafStageTransferrableBlockOperator as the input locally.
    ,
    FLOAT
    (only in V1),
    DOUBLE
    ,
    STRING
    ,
    TIMESTAMP
    . E.g.
    ArrayAgg(intCol, 'INT')
    returns
    ARRAY<INT>
    )
  • Tests for filter pushdown (#11994arrow-up-right)

  • Enhancements to query plan tests (#11966arrow-up-right)

  • Refactor PlanFragmenter to make the logic clear (#11912arrow-up-right)

  • Observability enhancements to emit metrics for grpc request and multi-stage leaf stage (#11838arrow-up-right)

    • pinot.server.query.log.maxRatePerSecond: query log max rate (QPS, default 10K)

    • pinot.server.query.log.droppedReportMaxRatePerSecond: dropped query log report max rate (QPS, default 1)

  • Security enhancement to add RBAC authorization checks for multi-stage query engine (#11830arrow-up-right)

  • Enhancement to leaf-stage execution stats NPE handling (#11805arrow-up-right)

  • Enhancement to add a framework to back-propagate metadata across opChains (#11746arrow-up-right)

  • Use of BinaryArray to wire proto for multi-stage engine bytes literal handling (#11738arrow-up-right)

  • Enable dynamic broadcast for SEMI joins. Adds a fallback option to enable hash table join using joinOptions(join_strategy = 'hash_table')(#11696arrow-up-right)

  • Improvements to dispatch exception handling (#11688arrow-up-right)

  • Allow malformed dateTime string to return default value configurable in the function signature (#11258arrow-up-right)

  • Improvement in multi-stage aggregation to directly store column index as identifier (#11617arrow-up-right)

  • Perf optimization to avoid unnecessary rows conversion in aggregation (#11607arrow-up-right)

  • Enhance SegmentPartitionMetadataManager to handle new segment (#11585arrow-up-right)

  • Optimize mailbox info in query plan to reduce memory footprint (#12382arrow-up-right)

    • This PR changes the proto object structure, which will cause backward incompatibility when broker and server are running different version.

  • Optimizations to query plan serialization (#12370arrow-up-right)

  • Optimization for parallel execution of Ser/de stage plan (#12363arrow-up-right)

  • Optimizations in query dispatch (#12358arrow-up-right)

  • Perf optimization for group-by and join for single key scenario (#11630arrow-up-right)

  • Bugfix to use UTF-8 encoding for default Charset (#12213arrow-up-right)
  • Bugfix to escape table name when routing queries (#12212arrow-up-right)

  • Refactoring of planner code and removing unnecessary rules (#12070arrow-up-right, #12052arrow-up-right)

  • Fix to remove unnecessar project after agg during relBuilder (#12058arrow-up-right)

  • Fixes issues multi-semi-join (#12038arrow-up-right)

  • Fixes leaf limit refactor issue (#12001arrow-up-right)

  • Add back filter merge after rule (#11989arrow-up-right)

  • Fix operator EOS pull (#11970arrow-up-right)

  • Fix type cast issue with dateTimeConvert scalar function (#11839arrow-up-right, #11971arrow-up-right)

  • Fix to set explicit warning flags set on each stage stats (#11936arrow-up-right)

  • Fix mailbox visitor mismatch receive/send (#11908arrow-up-right)

  • Fix eliminate multiple exchanges in nested semi-join queries (#11882arrow-up-right)

  • Bugfix for multiple consecutive Exchange returning empty response (#11885arrow-up-right)

  • Fixing unit-test-2 build (#11889arrow-up-right)

  • Fix issue with realtime partition mismatch metric (#11871arrow-up-right)

  • Fix the NPE for rebalance retry (#11883arrow-up-right)

  • Bugfix to make Agg literal attach happen after BASIC_RULES (#11863arrow-up-right)

  • Fix NPE by init execution stats map (#11801arrow-up-right)

  • Test cases for special column escape (#11737arrow-up-right)

  • Fix StPoint scalar function usage in multi-stage engine intermediate stage (#11731arrow-up-right)

  • Clean up for transform function type (#11726arrow-up-right)

  • Add capability to ignore test (#11703arrow-up-right)

  • Fix custom property naming (#11675arrow-up-right)

  • Log warning when multi-stage engine planning throws exception (#11595arrow-up-right)

  • Fix usage of metadata overrides (#11587arrow-up-right)

  • Test change to enable metadata manager by default for colocated join quickstart (#11579arrow-up-right)

  • Tests for IN/NOT-IN operation (#12349arrow-up-right)

  • Fix stage id in stage plan (#12366arrow-up-right)

  • Bugfix for IN and NOT IN filters within case statements (#12305arrow-up-right)

  • Broker conf - pinot.broker.use.fixed.replica=true

    #12112arrow-up-right adds the UI capability to toggle this option

    More details in the
    and
    x64_32
    configurable using the
    variant
    field in
    functionConfig
    . If no variant is provided we choose to keep the
    x86_32
    variant as it was part of the original implementation.
  • Examples of functionConfig;

    Here there is no functionConfig configured, so the seed value will be 0 and variant will be x86_32.

    Here the seed is configured as 9001 but as no variant is provided, x86_32 will be picked up.

    Here the variant is mentioned so Murmur3 will use the x64_32 variant with 9001 as seed.

  • Note on users using Debezium and Murmur3 as partitioning function :

    • The partitioning key should be set up on either of byte[], String or long[] columns.

    • On pinot variant should be set as x64_32 and seed should be set as 9001.

  • To enable the new index format, set the compression codec in the FieldConfig:

    Or use the new index JSON:

    Column mode can be enabled by the below config.
  • The default value for enableColumnBasedNullHandling is false. When set to true, Pinot will ignore TableConfig.IndexingConfig.nullHandlingEnabled and columns will be nullable if and only if FieldSpec.notNull is false, which is also the default value.

  • Sample table config

    Save disk-usage

  • Avoid any confusion when using skipUpsert for partial-upsert tables as nulls start showing up for columns where a previous non-null was encountered and we don't know if it's an out-of-order event or not.

  • : 2min+ by default
  • New configs added for RebalanceConfig:

    • heartbeatIntervalInMs: 300_000 i.e. 5min

    • heartbeatTimeoutInMs: 3600_000 i.e. 1hr

    • maxAttempts: 3 by default, i.e. the original run plus two retries

    • retryInitialDelayInMs: 300_000 i.e. 5min, for exponential backoff w/ jitters

  • New metrics to monitor rebalance and its retries:

    • TABLE_REBALANCE_FAILURE("TableRebalanceFailure", false), emit from TableRebalancer.rebalanceTable()

    • TABLE_REBALANCE_EXECUTION_TIME_MS("tableRebalanceExecutionTimeMs", false), emit from TableRebalancer.rebalanceTable()

    • TABLE_REBALANCE_FAILURE_DETECTED("TableRebalanceFailureDetected", false), emit from RebalanceChecker

    • TABLE_REBALANCE_RETRY("TableRebalanceRetry", false), emit from RebalanceChecker

  • New restful API

    • DELETE /tables/{tableName}/rebalance API to stop rebalance. In comparison, POST /tables/{tableName}/rebalance was used to start one.

  • Support for UltraLogLog in Star-Tree indexes

    StarTree aggregation

    Configs are available as queryOption, tableConfig and Broker config. The priority of enforcement is as follows:

    Adds configuration options for DistinctCountThetaSketchAggregationFunction
  • Respects ordering for existing Theta sketches to use "early-stop" optimisations for unions

  • Add query option override for Broker MinGroupTrimSize (#11984arrow-up-right)

  • Support for 2 new scalar functions for bytes: toUUIDBytes and fromUUIDBytes (#11988arrow-up-right)

  • Config option to make groupBy trim size configurable at Broker (#11958arrow-up-right)

  • Pre-aggregation support for distinct count hll++ (#11747arrow-up-right)

  • Add float type into literal thrift to preserve literal type conforming to SQL standards (#11697arrow-up-right)

  • Enhancement to add query function override for Aggregate functions of multi valued columns (#11307arrow-up-right)

  • Perf optimization in IN clause evaluation (#11557arrow-up-right)

  • Add TextMatchFilterOptimizer to maximally push down text_match filters to Lucene (#12339arrow-up-right

  • Adds support for CTRL key as a modifier for Query shortcuts (#12087arrow-up-right)
  • UI enhancement to show partial index in reload (#11913arrow-up-right)

  • UI improvement to add Links to Instance in Table and Segment View (#11807arrow-up-right)

  • Fixes reload to use the right indexes API instead of fetching all segment metadata (#11793arrow-up-right)

  • Enhancement to add toggle to hide/show query exceptions (#11611arrow-up-right)

  • Make server resource classes configurable (#12324arrow-up-right)
  • Shared aggregations for Startree index - mapping from aggregation used in the query to aggregation used to store pre-aggregated values (#12164arrow-up-right)

  • Increased fetch timeout for Kineses to prevent stuck kinesis consumers

  • Metric to track table rebalance (#12270arrow-up-right)

  • Allow server-level configs for upsert metadata (#18851arrow-up-right)

  • Support to dynamically initialize Kafka client SSL configs (#12249arrow-up-right)

  • Optimize segment metadata file creation without having to download full segment (#12255arrow-up-right)

  • Allow string / numeric data type for deleteRecordColumn config (#12222arrow-up-right)

  • Atomic and Deterministic snapshots of validDocId for upsert tables (#12232arrow-up-right, #12246arrow-up-right)

  • Observability enhancement to add column name when JSON index building fails (#12151arrow-up-right)

  • Creation of DateTimeGenerator for DATE_TIME field type columns (#12206arrow-up-right)

  • Add singleton registry for all controller and minion metrics (#12119arrow-up-right)

  • Support helm chart server separate liveness and readiness probe endpoints (#11800arrow-up-right)

  • Observability enhancement to add metrics for Table Disabled and Consumption Paused (#12000arrow-up-right)

  • Support for SegmentGenerationAndPushTask to push segment to realtime table (#12084arrow-up-right)

  • Enhancement to make the deep store upload retry async with configurable parallelism (#12017arrow-up-right)

  • Optimizations in segment commit to not read partition group metadata (#11943arrow-up-right)

  • Replace timer with scheduled executor service in IngestionDelayTracker to reduce number of threads (#11849arrow-up-right)

  • Adds an option skipControllerCertValidation to skip controller cert validation in AddTableCommand (#11967arrow-up-right)

  • Adds instrumentation for DataTable Creation (#11942arrow-up-right)

  • Improve performance of ZkBasicAuthAccessFactory by caching Bcrypt password (#11904arrow-up-right)

  • Adds support to to fetch metadata for specific list of segments (#11949arrow-up-right)

  • Allow user specify local temp directory for quickstart (#11961arrow-up-right)

  • Optimization for server to directly return final result for queries hitting single server (#11938arrow-up-right)

  • Explain plan optimization to early release AcquireReleaseColumnsSegmentOperator (#11945arrow-up-right)

  • Observability metric to track query timeouts (#11892arrow-up-right)

  • Add support for auth in QueryRunner (#11897arrow-up-right)

  • Allow users to pass custom RecordTransformers to SegmentProcessorFramework (#11887arrow-up-right)

  • Add isPartialResult flag to broker response (#11592arrow-up-right)

  • Add new configs to Google Cloud Storage (GCS) connector: jsonKey (#11890arrow-up-right)

    • jsonKey is the GCP credential key in string format (either in plain string or base64 encoded string). Refer Creating and managing service account keysarrow-up-right to download the keys.

  • Performance enhancement to build segments in column orientation (#11776arrow-up-right)

    • Disabled by default. Can be enabled by setting table config columnMajorSegmentBuilderEnabled

  • Observability enhancements to emit metrics for grpc request and multi-stage leaf stage (#11838arrow-up-right)

    • pinot.server.query.log.maxRatePerSecond: query log max rate (QPS, default 10K)

    • pinot.server.query.log.droppedReportMaxRatePerSecond: dropped query log report max rate (QPS, default 1)

  • Observability improvement to expose GRPC metrics (#11842arrow-up-right)

  • Improvements to response format for reload API to be pretty printed (#11608arrow-up-right)

  • Enhancements to support Java 21 (#11672arrow-up-right)

  • Add more information in RequestContext class (#11708arrow-up-right)

  • Support to read exact buffer byte ranges corresponding to a given forward index doc id (#11729arrow-up-right)

  • Enhance Broker reducer to handle expression format change (#11762arrow-up-right)

  • Capture build scans on ge.apache.org to benefit from deep build insights (#11767arrow-up-right)

  • Performance enhancement in multiple places by updating initial capacity of HashMap (#11709arrow-up-right)

  • Support for building indexes post segment file creation, allowing indexes that may depend on a completed segment to be built as part of the segment creation process (#11711arrow-up-right)

  • Support excluding time values in SimpleSegmentNameGenerator (#11650arrow-up-right)

  • Perf enhancement to reduce cpu usage by avoiding throwing an exception during query execution (#11715arrow-up-right)

  • Added framework for supporting nulls in ScalarTransformFunctionWrapper in the future (#11653arrow-up-right)

  • Observability change to metrics to export netty direct memory used and max (#11575arrow-up-right)

  • Observability change to add a metric to measure total thread cpu time for a table (#11713arrow-up-right)

  • Observability change to use SlidingTimeWindowArrayReservoirin dropwizard metrics (#11695arrow-up-right)

  • Minor improvements to upsert preload (#11694arrow-up-right)

  • Observability changes to expose additional Realtime Ingestion Metrics (#11685arrow-up-right)

  • Perf enhancement to remove the global lock in SegmentCompletionManager (#11679arrow-up-right)

  • Enhancements to unify tmp file naming format and delete tmp files at a regular cadence by extending the ControllerPeriodicTask (#10815arrow-up-right)

    • controller.realtime.segment.tmpFileAsyncDeletionEnabled (default false)

    • controller.realtime.segment.tmpFileRetentionInSeconds (default 3600)

  • Improvements to skip unparseable records in the csv record reader (#11540arrow-up-right, #11594arrow-up-right)

  • Enhancements to allow override/force options when add schema (#11572arrow-up-right)

  • Enhancement to handle direct memory OOM on brokers (#11496arrow-up-right)

  • Enhancement to metadata API to return upsert partition to primary key count map for both controller and server APIs (#12334arrow-up-right)

  • Enhancements to peer server segment download by retrying both peer discovery and download. (#12317arrow-up-right)

  • Helper functions in StarTreeBuilderUtils and StarTreeV2BuilderConfig (#12361arrow-up-right)

  • Perf optimizations to release all segments of a table in releaseAndRemoveAllSegments method (#12297arrow-up-right)

  • Enhancement to Maintain pool selection for the minimizeDataMovement instance partition assignment strategy (#11953arrow-up-right)

  • Upsert enhancement to assign segments for with respect to ideal state (#11628arrow-up-right)

  • Observability change to export Additional Upsert Metrics to Prom (#11660arrow-up-right)

  • Observibility enhancement to add CPU metrics for minion purge task (#12337arrow-up-right)

  • Add HttpHeaders in broker event listener requestContext (#12258arrow-up-right)

  • Fixes in upsert metadata manager (#12319arrow-up-right)
  • Security fix to allow querying tables with table-type suffix (#12310arrow-up-right)

  • Bugfix to ensure tagConfigOverride config is null for upsert tables (#12233arrow-up-right and #12311arrow-up-right)

  • Increased fetch timeout for Kineses to prevent stuck kinesis consumers(#12214arrow-up-right)

  • Fixes to catch-all Regex for JXM -> Prom Exporter (#12073arrow-up-right and #12295arrow-up-right)

  • Fixes lucene index errors when using QuickStart (#12289arrow-up-right)

  • Null handling bugfix for sketch group-by queries (#12259arrow-up-right)

  • Null pointer exception fixes in Controller SQL resource (#12211arrow-up-right)

  • Synchronization fixes to replace upsert segments (#12105arrow-up-right and #12241arrow-up-right)

  • Bugfix for S3 connection pool error when AWS session tokens expire after an hour (#12221arrow-up-right)

  • FileWriter fixes to append headerline only for required formats like csv (#12208arrow-up-right)

  • Security bugfix for pulsar OAuth2 authentication (#12195arrow-up-right)

  • Bugfix to appropriately compute "segment.flush.threshold.size" when force-committing realtime segments (#12188arrow-up-right)

  • Fixes rebalance converge check that reports success before rebalance completes (#12182arrow-up-right)

  • Fixes upsertPrimaryKeysCount metric reporting when table is deleted (#12169arrow-up-right)

  • Update LICENSE-binary for commons-configuration2 upgrade (#12165arrow-up-right)

  • Improve error logging when preloading segments not exist on server (#12153arrow-up-right)

  • Fixes to file access resource leaks (#12129arrow-up-right)

  • Ingestion bugfix to avoid unnecessary transformers in CompositeTransformer (#12138arrow-up-right)

  • Improve logging to print OS name during service statup (#12135arrow-up-right)

  • Improve logging in multiple files (#12134arrow-up-right, #12137arrow-up-right, #12127arrow-up-right, #12121arrow-up-right)

  • Test fixes for ExprMinMaxRewriterTest.testQueryRewrite (#12047arrow-up-right)

  • Fixes default path of log4j in helmchart (#12069arrow-up-right, #12083arrow-up-right)

  • Fix default brokerUpdateFrequencyInMillis for connector (#12093arrow-up-right)

  • Updates to README file (#12075arrow-up-right)

  • Fix to remove unnecessary locking during segment preloading (#12077arrow-up-right)

  • Fix bug with silently ignoring force commit call failures (#12044arrow-up-right)

  • Upsert bugfix to allow optional segments that can be skipped by servers without failing the query (#11978arrow-up-right)

  • Fix incorrect handling of consumer creation errors (#12045arrow-up-right)

  • Fix the memory leak issue on CommonsConfigurationUtils (#12056arrow-up-right)

  • Fix rebalance on upsert table (#12054arrow-up-right)

  • Add new Transformer to transform -0.0 and NaN (#12032arrow-up-right)

  • Improve inverted index validation in table config to enhance user experience (#12043arrow-up-right)

  • Fixes test flakiness by replacing HashSet/HashMap with LinkedHashSet/LinkedHashMap (#11941arrow-up-right)

  • Flaky test fix for ServerRoutingStatsManagerTest.testQuerySubmitAndCompletionStats (#12029arrow-up-right)

  • Fix derived column from MV column (#12028arrow-up-right)

  • Support for leveraging StarTree index in conjunction with filtered aggregations (#11886arrow-up-right)

  • Improves tableConfig validation for enabling size based threshold for realtime tables (#12016arrow-up-right)

  • Fix flaky PinotTenantRestletResourceTest (#12026arrow-up-right)

  • Fix flaky Fix PinotTenantRestletResourceTest (#12019arrow-up-right)

  • Fix the race condition of concurrent modification to segment data managers (#12004arrow-up-right)

  • Fix the misuse of star-tree when all predicates are always false under OR (#12003arrow-up-right)

  • Fix the test failures caused by instance drop failure (#12002arrow-up-right)

  • Fix fromULL scalar function (#11995arrow-up-right)

  • Fix to exclude module-info.class during shade operations (#11975arrow-up-right)

  • Fix the wrong import for Preconditions (#11979arrow-up-right)

  • Add check for illegal character '/' in taskName (#11955arrow-up-right)

  • Bugfix to only register new segments when it's fully initalized by partitionUpsertMetadataManager (#11964arrow-up-right)

  • Obervability fix to add logs to track sequence of events for table creation (#11946arrow-up-right)

  • Fix the NPE in minimizeDataMovement instance assignment strategy (#11952arrow-up-right)

  • Fix to add catch all logging for exception during DQL/DML process (#11944arrow-up-right)

  • Fix bug where we don't handle cases that a upsert table has both upsert deletion and upsert ttl configs (#11791arrow-up-right)

  • Removing direct dependencies on commons-logging and replacing with jcl-over-slf4j (#11920arrow-up-right)

  • Fix NPE for IN clause on constant STRING dictionary (#11930arrow-up-right)

  • Fix flaky OfflineClusterIntegrationTest on server response size tests (#11926arrow-up-right)

  • Avoid npe when checking mirror server set assignment (#11915arrow-up-right)

  • Deprecate _segmentAssignmentStrategy in favor of SegmentsValidationAndRetentionConfig #11869arrow-up-right

  • Bugfix to capture auth phase timing even if access is denied (#11884arrow-up-right)

  • Bugfix to mark rows as invalid in case primary time column is out of range (#11907arrow-up-right)

  • Fix to radomize server port to avoid port already bind issue (#11861arrow-up-right)

  • Add LazyRow abstraction for previously indexed record (#11826arrow-up-right)

  • Config Validation for upsert table to not assign COMPLETED segments to another server (#11852arrow-up-right)

  • Bugfix to resolve dependency conflict in pinot-protobuf module (#11867arrow-up-right)

  • Fix case of useMultistageEngine property reference in JsonAsyncHttpPinotClientTransportFactory (#11820arrow-up-right)

  • Bugfix to add woodstox-core to pinot-s3 dependencies and fix stack trace (#11799arrow-up-right)

  • Fix to move pinot-segment-local test from unit test suite 1 to 2 (#11865arrow-up-right)

  • Observability fix to log upsert config when initializing the metadata manager (#11864arrow-up-right)

  • Fix to improve tests when errors are received in the consumer thread (#11858arrow-up-right)

  • Fix for flaky ArrayAgg test (#11860arrow-up-right)

  • Fix for flaky tests in TupleSelectionTransformFunctionsTest (#11848arrow-up-right)

  • Fix for arrayAgg null support (#11853arrow-up-right)

  • Fix the bug of reading decimal value stored in int32 or int64 (#11840arrow-up-right)

  • Remove duplicate pinot-integration-tests from unit test suite 2 (#11844arrow-up-right)

  • Fix for a null handling error in queries (#11829arrow-up-right)

  • Fix the way of fetching the segment zk metadata for task generators (#11832arrow-up-right)

  • Make testInvalidateCachedControllerLeader times based on getMinInvalidateIntervalMs (#11815arrow-up-right)

  • Update doap to reflect latest release (#11827arrow-up-right)

  • Clean up integration test pom file (#11817arrow-up-right)

  • Bugfix to exclude OFFLINE segments when reading server to segments map (#11818arrow-up-right)

  • Add tests for zstd compressed parquet files (#11808arrow-up-right)

  • Fix job submission time for reload and foce commit job (#11803arrow-up-right)

  • Remove actually unsupported config that selectively enable nullable columns (#10653arrow-up-right)

  • Fix LLCRealtimeClusterIntegrationTest.testReset (#11806arrow-up-right)

  • Use expected version in api for table config read modify write change (#11782arrow-up-right)

  • Move jobId out of rebalanceConfig (#11790arrow-up-right)

  • Fix PeerServerSegmentFinder not respecting HTTPS port (#11752arrow-up-right)

  • Enhanced geospatial v2 integration tests (#11741arrow-up-right)

  • Add integration test for rebalance in upsert tables (#11568arrow-up-right)

  • Fix trivy CI issue (#11757arrow-up-right)

  • Cleanup rebalance configs by adding a RebalanceConfig class (#11730arrow-up-right)

  • Fix a protobuf comment to be more precise (#11735arrow-up-right)

  • Move scala dependencies to root pom (#11671arrow-up-right)

  • Fix ProtoBuf inputformat plug-in handling for null values (#11723arrow-up-right)

  • Bugfix where segment download URI is invalid after same CRC refresh using tar push (#11720arrow-up-right)

  • Fix in TableCacheTest (#11717arrow-up-right)

  • Add more test for broker jersey bounded thread pool (#11705arrow-up-right)

  • Fix bug in gapfill with SumAvgGapfillProcessor. (#11714arrow-up-right)

  • Bugfix to allow GcsPinotFS to work with granular permissions (#11655arrow-up-right)

  • Fix default log4j2 config file path in helm chart (#11707arrow-up-right)

  • Refactor code and doc occurrences of argmin/max -> exprmin/max (#11700arrow-up-right)

  • Make constructor and functions public to be used from scheduler plugins (#11699arrow-up-right)

  • Bugfix to change json_format to return java null when java null is received (#11673arrow-up-right)

  • Fix the potential access to upsert metadata manager after it is closed (#11692arrow-up-right)

  • Bugfix to use isOptional instead of the deprecated hasOptional Keyword (#11682arrow-up-right)

  • Fix logging issue in RealtimeTableDataManager (#11693arrow-up-right)

  • Cleanup some reader/writer logic for raw forward index (#11669arrow-up-right)

  • Do not execute spotless in Java 21 (#11670arrow-up-right)

  • Update license-maven-plugin (#11665arrow-up-right)

  • Bugfix to allow deletion of local files with special characters (#11664arrow-up-right)

  • Clean up CaseTransformFunction::constructStatementListLegacy. (#11339arrow-up-right)

  • Bugfix to force FileChannel to commit data to disk (#11625arrow-up-right)

  • Remove the old deprecated commit end without metadata (#11662arrow-up-right)

  • Fix for a jackson vulnerability (#11619arrow-up-right)

  • Refactor BasicAuthUtils from pinot-core to pinot-common and remove pinot-core dependency from pinot-jdbc-client (#11620arrow-up-right)

  • Bugfix to support several extensions for different indexes (#11600arrow-up-right)

  • Fix the alias handling in single-stage engine (#11610arrow-up-right)

  • Fix to use constant null place holder (#11615arrow-up-right)

  • Refactor to move all BlockValSet into the same package (#11616arrow-up-right)

  • Remove deprecated Request class from pinot-java-client (#11614arrow-up-right)

  • Refactoring to remove old thirdeye files. (#11609arrow-up-right)

  • Testing fix to use builder method in integration test (#11564arrow-up-right)

  • Fix the broken Pinot JDBC client. (#11606arrow-up-right)

  • Bugfix to change the Forbidden error to Unauthorized (#11501arrow-up-right)

  • Fix for schema add UI issue that passing wrong data in the request header (#11602arrow-up-right)

  • Remove/Deprecate HLC handling code (#11590arrow-up-right)

  • Fix the bug of using push time to identify new created segment (#11599arrow-up-right)

  • Bugfix in CSVRecordReader when using line iterator (#11581arrow-up-right)

  • Remove split commit and some deprecated config for real-time protocol on controller (#11663)Improved validation for single argument aggregation functions (#11556arrow-up-right)

  • Fix to not emit lag once tabledatamanager shutdown (#11534arrow-up-right)

  • Bugfix to fail reload if derived columns can't be created (#11559arrow-up-right)

  • Fix the double unescape of property value (#12405arrow-up-right)

  • Fix for the backward compatible issue that existing metadata may contain unescaped characters (#12393arrow-up-right)

  • Skip invalid json string rather than throwing error during json indexing (#12238arrow-up-right)

  • Fixing the multiple files concurrent write issue when reloading SSLFactory (#12384arrow-up-right)

  • Fix memory leaking issue by making thread local variable static (#12242arrow-up-right)

  • Bugfixfor Upsert compaction task generator (#12380arrow-up-right)

  • Log information about SSLFactory renewal (#12357arrow-up-right)

  • Fixing array literal usage for vector (#12365arrow-up-right)

  • Fixing quickstart table baseballStats minion ingestion (#12371arrow-up-right)

  • Fix backward compatible issue in DistinctCountThetaSketchAggregationFunction (#12347arrow-up-right)

  • Bugfix to skip instead of throwing error on 'getValidDocIdMetadata' (#12360arrow-up-right)

  • Fix to clean up segment metadata when the associated segment gets deleted from remote store (#12350arrow-up-right)

  • Fix getBigDecimal() scale throwing rounding error (#12326arrow-up-right)

  • Workaround fix for the problem of Helix sending 2 transitions for CONSUMING -> DROPPED (#12351arrow-up-right)

  • Bugfix for making nonLeaderForTables exhaustive (#12345arrow-up-right)

  • Bugfixes for graceful interrupt handling of mutable lucene index (#11558arrow-up-right,#12274arrow-up-right)

  • Remove split commit and some deprecated config for real-time protocol on controller (#11663arrow-up-right)

  • Update the table config in quick start (#11652arrow-up-right)

  • Deprecate k8s skaffold scripts and move helm to project root directory (#11648arrow-up-right)

  • Fix NPE in SingleColumnKeySelector (#11644arrow-up-right)

  • Simplify kafka build and remove old kafka 0.9 files (#11638arrow-up-right)

  • Adding comments for docker image tags, make a hyper link of helmChart from root directory (#11646arrow-up-right)

  • Improve the error response on controller. (#11624arrow-up-right)

  • Simplify authrozation for table config get (#11640arrow-up-right)

  • Bugfix to remove segments with empty download url in UpsertCompactionTask (#12320arrow-up-right)

  • Test changes to make taskManager resources protected for derived classes to override in their setUp() method. (#12335arrow-up-right)

  • Also, we allow to configure invalidDocIdsType to UpsertCompactionTask for advanced user.
    1. snapshot: Default validDocIds type. This indicates that the validDocIds bitmap is loaded from the snapshot from the Pinot segment. UpsertConfig's enableSnapshot must be enabled for this type.

      1. onHeap: the validDocIds bitmap will be fetched from the server.

      2. onHeapWithDelete: the validDocIds bitmap will be fetched from the server. This will also take account into the deleted documents. UpsertConfig's deleteRecordColumn must be provided for this type.

  • Removal of the feature flag allow.table.name.with.database (#12402arrow-up-right)

  • Error handling to throw exception when schema name doesn't match table name during table creation (#11591arrow-up-right)

  • Fix type cast issue with dateTimeConvert scalar function (#11839arrow-up-right, #11971arrow-up-right)

  • Incompatible API fix to remove table state update operation in GET call (#11621arrow-up-right)

  • Use string to represent BigDecimal datatype in JSON response (#11716arrow-up-right)

  • Single quoted literal will not have its type auto-derived to maintain SQL compatibility (#11763arrow-up-right)

  • Changes to always use split commit on server and disables the option to disable it (#11680arrow-up-right, #11687arrow-up-right)

  • Change to not allow NaN as default value for Float and Double in Schemas (#11661arrow-up-right)

  • Code cleanup and refactor that removes TableDataManagerConfig (#12189arrow-up-right)

  • Fix partition handling for consistency of values between query and segment (#12115arrow-up-right)

  • Changes for migration to commons-configuration2 (#11985arrow-up-right)

  • Cleanup to simplify the upsert metadata manager constructor (#12120arrow-up-right)

  • Fixes typo in pom.xml (#11997arrow-up-right)

  • JDBC Driver fixes to support Jetbrains Intellij/Datagrip database tooling (#11814arrow-up-right)

  • Fix regression in ForwardIndexType for noDictionaryConfig and noDictionaryColumns (#11784arrow-up-right)

  • Separate pr test scripts and codecov (#11804arrow-up-right)

  • Bugfix to make reload status should only count online/consuming segments (#11787arrow-up-right)

  • Fix flaky TableViewsTest (#11770arrow-up-right)

  • Fix a flaky test (#11771arrow-up-right)

  • Cleanup to fee more disk for trivy job (#11780arrow-up-right)

  • Fix schema name in table config during controller startup (#11574arrow-up-right)

  • Prevent NPE when attempt to fetch partition information fails (#11769arrow-up-right)

  • Added UTs for null handling in CaseTransform function. (#11721arrow-up-right)

  • Bugfix to disallow peer download when replication is < 2 (#11469arrow-up-right)

  • Update s todocker image and github action scripts (#12378arrow-up-right)

  • Enhancements to queries test framework (#12215arrow-up-right)

  • Upgrade Avro dependency to 1.10.2 (#11698arrow-up-right)
  • Upgrade testng version to 7.8.0 (#11462arrow-up-right)

  • Update lombok version and config (#11742arrow-up-right)

  • Upgrading Apache Helix to 1.3.1 version (#11754arrow-up-right)

  • Upgrade spark from 3.2 to 3.5 (#11702arrow-up-right)

  • Added commons-configuration2 dependency. (#11792arrow-up-right)

  • Upgrade confluent libraries to 7.2.6 to fix some errors related to optional proto fields (#11753arrow-up-right)

  • Upgrade lucene to 9.8.0 and upgrade text index version (#11857arrow-up-right)

  • Upgrade the PinotConfiguartion to commons-configuartion2(#11916arrow-up-right)

  • Pre PinotConfig commons-configuartions2 upgrade (#11868arrow-up-right)

  • Bump commons-codec:commons-codec from 1.15 to 1.16.0 (#12204arrow-up-right)

  • Bump flink.version from 1.12.0 to 1.14.6 (#12202arrow-up-right)

  • Bump com.yscope.clp:clp-ffi from 0.4.3 to 0.4.4 (#12203arrow-up-right)

  • Bump org.apache.spark:spark-launcher_2.12 from 3.2.1 to 3.5.0 (#12199arrow-up-right)

  • Bump io.grpc:grpc-context from 1.59.0 to 1.60.1 (#12198arrow-up-right)

  • Bump com.azure:azure-core from 1.37.0 to 1.45.1 (#12193arrow-up-right)

  • Bump org.freemarker:freemarker from 2.3.30 to 2.3.32 (#12192arrow-up-right)

  • Bump com.google.auto.service:auto-service from 1.0.1 to 1.1.1 (#12183arrow-up-right)

  • Bump dropwizard-metrics.version from 4.2.22 to 4.2.23 (#12178arrow-up-right)

  • Bump org.apache.yetus:audience-annotations from 0.13.0 to 0.15.0 (#12170arrow-up-right)

  • Bump com.gradle:common-custom-user-data-maven-extension (#12171arrow-up-right)

  • Bump org.apache.httpcomponents:httpclient from 4.5.13 to 4.5.14 (#12172arrow-up-right)

  • Bump org.glassfish.tyrus.bundles:tyrus-standalone-client (#12162arrow-up-right)

  • Bump com.google.api.grpc:proto-google-common-protos (#12159arrow-up-right)

  • Bump org.apache.datasketches:datasketches-java from 4.1.0 to 5.0.0 (#12161arrow-up-right)

  • Bump org.apache.zookeeper:zookeeper from 3.6.3 to 3.7.2 (#12152arrow-up-right)

  • Bump org.apache.commons:commons-collections4 from 4.1 to 4.4 (#12149arrow-up-right)

  • Bump log4j.version from 2.20.0 to 2.22.0 (#12143arrow-up-right)

  • Bump com.github.luben:zstd-jni from 1.5.5-6 to 1.5.5-11 (#12125arrow-up-right)

  • Bump com.google.guava:guava from 32.0.1-jre to 32.1.3-jre (#12124arrow-up-right)

  • Bump org.apache.avro:avro from 1.10.2 to 1.11.3 (#12116arrow-up-right)

  • Bump org.apache.maven.plugins:maven-assembly-plugin from 3.1.1 to 3.6.0 (#12109arrow-up-right)

  • Bump net.java.dev.javacc:javacc from 7.0.10 to 7.0.13 (#12103arrow-up-right)

  • Bump com.azure:azure-identity from 1.8.1 to 1.11.1 (#12095arrow-up-right)

  • Bump xml-apis:xml-apis from 1.4.01 to 2.0.2 (#12082arrow-up-right)

  • Bump up the parquet version to 1.13.1 (#12076arrow-up-right)

  • Bump io.grpc:grpc-context from 1.14.0 to 1.59.0 (#12034arrow-up-right)

  • Bump org.reactivestreams:reactive-streams from 1.0.3 to 1.0.4 (#12033arrow-up-right)

  • Bump org.codehaus.mojo:appassembler-maven-plugin from 1.10 to 2.1.0 (#12030arrow-up-right)

  • Bump com.google.code.findbugs:jsr305 from 3.0.0 to 3.0.2 (#12031arrow-up-right)

  • Bump org.jacoco:jacoco-maven-plugin from 0.8.9 to 0.8.11 (#12024arrow-up-right)

  • Bump dropwizard-metrics.version from 4.2.2 to 4.2.22 (#12022arrow-up-right)

  • Bump grpc.version from 1.53.0 to 1.59.0 (#12023arrow-up-right)

  • Bump com.google.code.gson:gson from 2.2.4 to 2.10.1 (#12009arrow-up-right)

  • Bump net.nicoulaj.maven.plugins:checksum-maven-plugin from 1.8 to 1.11 (#12008arrow-up-right)

  • Bump circe.version from 0.14.2 to 0.14.6 (#12006arrow-up-right)

  • Bump com.mercateo:test-clock from 1.0.2 to 1.0.4 (#12005arrow-up-right)

  • Bump simpleclient_common.version from 0.8.1 to 0.16.0 (#11986arrow-up-right)

  • Bump com.jayway.jsonpath:json-path from 2.7.0 to 2.8.0 (#11987arrow-up-right)

  • Bump commons-net:commons-net from 3.1 to 3.10.0 (#11982arrow-up-right)

  • Bump org.scalatest:scalatest-maven-plugin from 1.0 to 2.2.0 (#11973arrow-up-right)

  • Bump io.netty:netty-bom from 4.1.94.Final to 4.1.100.Final (#11972arrow-up-right)

  • Bump com.google.errorprone:error_prone_annotations from 2.3.4 to 2.23.0 (#11905arrow-up-right)

  • Bump net.minidev:json-smart from 2.4.10 to 2.5.0 (#11875arrow-up-right)

  • Bump org.yaml:snakeyaml from 2.0 to 2.2 (#11876arrow-up-right)

  • Bump browserify-sign in /pinot-controller/src/main/resources (#11896arrow-up-right)

  • Bump org.easymock:easymock from 4.2 to 5.2.0 (#11854arrow-up-right)

  • Bump org.codehaus.mojo:exec-maven-plugin from 1.5.0 to 3.1.0 (#11856arrow-up-right)

  • Bump com.github.luben:zstd-jni from 1.5.2-3 to 1.5.5-6 (#11855arrow-up-right)

  • Bump aws.sdk.version from 2.20.94 to 2.20.137 (#11463arrow-up-right)

  • Bump org.xerial.snappy:snappy-java from 1.1.10.1 to 1.1.10.4 (#11678arrow-up-right)

  • #11976arrow-up-right
    #12079arrow-up-right
    #11937arrow-up-right
    #11822arrow-up-right
    #12025arrow-up-right
    #11956arrow-up-right
    #12248arrow-up-right
    #12251arrow-up-right
    #12237arrow-up-right
    #12240arrow-up-right
    #12292arrow-up-right
    #12220arrow-up-right
    #12277arrow-up-right
    #12325arrow-up-right
    #12276arrow-up-right
    #12290arrow-up-right
    #12088arrow-up-right
    #12175arrow-up-right
    #12068arrow-up-right
    Configure OAuth2 authentication in Pulsar clientsarrow-up-right
    #12072arrow-up-right
    #11977arrow-up-right
    #12037arrow-up-right
    #12027arrow-up-right
    #12049arrow-up-right
    #11960arrow-up-right
    #11877arrow-up-right
    #11744arrow-up-right
    #11578arrow-up-right
    herearrow-up-right
    #11859arrow-up-right
    #11811arrow-up-right
    #11740arrow-up-right
    #11835arrow-up-right
    #11774arrow-up-right
    #11710arrow-up-right
    #11809arrow-up-right
    #11604arrow-up-right
    #11674arrow-up-right
    #11555arrow-up-right
    #11654arrow-up-right
    #11098arrow-up-right
    Apache Datasketchesarrow-up-right
    #11576arrow-up-right
    #11509arrow-up-right
    #12307arrow-up-right
    #10651arrow-up-right
    #11346arrow-up-right
    herearrow-up-right
    #11773arrow-up-right
    #11739arrow-up-right
    #11822arrow-up-right
    #11778arrow-up-right
    #12278arrow-up-right
    #12118arrow-up-right
    #12042arrow-up-right
    #12210arrow-up-right
    #12253arrow-up-right
    #12200arrow-up-right
    #12223arrow-up-right
    12330arrow-up-right
    #12275arrow-up-right
    #12329arrow-up-right
    #12327arrow-up-right
    #12131arrow-up-right
    #12300arrow-up-right
    #12346arrow-up-right
    #11612arrow-up-right
    #11684arrow-up-right
    design documentarrow-up-right
    fromDateTime(colContainsMalformedStr, '<dateTimeFormat>', '<timezone>', <default_value>)
    "tableIndexConfig": {
          ..
          "segmentPartitionConfig": {
            "columnPartitionMap": {
              "memberId": {
                "functionName": "Murmur3",
                "numPartitions": 3 
              },
              ..
            }
          }
    "tableIndexConfig": {
          ..
          "segmentPartitionConfig": {
            "columnPartitionMap": {
              "memberId": {
                "functionName": "Murmur3",
                "numPartitions": 3,
                "functionConfig": {
                   "seed": "9001"
                 },
              },
              ..
            }
          }
     "tableIndexConfig": {
          ..
          "segmentPartitionConfig": {
            "columnPartitionMap": {
              "memberId": {
                "functionName": "Murmur3",
                "numPartitions": 3,
                "functionConfig" :{
                   "seed": "9001"
                   "variant": "x64_32"
                 },
              },
              ..
            }
          }
    The overriding order of priority is:
    1. QueryOption  -> maxServerResponseSizeBytes
    2. QueryOption  -> maxQueryResponseSizeBytes
    3. TableConfig  -> maxServerResponseSizeBytes
    4. TableConfig  -> maxQueryResponseSizeBytes
    5. BrokerConfig -> pinot.broker.max.server.response.size.bytes
    6. BrokerConfig -> pinot.broker.max.query.response.size.bytes
    "task": {
      "taskTypeConfigsMap": {
        "<task_name>": {
          "segmentMapperFileSizeThresholdInBytes": "1000000000"
        }
      }
    }
    "routing": {
       ...          
       "useFixedReplica": true
    }
    "stream.pulsar.issuerUrl": "https://auth.streamnative.cloud"
    "stream.pulsar.credsFilePath": "file:///path/to/private_creds_file
    "stream.pulsar.audience": "urn:sn:pulsar:test:test-cluster"
    SELECT ProductId, UserId, l2_distance(embedding, ARRAY[-0.0013143676,-0.011042999,...]) AS l2_dist, n_tokens, combined
    FROM fineFoodReviews
    WHERE VECTOR_SIMILARITY(embedding, ARRAY[-0.0013143676,-0.011042999,...], 5)  
    ORDER by l2_dist ASC 
    LIMIT 10
    fieldConfigList: [
       {
            "name": "columnName",
            "indexType": "TEXT",
            "indexTypes": [
              "TEXT"
            ],
            "properties": {
              "luceneAnalyzerClass": "org.apache.lucene.analysis.core.KeywordAnalyzer"
            },
          }
      ]
    {
      "schemaName": "blablabla",
      "dimensionFieldSpecs": [
        {
          "dataType": "INT",
          "name": "nullableField",
          "notNull": false
        },
        {
          "dataType": "INT",
          "name": "notNullableField",
          "notNull": true
        },
        {
          "dataType": "INT",
          "name": "defaultNullableField"
        },
        ...
      ],
      "enableColumnBasedNullHandling": true/false
    }
    "starTreeIndexConfigs": [
            {
              "dimensionsSplitOrder": [
                "a",
                "b",
                "c"
              ],
              "skipStarNodeCreationForDimensions": [],
              "functionColumnPairs": [],
              "aggregationConfigs": [
                {
                  "columnName": "column1",
                  "aggregationFunction": "SUM",
                  "compressionCodec": "SNAPPY"
                },
                {
                  "columnName": "column2",
                  "aggregationFunction": "distinctcounthll",
                  "compressionCodec": "LZ4"
                }
              ],
              "maxLeafRecords": 10000
            }
          ]
    "instanceAssignmentConfigMap": {
      "CONSUMING": {
        "partitionSelector": "MIRROR_SERVER_SET_PARTITION_SELECTOR",
        "replicaGroupPartitionConfig": { ... },
         "tagPoolConfig": {
           ...
           "tag": "mt1_REALTIME"
         }
         ...
     }
     "COMPLETED": {
       "partitionSelector": "MIRROR_SERVER_SET_PARTITION_SELECTOR",
       "replicaGroupPartitionConfig": { ... },
        "tagPoolConfig": {
           ...
           "tag": "mt1_OFFLINE"
         }
         ...
     },
     "instancePartitionsMap": {
          "CONSUMING": “mt1_CONSUMING"
          "COMPLETED": "mt1_OFFLINE"
     },
    arrayIndexOfInt(int[] value, int valToFind)
    arrayIndexOfLong(int[] value, long valToFind)
    arrayIndexOfFloat(int[] value, float valToFind)
    arrayIndexOfDouble(int[] value, double valToFind)
    arrayIndexOfString(int[] value, String valToFind)
    intersectIndices(int[] values1, int[] values2)
    FREQUENTLONGSSKETCH(col, maxMapSize=256) -> Base64 encoded sketch object
    FREQUENTSTRINGSSKETCH(col, maxMapSize=256) -> Base64 encoded sketch object
    {
        "totalSegments": 31,
        "columnToIndexesCount":
        {
            "col1":
            {
                "dictionary": 31,
                "bloom": 0,
                "null": 0,
                "forward": 31,
                ...
                "inverted": 0,
                "some-dynamically-injected-index-type": 31,
            },
            "col2":
            {
                ...
            }
            ...
    }
    export PINOT_CONTROLLER_HOST=host
    export PINOT_SERVER_PROPERTY_WHATEVER=whatever_property
    export ANOTHER_VARIABLE=random
    DISTINCTCOUNTHLLPLUS(some_id, 12)
    {
      "upsertConfig": {
        "mode": "FULL",
        "enableSnapshot": true
      }
    }
    ...
    "task": {
      "taskTypeConfigsMap": {
        "UpsertCompactionTask": {
          "schedule": "0 */5 * ? * *",
          "bufferTimePeriod": "7d",
          "invalidRecordsThresholdPercent": "30",
          "invalidRecordsThresholdCount": "100000",
          "invalidDocIdsType": "SNAPSHOT/IN_MEMORY/IN_MEMORY_WITH_DELETE"
        }
      }
    }
    {
      "name": "myCol",
      "encodingType": "DICTIONARY",
      "compressionCodec": "MV_ENTRY_DICT"
    }
    {
      "name": "myCol",
      "encodingType": "DICTIONARY",
      "indexes": {
        "forward": {
          "dictIdCompressionType": "MV_ENTRY_DICT"
        }
      }
    }

    0.12.0

    hashtag
    Multi-Stage Query Engine

    hashtag
    New join semantics support

    • Left join ()

    • In-equi join ()

    • Full join ()

    • Right join ()

    • Semi join ()

    • Using keyword ()

    hashtag
    New sql semantics support:

    • Having ()

    • Order by ()

    • In/NotIn clause ()

    hashtag
    Performance enhancement

    • Thread safe query planning ()

    • Partial query execution and round robin scheduling ()

    • Improve data table serde ()

    hashtag
    Major updates

    • Force commit consuming segments by in

    • add a freshness based consumption status checker by in

    • Add metrics to track controller segment download and upload requests in progress by in

    hashtag
    Other features/changes

    • Show most recent scheduling errors by in

    • Do not use aggregation result for distinct query in IntermediateResultsBlock by in

    • Emit metrics for ratio of actual consumption rate to rate limit in real-time tables by in

    hashtag
    UI Update & Improvement

    • Allow hiding query console tab based on cluster config ()

    • Allow hiding pinot broker swagger UI by config ()

    • Add UI to show fine-grained minion task progress ()

    hashtag
    Library version upgrade

    • Upgrade h3 lib from 3.7.2 to 4.0.0 to lower glibc requirement ()

    • Upgrade ZK version to 3.6.3 ()

    • Upgrade snakeyaml from 1.30 to 1.33 ()

    hashtag
    BugFixes

    • Fix bug with logging request headers by in

    • Fix a UT that only shows up on host with more cores by in

    • Fix message count by in

    Cast ()

  • LIke/Rexlike ()

  • Range predicate ()

  • Adding endpoint to download local log files for each component by in

  • [Feature] Add an option to search input files recursively in ingestion job. The default is set to true to be backward compatible. by in

  • add query cancel APIs on controller backed by those on brokers by in

  • Add Spark Job Launcher tool by in

  • Enable Consistent Data Push for Standalone Segment Push Job Runners by in

  • Allow server to directly return the final aggregation result by in

  • TierBasedSegmentDirectoryLoader to keep segments in multi-datadir by in

  • Adaptive Server Selection by in

  • [Feature] Support IsDistinctFrom and IsNotDistinctFrom by in

  • Allow ingestion of errored records with incorrect datatype by in

  • Allow setting custom time boundary for hybrid table queries by in

  • skip late cron job with max allowed delay by in

  • Do not allow implicit cast for BOOLEAN and TIMESTAMP by in

  • Add missing properties in CSV plugin by in

  • set MDC so that one can route minion task logs to separate files cleanly by in

  • Add a new API to fix segment date time in metadata by in

  • Update get bytes to return raw bytes of string and support getBytesMV by in

  • Exposing consumer's record lag in /consumingSegmentsInfo by in

  • Do not create dictionary for high-cardinality columns by in

  • get task runtime configs tracked in Helix by in

  • Add more options to json index by in

  • add SegmentTierAssigner and refine restful APIs to get segment tier info by in

  • Add segment level debug API by in

  • Add record availability lag for Kafka connector by in

  • notify servers that need to move segments to new tiers via SegmentReloadMessage by in

  • Allow to configure multi-datadirs as instance configs and a Quickstart example about them by in

  • Customize stopword for Lucene Index by in

  • Add memory optimized dimension table by in

  • ADLS file system upgrade by in

  • Added Delete Schema/Table pinot admin commands by in

  • Adding new ADLSPinotFS auth type: DEFAULT by in

  • Add rate limit to Kinesis requests by in

  • Adding configs for zk client timeout by in

  • add metrics entry offlineTableCount by in

  • refine query cancel resp msg by in

  • add @ManualAuthorization annotation for non-standard endpoints by in

  • Optimize ser/de to avoid using output stream by in

  • Add Support for Covariance Function by in

  • Throw an exception when MV columns are present in the order-by expression list in selection order-by only queries by in

  • Improve server query cancellation and timeout checking during execution by in

  • Add capabilities to ingest from another stream without disabling the real-time table by in

  • Add minMaxInvalid flag to avoid unnecessary needPreprocess by in

  • Add array cardinality function by in

  • TierBasedSegmentDirectoryLoader to keep segments in multi-datadir by in

  • Add support for custom null values in CSV record reader by in

  • Infer parquet reader type based on file metadata by in

  • Add Support for Cast Function on MV Columns by in

  • Allow ingestion of errored records with incorrect datatype by in

  • [Feature] Not Operator Transformation by in

  • Handle null string in CSV decoder by in

  • [Feature] Not scalar function by in

  • Add support for EXTRACT syntax and converts it to appropriate Pinot expression by in

  • Add support for Auth in controller requests in java query client by in

  • delete all related minion task metadata when deleting a table by in

  • BloomFilterRule should only recommend for supported column type by in

  • Support all the types in ParquetNativeRecordReader by in

  • Improve segment name check in metadata push by in

  • Allow expression transformer cotinue on error by in

  • skip late cron job with max allowed delay by in

  • Enhance and filter predicate evaluation efficiency by in

  • Deprecate instanceId Config For Broker/Minion Specific Configs by in

  • Optimize combine operator to fully utilize threads by in

  • Terminate the query after plan generation if timeout by in

  • [Feature] Support IsDistinctFrom and IsNotDistinctFrom by in

  • [Feature] Support Coalesce for Column Names by in

  • Disable logging for interrupted exceptions in kinesis by in

  • Benchmark thread cpu time by in

  • Use ISODateTimeFormat as default for SIMPLE_DATE_FORMAT by in

  • Extract the common logic for upsert metadata manager by in

  • Make minion task metadata manager methods more generic by in

  • Always pass clientId to kafka's consumer properties by in

  • Adaptive Server Selection by in

  • Refine IndexHandler methods a bit to make them reentrant by in

  • use MinionEventObserver to track finer grained task progress status on worker by in

  • Allow spaces in input file paths by in

  • Add support for gracefully handling the errors while transformations by in

  • Cache Deleted Segment Names in Server to Avoid SegmentMissingError by in

  • Handle Invalid timestamps by in

  • refine minion worker event observer to track finer grained progress for tasks by in

  • spark-connector should use v2/brokers endpoint by in

  • Remove netty server query support from presto-pinot-driver to remove pinot-core and pinot-segment-local dependencies by in

  • Adaptive Server Selection: Address pending review comments by in

  • track progress from within segment processor framework by in

  • Decouple ser/de from DataTable by in

  • collect file info like mtime, length while listing files for free by in

  • Extract record keys, headers and metadata from Stream sources by in

  • [pinot-spark-connector] Bump spark connector max inbound message size by in

  • refine the minion task progress api a bit by in

  • add parsing for AT TIME ZONE by in

  • Eliminate explosion of metrics due to gapfill queries by in

  • ForwardIndexHandler: Change compressionType during segmentReload by in

  • Introduce Segment AssignmentStrategy Interface by in

  • Add query interruption flag check to broker groupby reduction by in

  • adding optional client payload by in

  • [feature] distinct from scalar functions by in

  • Check data table version on server only for null handling by in

  • Add docId and column name to segment read exception by in

  • Sort scanning based operators by cardinality in AndDocIdSet evaluation by in

  • Do not fail CI when codecov upload fails by in

  • [Upsert] persist validDocsIndex snapshot for Pinot upsert optimization by in

  • broker filter by in

  • [feature] coalesce scalar by in

  • Allow setting custom time boundary for hybrid table queries by in

  • [GHA] add cache timeout by in

  • Optimize PinotHelixResourceManager.hasTable() by in

  • Include exception when upsert metadata manager cannot be created by in

  • allow to config task expire time by in

  • expose task finish time via debug API by in

  • Remove the wrong warning log in KafkaPartitionLevelConsumer by in

  • starting http server for minion worker conditionally by in

  • Make StreamMessage generic and a bug fix by in

  • Improve primary key serialization performance by in

  • [Upsert] Skip removing upsert metadata when shutting down the server by in

  • add array element at function by in

  • Handle the case when enableNullHandling is true and an aggregation function is used w/ a column that has an empty null bitmap by in

  • Support segment storage format without forward index by in

  • Adding SegmentNameGenerator type inference if not explicitly set in config by in

  • add version information to JMX metrics & component logs by in

  • remove unused RecordTransform/RecordFilter classes by in

  • Support rewriting forward index upon changing compression type for existing raw MV column by in

  • Support Avro's Fixed data type by in

  • [feature] [kubernetes] add loadBalancerSourceRanges to service-external.yaml for controller and broker by in

  • Limit up to 10 unavailable segments to be printed in the query exception by in

  • remove more unused filter code by in

  • Do not cache record reader in segment by in

  • make first part of user agent header configurable by in

  • optimize order by sorted ASC, unsorted and order by DESC cases by in

  • Enhance cluster config update API to handle non-string values properly by in

  • Reverts recommender REST API back to PUT (reverts PR ) by in

  • Remove invalid pruner names from server config by in

  • Using usageHelp instead of deprecated help in picocli commands by in

  • Handle unique query id on server by in

  • stateless group marker missing several by in

  • Support reloading consuming segment using force commit by in

  • Improve star-tree to use star-node when the predicate matches all the non-star nodes by in

  • add FetchPlanner interface to decide what column index to prefetch by in

  • Improve star-tree traversal using ArrayDeque by in

  • Handle errors in combine operator by in

  • return different error code if old version is not on master by in

  • Support creating dictionary at runtime for an existing column by in

  • check mutable segment explicitly instead of checking existence of indexDir by in

  • Remove leftover file before downloading segmentTar by in

  • add index key and size map to segment metadata by in

  • Use ideal state as source of truth for segment existence by in

  • Close Filesystem on exit with Minion Tasks by in

  • render the tables list even as the table sizes are loading by in

  • Add Support for IP Address Function by in

  • bubble up error messages from broker by in

  • Add support to disable the forward index for existing columns by in

  • show table metadata info in aggregate index size form by in

  • Preprocess immutable segments from REALTIME table conditionally when loading them by in

  • revert default timeout nano change in QueryConfig by in

  • AdaptiveServerSelection: Update stats for servers that have not responded by in

  • Add null value index for default column by in

  • [MergeRollupTask] include partition info into segment name by in

  • Adding a consumer lag as metric via a periodic task in controller by in

  • Deserialize Hyperloglog objects more optimally by in

  • Download offline segments from peers by in

  • Thread Level Usage Accounting and Query Killing on Server by in

  • Add max merger and min mergers for partial upsert by in

  • added pinot helm 0.2.6 with secure version pinot 0.11.0 by in

  • Combine the read access for replication config by in

  • add v1 ingress in helm chart by in

  • Optimize AdaptiveServerSelection for replicaGroup based routing by in

  • Do not sort the instances in InstancePartitions by in

  • Merge new columns in existing record with default merge strategy by in

  • Support disabling dictionary at runtime for an existing column by in

  • support BOOL_AND and BOOL_OR aggregate functions by in

  • Use Pulsar AdminClient to delete unused subscriptions by in

  • add table sort function for table size by in

  • In Kafka consumer, seek offset only when needed by in

  • fallback if no broker found for the specified table name by in

  • Allow liveness check during server shutting down by in

  • Allow segment upload via Metadata in MergeRollup Minion task by in

  • Add back the Helix workaround for missing IS change by in

  • Allow uploading real-time segments via CLI by in

  • Add capability to update and delete table config via CLI by in

  • default to TAR if push mode is not set by in

  • load startree index via segment reader interface by in

  • Allow collections for MV transform functions by in

  • Construct new IndexLoadingConfig when loading completed real-time segments by in

  • Make GET /tableConfigs backwards compatible in case schema does not match raw table name by in

  • feat: add compressed file support for ORCRecordReader by in

  • Add Variance and Standard Deviation Aggregation Functions by in

  • enable MergeRollupTask on real-time tables by in

  • Update cardinality when converting raw column to dict based by in

  • Add back auth token for UploadSegmentCommand by in

  • Improving gz support for avro record readers by in

  • Default column handling of noForwardIndex and regeneration of forward index on reload path by in

  • [Feature] Support coalesce literal by in

  • Ability to initialize S3PinotFs with serverSideEncryption properties when passing client directly by in

  • handle pending minion tasks properly when getting the task progress status by in

  • allow gauge stored in metric registry to be updated by in

  • support case-insensitive query options in SET syntax by in

  • pin versions-maven-plugin to 2.13.0 by in

  • Pulsar Connection handler should not spin up a consumer / reader by in

  • Handle in-memory segment metadata for index checking by in

  • Support the cross-account access using IAM role for S3 PinotFS by in

  • report minion task metadata last update time as metric by in

  • support SKEWNESS and KURTOSIS aggregates by in

  • emit minion task generation time and error metrics by in

  • Use the same default time value for all replicas by in

  • Reduce the number of segments to wait for convergence when rebalancing by in

  • Add UI to track segment reload progress ()

  • Show minion task runtime config details in UI ()

  • Redefine the segment status ()

  • Show an option to reload the segments during edit schema ()

  • Load schema UI async ()

  • Fix blank screen when redirect to unknown app route ()

  • Upgrade RoaringBitmap from 0.9.28 to 0.9.35 ()

  • Upgrade spotless-maven-plugin from 2.9.0 to 2.28.0 ()

  • Upgrade decode-uri-component from 0.2.0 to 0.2.2 ()

  • Fix issue with auth AccessType in Schema REST endpoints by in

  • Fix PerfBenchmarkRunner to skip the tmp dir by in

  • Fix thrift deserializer thread safety issue by in

  • Fix transformation to string for BOOLEAN and TIMESTAMP by in

  • [hotfix] Add VARBINARY column to switch case branch by in

  • Fix annotation for "/recommender" endpoint by in

  • Fix jdk8 build issue due to missing pom dependency by in

  • Fix pom to use pinot-common-jdk8 for pinot-connector jkd8 java client by in

  • Fix log to reflect job type by in

  • [Bugfix] schema update bug fix by in

  • fix histogram null pointer exception by in

  • Fix thread safety issues with SDF (WIP) by in

  • Bug fix: failure status in ingestion jobs doesn't reflect in exit code by in

  • Fix skip segment logic in MinMaxValueBasedSelectionOrderByCombineOperator by in

  • Fix the bug of hybrid table request using the same request id by in

  • Fix the range check for range index on raw column by in

  • Fix Data-Correctness Bug in GTE Comparison in BinaryOperatorTransformFunction by in

  • extend PinotFS impls with listFilesWithMetadata and some bugfix by in

  • fix null transform bound check by in

  • Fix JsonExtractScalar when no value is extracted by in

  • Fix AddTable for real-time tables by in

  • Fix some type convert scalar functions by in

  • fix spammy logs for ConfluentSchemaRegistryRealtimeClusterIntegrationTest [MINOR] by in

  • Fix timestamp index on column of preserved key by in

  • Fix record extractor when ByteBuffer can be reused by in

  • Fix explain plan ALL_SEGMENTS_PRUNED_ON_SERVER node by in

  • Fix time validation when data type needs to be converted by in

  • UI: fix incorrect task finish time by in

  • Fix the bug where uploaded segments cannot be deleted on real-time table by in

  • [bugfix] correct the dir for building segments in FileIngestionHelper by in

  • Fix NonAggregationGroupByToDistinctQueryRewriter by in

  • fix distinct result return by in

  • Fix GcsPinotFS by in

  • fix DataSchema thread-safe issue by in

  • Bug fix: Add missing table config fetch for /tableConfigs list all by in

  • Fix re-uploading segment when the previous upload failed by in

  • Fix string split which should be on whole separator by in

  • Fix server request sent delay to be non-negative by in

  • bugfix: Add missing BIG_DECIMAL support for GenericRow serde by in

  • Fix extra restlet resource test which should be stateless by in

  • AdaptiveServerSelection: Fix timer by in

  • fix PinotVersion to be compatible with prometheus by in

  • Fix the setup for ControllerTest shared cluster by in

  • [hotfix]groovy class cache leak by in

  • Fix TIMESTAMP index handling in SegmentMapper by in

  • Fix the server admin endpoint cache to reflect the config changes by in

  • [bugfix] fix case-when issue by in

  • [bugfix] Let StartControllerCommand also handle "pinot.zk.server", "pinot.cluster.name" in default conf/pinot-controller.conf by in

  • [hotfix] semi-join opt by in

  • Fixing the rebalance issue for real-time table with tier by in

  • UI: show segment debug details when segment is in bad state by in

  • Fix the replication in segment assignment strategy by in

  • fix potential fd leakage for SegmentProcessorFramework by in

  • Fix NPE when reading ZK address from controller config by in

  • have query table list show search bar; fix InstancesTables filter by in

  • [pinot-spark-connector] Fix empty data table handling in GRPC reader by in

  • [bugfix] fix mergeRollupTask metrics by in

  • Bug fix: Get correct primary key count by in

  • Fix issues for real-time table reload by in

  • UI: fix segment status color remains same in different table page by in

  • Fix bloom filter creation on BYTES by in

  • [hotfix] broker selection not using table name by in

  • Fix race condition when 2 segment upload occurred for the same segment by in

  • fix timezone_hour/timezone_minute functions by in

  • [Bugfix] Move brokerId extraction to BaseBrokerStarter by in

  • Fix ser/de for StringLongPair by in

  • bugfix dir check for HadoopPinotFS.copyFromLocalDir by in

  • Bugfix: Use correct exception import in TableRebalancer. by in

  • Fix NPE in AbstractMetrics From Race Condition by in

  • #9466arrow-up-right
    #9448arrow-up-right
    #9907arrow-up-right
    #9907arrow-up-right
    #9367arrow-up-right
    #9373arrow-up-right
    #9274arrow-up-right
    #9279arrow-up-right
    #9374arrow-up-right
    #9344arrow-up-right
    #9753arrow-up-right
    #9731arrow-up-right
    @sajjad-moradiarrow-up-right
    #9197arrow-up-right
    @jadami10arrow-up-right
    #9244arrow-up-right
    @gviedmaarrow-up-right
    #9258arrow-up-right
    @satishwaghelaarrow-up-right
    #9161arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9262arrow-up-right
    @sajjad-moradiarrow-up-right
    #9201arrow-up-right
    #9261arrow-up-right
    #9343arrow-up-right
    #9488arrow-up-right
    #9335arrow-up-right
    #9612arrow-up-right
    #9464arrow-up-right
    @abhs50arrow-up-right
    #9247arrow-up-right
    @klsincearrow-up-right
    #9257arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9271arrow-up-right
    #9384arrow-up-right
    #9654arrow-up-right
    #9445arrow-up-right
    @xiangfu0arrow-up-right
    #9259arrow-up-right
    @61yaoarrow-up-right
    #9265arrow-up-right
    @klsincearrow-up-right
    #9276arrow-up-right
    @KKcorpsarrow-up-right
    #9288arrow-up-right
    @yuanbensonarrow-up-right
    #9295arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9304arrow-up-right
    @klsincearrow-up-right
    #9306arrow-up-right
    @vvivekiyerarrow-up-right
    #9311arrow-up-right
    @61yaoarrow-up-right
    #9312arrow-up-right
    @KKcorpsarrow-up-right
    #9320arrow-up-right
    @saurabhd336arrow-up-right
    #9356arrow-up-right
    @klsincearrow-up-right
    #9372arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9385arrow-up-right
    @KKcorpsarrow-up-right
    #9399arrow-up-right
    @klsincearrow-up-right
    #9400arrow-up-right
    @KKcorpsarrow-up-right
    #9413arrow-up-right
    @61yaoarrow-up-right
    #9441arrow-up-right
    @navinaarrow-up-right
    #9515arrow-up-right
    @KKcorpsarrow-up-right
    #9527arrow-up-right
    @klsincearrow-up-right
    #9540arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9543arrow-up-right
    @klsincearrow-up-right
    #9598arrow-up-right
    @saurabhd336arrow-up-right
    #9609arrow-up-right
    @navinaarrow-up-right
    #9621arrow-up-right
    @klsincearrow-up-right
    #9624arrow-up-right
    @klsincearrow-up-right
    #9705arrow-up-right
    @jasperjiaguoarrow-up-right
    #9708arrow-up-right
    @KKcorpsarrow-up-right
    #9802arrow-up-right
    @xiangfu0arrow-up-right
    #9855arrow-up-right
    @bagipriyankarrow-up-right
    #9857arrow-up-right
    @xiangfu0arrow-up-right
    #9860arrow-up-right
    @KKcorpsarrow-up-right
    #9863arrow-up-right
    @xiangfu0arrow-up-right
    #9975arrow-up-right
    @walterddrarrow-up-right
    #9270arrow-up-right
    @klsincearrow-up-right
    #9242arrow-up-right
    @apucherarrow-up-right
    #9252arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9278arrow-up-right
    @SabrinaZhaozyfarrow-up-right
    #9236arrow-up-right
    @somandalarrow-up-right
    #9078arrow-up-right
    @jasperjiaguoarrow-up-right
    #9286arrow-up-right
    @sajjad-moradiarrow-up-right
    #9289arrow-up-right
    @npawararrow-up-right
    #9238arrow-up-right
    @walterddrarrow-up-right
    #9300arrow-up-right
    @klsincearrow-up-right
    #9306arrow-up-right
    @KKcorpsarrow-up-right
    #9318arrow-up-right
    @saurabhd336arrow-up-right
    #9294arrow-up-right
    @SabrinaZhaozyfarrow-up-right
    #9296arrow-up-right
    @KKcorpsarrow-up-right
    #9320arrow-up-right
    @61yaoarrow-up-right
    #9330arrow-up-right
    @KKcorpsarrow-up-right
    #9340arrow-up-right
    @61yaoarrow-up-right
    #9338arrow-up-right
    @tanmesharrow-up-right
    #9184arrow-up-right
    @KKcorpsarrow-up-right
    #9230arrow-up-right
    @zhtaoxiangarrow-up-right
    #9339arrow-up-right
    @yuanbensonarrow-up-right
    #9364arrow-up-right
    @xiangfu0arrow-up-right
    #9352arrow-up-right
    @zhtaoxiangarrow-up-right
    #9359arrow-up-right
    @xiangfu0arrow-up-right
    #9376arrow-up-right
    @klsincearrow-up-right
    #9372arrow-up-right
    @jasperjiaguoarrow-up-right
    #9336arrow-up-right
    @ankitsultanaarrow-up-right
    #9308arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9387arrow-up-right
    @jasperjiaguoarrow-up-right
    #9386arrow-up-right
    @61yaoarrow-up-right
    #9312arrow-up-right
    @61yaoarrow-up-right
    #9327arrow-up-right
    @KKcorpsarrow-up-right
    #9405arrow-up-right
    @jasperjiaguoarrow-up-right
    #9408arrow-up-right
    @KKcorpsarrow-up-right
    #9378arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9435arrow-up-right
    @saurabhd336arrow-up-right
    #9436arrow-up-right
    @navinaarrow-up-right
    #9444arrow-up-right
    @vvivekiyerarrow-up-right
    #9311arrow-up-right
    @klsincearrow-up-right
    #9440arrow-up-right
    @klsincearrow-up-right
    #9432arrow-up-right
    @KKcorpsarrow-up-right
    #9426arrow-up-right
    @KKcorpsarrow-up-right
    #9377arrow-up-right
    @ankitsultanaarrow-up-right
    #9423arrow-up-right
    @KKcorpsarrow-up-right
    #9355arrow-up-right
    @klsincearrow-up-right
    #9449arrow-up-right
    @itschrispeckarrow-up-right
    #9451arrow-up-right
    @xiangfu0arrow-up-right
    #9455arrow-up-right
    @vvivekiyerarrow-up-right
    #9462arrow-up-right
    @klsincearrow-up-right
    #9457arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9468arrow-up-right
    @klsincearrow-up-right
    #9466arrow-up-right
    @navinaarrow-up-right
    #9224arrow-up-right
    @cbalciarrow-up-right
    #9475arrow-up-right
    @klsincearrow-up-right
    #9482arrow-up-right
    @agavraarrow-up-right
    #9477arrow-up-right
    @elonazoulayarrow-up-right
    #9490arrow-up-right
    @vvivekiyerarrow-up-right
    #9454arrow-up-right
    @GSharayuarrow-up-right
    #9309arrow-up-right
    @jasperjiaguoarrow-up-right
    #9499arrow-up-right
    @walterddrarrow-up-right
    #9465arrow-up-right
    @61yaoarrow-up-right
    #9486arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9508arrow-up-right
    @KKcorpsarrow-up-right
    #9512arrow-up-right
    @jasperjiaguoarrow-up-right
    #9420arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9522arrow-up-right
    @deemoliuarrow-up-right
    #9062arrow-up-right
    @dongxiaomanarrow-up-right
    #9391arrow-up-right
    @61yaoarrow-up-right
    #9487arrow-up-right
    @saurabhd336arrow-up-right
    #9356arrow-up-right
    @walterddrarrow-up-right
    #9524arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9526arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9532arrow-up-right
    @klsincearrow-up-right
    #9530arrow-up-right
    @klsincearrow-up-right
    #9534arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9536arrow-up-right
    @klsincearrow-up-right
    #9542arrow-up-right
    @vvivekiyerarrow-up-right
    #9544arrow-up-right
    @KKcorpsarrow-up-right
    #9538arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9551arrow-up-right
    @walterddrarrow-up-right
    #9554arrow-up-right
    @nizarhejaziarrow-up-right
    #9566arrow-up-right
    @somandalarrow-up-right
    #9333arrow-up-right
    @timsantsarrow-up-right
    #9550arrow-up-right
    @agavraarrow-up-right
    #9578arrow-up-right
    @agavraarrow-up-right
    #9607arrow-up-right
    @vvivekiyerarrow-up-right
    #9510arrow-up-right
    @sajjad-moradiarrow-up-right
    #9642arrow-up-right
    @jameskelleherarrow-up-right
    #9494arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9617arrow-up-right
    @agavraarrow-up-right
    #9620arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9604arrow-up-right
    @rino-kadijkarrow-up-right
    #9471arrow-up-right
    @gortizarrow-up-right
    #8979arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9635arrow-up-right
    #9326arrow-up-right
    @yuanbensonarrow-up-right
    #9638arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9646arrow-up-right
    @navinaarrow-up-right
    #9608arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9648arrow-up-right
    @walterddrarrow-up-right
    #9673arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9640arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9667arrow-up-right
    @klsincearrow-up-right
    #9668arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9688arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9689arrow-up-right
    @SabrinaZhaozyfarrow-up-right
    #9686arrow-up-right
    @vvivekiyerarrow-up-right
    #9678arrow-up-right
    @klsincearrow-up-right
    #9718arrow-up-right
    @npawararrow-up-right
    #9719arrow-up-right
    @walterddrarrow-up-right
    #9712arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9735arrow-up-right
    @KKcorpsarrow-up-right
    #9681arrow-up-right
    @jadami10arrow-up-right
    #9741arrow-up-right
    @SabrinaZhaozyfarrow-up-right
    #9501arrow-up-right
    @agavraarrow-up-right
    #9754arrow-up-right
    @somandalarrow-up-right
    #9740arrow-up-right
    @walterddrarrow-up-right
    #9733arrow-up-right
    @klsincearrow-up-right
    #9772arrow-up-right
    @agavraarrow-up-right
    #9790arrow-up-right
    @vvivekiyerarrow-up-right
    #9801arrow-up-right
    @KKcorpsarrow-up-right
    #9777arrow-up-right
    @zhtaoxiangarrow-up-right
    #9815arrow-up-right
    @navinaarrow-up-right
    #9800arrow-up-right
    @priyenarrow-up-right
    #9749arrow-up-right
    @wirybeaverarrow-up-right
    #9710arrow-up-right
    @jasperjiaguoarrow-up-right
    #9727arrow-up-right
    @deemoliuarrow-up-right
    #9665arrow-up-right
    #9518arrow-up-right
    @bagipriyankarrow-up-right
    #9519arrow-up-right
    @snleeearrow-up-right
    #9849arrow-up-right
    @jhissearrow-up-right
    #9862arrow-up-right
    @vvivekiyerarrow-up-right
    #9803arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9866arrow-up-right
    @navinaarrow-up-right
    #9851arrow-up-right
    @vvivekiyerarrow-up-right
    #9868arrow-up-right
    @agavraarrow-up-right
    #9848arrow-up-right
    @navinaarrow-up-right
    #9859arrow-up-right
    @jadami10arrow-up-right
    #9844arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9896arrow-up-right
    @klsincearrow-up-right
    #9914arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9915arrow-up-right
    @KKcorpsarrow-up-right
    #9825arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9921arrow-up-right
    @KKcorpsarrow-up-right
    #9861arrow-up-right
    @KKcorpsarrow-up-right
    #9852arrow-up-right
    @klsincearrow-up-right
    #9935arrow-up-right
    @klsincearrow-up-right
    #9828arrow-up-right
    @saurabhd336arrow-up-right
    #9908arrow-up-right
    @vvivekiyerarrow-up-right
    #9938arrow-up-right
    @timsantsarrow-up-right
    #9922arrow-up-right
    @etolbakovarrow-up-right
    #9884arrow-up-right
    @snleeearrow-up-right
    #9910arrow-up-right
    @zhtaoxiangarrow-up-right
    #9890arrow-up-right
    @vvivekiyerarrow-up-right
    #9875arrow-up-right
    @timsantsarrow-up-right
    #9960arrow-up-right
    @snleeearrow-up-right
    #9951arrow-up-right
    @somandalarrow-up-right
    #9810arrow-up-right
    @61yaoarrow-up-right
    #9958arrow-up-right
    @npawararrow-up-right
    #9988arrow-up-right
    @klsincearrow-up-right
    #9911arrow-up-right
    @zhtaoxiangarrow-up-right
    #9961arrow-up-right
    @agavraarrow-up-right
    #9912arrow-up-right
    @jadami10arrow-up-right
    #9993arrow-up-right
    @navinaarrow-up-right
    #9893arrow-up-right
    @Jackie-Jiangarrow-up-right
    #10017arrow-up-right
    @snleeearrow-up-right
    #10009arrow-up-right
    @zhtaoxiangarrow-up-right
    #9954arrow-up-right
    @agavraarrow-up-right
    #10021arrow-up-right
    @zhtaoxiangarrow-up-right
    #10026arrow-up-right
    @Jackie-Jiangarrow-up-right
    #10029arrow-up-right
    @saurabhd336arrow-up-right
    #10028arrow-up-right
    #9521arrow-up-right
    #9652arrow-up-right
    #9699arrow-up-right
    #9762arrow-up-right
    #9781arrow-up-right
    #9888arrow-up-right
    #9730arrow-up-right
    #9877arrow-up-right
    #9941arrow-up-right
    @sajjad-moradiarrow-up-right
    #9293arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9298arrow-up-right
    @saurabhd336arrow-up-right
    #9299arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9287arrow-up-right
    @walterddrarrow-up-right
    #9313arrow-up-right
    @sajjad-moradiarrow-up-right
    #9326arrow-up-right
    @somandalarrow-up-right
    #9351arrow-up-right
    @somandalarrow-up-right
    #9353arrow-up-right
    @KKcorpsarrow-up-right
    #9381arrow-up-right
    @MeihanLiarrow-up-right
    #9382arrow-up-right
    @jasperjiaguoarrow-up-right
    #9428arrow-up-right
    @saurabhd336arrow-up-right
    #9425arrow-up-right
    @KKcorpsarrow-up-right
    #9410arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9434arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9443arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9453arrow-up-right
    @ankitsultanaarrow-up-right
    #9461arrow-up-right
    @klsincearrow-up-right
    #9478arrow-up-right
    @walterddrarrow-up-right
    #9495arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9500arrow-up-right
    @npawararrow-up-right
    #9506arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9509arrow-up-right
    @agavraarrow-up-right
    #9516arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9533arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9549arrow-up-right
    @somandalarrow-up-right
    #9572arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9569arrow-up-right
    @jayeshchoudharyarrow-up-right
    #9557arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9579arrow-up-right
    @zhtaoxiangarrow-up-right
    #9591arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9605arrow-up-right
    @walterddrarrow-up-right
    #9582arrow-up-right
    @lfernandez93arrow-up-right
    #9556arrow-up-right
    @walterddrarrow-up-right
    #9619arrow-up-right
    @timsantsarrow-up-right
    #9603arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9631arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9650arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9656arrow-up-right
    @timsantsarrow-up-right
    #9661arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9674arrow-up-right
    @vvivekiyerarrow-up-right
    #9697arrow-up-right
    @agavraarrow-up-right
    #9701arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9704arrow-up-right
    @walterddrarrow-up-right
    #9716arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9722arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9734arrow-up-right
    @walterddrarrow-up-right
    #9702arrow-up-right
    @thangnd197arrow-up-right
    #9739arrow-up-right
    @walterddrarrow-up-right
    #9779arrow-up-right
    @snleeearrow-up-right
    #9780arrow-up-right
    @jayeshchoudharyarrow-up-right
    #9700arrow-up-right
    @GSharayuarrow-up-right
    #9816arrow-up-right
    @klsincearrow-up-right
    #9797arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9751arrow-up-right
    @jadami10arrow-up-right
    #9742arrow-up-right
    @cbalciarrow-up-right
    #9837arrow-up-right
    @zhtaoxiangarrow-up-right
    #9864arrow-up-right
    @KKcorpsarrow-up-right
    #9876arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9885arrow-up-right
    @jayeshchoudharyarrow-up-right
    #9891arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9898arrow-up-right
    @walterddrarrow-up-right
    #9902arrow-up-right
    @jackjlliarrow-up-right
    #9905arrow-up-right
    @agavraarrow-up-right
    #9949arrow-up-right
    @jackjlliarrow-up-right
    #9965arrow-up-right
    @Jackie-Jiangarrow-up-right
    #9985arrow-up-right
    @klsincearrow-up-right
    #9979arrow-up-right
    @mayankshrivarrow-up-right
    #10025arrow-up-right
    @ankitsultanaarrow-up-right
    #10022arrow-up-right