Query Options

This document contains all the available query options

Supported Query Options

KeyDescriptionDefault Behavior

timeoutMs

Timeout of the query in milliseconds

Use table/broker level timeout

enableNullHandling

To enable basic null support (IS NULL and IS NOT NULL) and generate the null index, set nullHandlingEnabled=true in the Table index configuration tableIndexConfig. When null support is enabled, IS NOT NULL and IS NULL evaluate to true or false according to whether a null is detected. See Null value support for more information. (introduced in 0.11.0)

false (disabled)

explainPlanVerbose

Return verbose result for EXPLAIN query (introduced in 0.11.0)

false (not verbose)

useMultistageEngine

Use multi-stage engine to execute the query (introduced in 0.11.0)

false (use single-stage engine)

maxExecutionThreads

Maximum threads to use to execute the query. Useful to limit the resource usage for expensive queries

Half of the CPU cores for non-group-by queries; all CPU cores for group-by queries

numReplicaGroupsToQuery

When replica-group based routing is enabled, use it to query multiple replica-groups (introduced in 0.11.0)

1 (only query servers within the same replica-group)

minSegmentGroupTrimSize

Server level config

minServerGroupTrimSize

Server level config

skipUpsert

For upsert-enabled table, skip the effect of upsert and query all the records. See Stream Ingestion with Upsert

false (exclude the replaced records)

useStarTree

Useful to debug the star-tree index (introduced in 0.11.0)

true (use star-tree if available)

AndScanReordering

disabled

maxRowsInJoin

Configure maximum rows allowed in join hash-table creation phase

default value read from cluster config

pinot.query.join.max.rows

if not set, the default will be

2^20 (1024*1024)

inPredicatePreSorted

(Only apply to STRING columns) Indicates that the values in the IN clause is already sorted, so that Pinot doesn't need to sort them again at query time

false (values in IN predicate is not pre-sorted)

inPredicateLookupAlgorithm

(Only apply to STRING columns) The algorithm to use to look up the dictionary ids for the IN clause values.

  • DIVIDE_BINARY_SEARCH: Sort the IN clause values and do binary search on both dictionary and IN clause values at same time to reduce the value lookups

  • SCAN: Sort the IN clause values and scan both dictionary and IN clause values to get the matching dictionary ids

  • PLAIN_BINARY_SEARCH: Do not sort the IN clause values, but directly binary search each IN clause value in the dictionary

DIVIDE_BINARY_SEARCH

maxServerResponseSizeBytes

Long value config indicating the maximum length of the serialized response per server for a query.

Overriding priortiy order: 1. QueryOption -> maxServerResponseSizeBytes

2. QueryOption -> maxQueryResponseSizeBytes

3. TableConfig -> maxServerResponseSizeBytes

4. TableConfig -> maxQueryResponseSizeBytes

5. BrokerConfig -> maxServerResponseSizeBytes

6. BrokerConfig -> maxServerResponseSizeBytes

maxQueryResponseSizeBytes

Long value config indicating the maximum serialized response size across all servers for a query. This value is equally divided across all servers processing the query.

Overriding priortiy order: 1. QueryOption -> maxServerResponseSizeBytes

2. QueryOption -> maxQueryResponseSizeBytes

3. TableConfig -> maxServerResponseSizeBytes

4. TableConfig -> maxQueryResponseSizeBytes

5. BrokerConfig -> maxServerResponseSizeBytes

6. BrokerConfig -> maxServerResponseSizeBytes

Set Query Options

SET statement

After release 0.11.0, query options can be set using the SET statement:

SET key1 = 'value1';
SET key2 = 123;
SELECT * FROM myTable

OPTION keyword (deprecated)

Before release 0.11.0, query options can be appended to the query with the OPTION keyword:

SELECT * FROM myTable OPTION(key1=value1, key2=123)
SELECT * FROM myTable OPTION(key1=value1) OPTION(key2=123)
SELECT * FROM myTable OPTION(timeoutMs=30000)