Skip to content

Null Pointer Exception in arrayagg function with empty column data #13343

@Yuyaoo

Description

@Yuyaoo

Overview

I am observing an issue with the arrayagg function in queries. Specifically, when a column contains empty data, the arrayagg function triggers a Null Pointer Exception.

Details

For example, the following query results in NPE if accountId has empty results:
select arrayagg(accountId,'STRING',true) from table123 where accountId in (12345)

However, if ensuring the where clause for accountId has non-empty results, the query is successful.

In AggregationDataTableReducer.java in the pinot-core query service, I suspect the intermediateResults is empty on this line, causing the NPE.

Stack Trace

Caused by: java.lang.NullPointerException
        at it.unimi.dsi.fastutil.longs.LongArrayList.<init>(LongArrayList.java:132) ~[it.unimi.dsi.fastutil-8.5.13.jar:?]
        at org.apache.pinot.core.query.aggregation.function.array.BaseArrayAggLongFunction.extractFinalResult(BaseArrayAggLongFunction.java:99) ~[org.apache.pinot.pinot-core-1.2.0-dev-1354.jar:1.2.0-dev-1354-e07b576797e2dc834a60d8ee0da5d26a0b597e23]
        at org.apache.pinot.core.query.aggregation.function.array.BaseArrayAggLongFunction.extractFinalResult(BaseArrayAggLongFunction.java:30) ~[org.apache.pinot.pinot-core-1.2.0-dev-1354.jar:1.2.0-dev-1354-e07b576797e2dc834a60d8ee0da5d26a0b597e23]
        at org.apache.pinot.core.query.reduce.AggregationDataTableReducer.reduceWithIntermediateResult(AggregationDataTableReducer.java:110) ~[org.apache.pinot.pinot-core-1.2.0-dev-1354.jar:1.2.0-dev-1354-e07b576797e2dc834a60d8ee0da5d26a0b597e23]
        at org.apache.pinot.core.query.reduce.AggregationDataTableReducer.reduceAndSetResults(AggregationDataTableReducer.java:73) ~[org.apache.pinot.pinot-core-1.2.0-dev-1354.jar:1.2.0-dev-1354-e07b576797e2dc834a60d8ee0da5d26a0b597e23]
        at org.apache.pinot.core.query.reduce.BrokerReduceService.reduceOnDataTable(BrokerReduceService.java:158) ~[org.apache.pinot.pinot-core-1.2.0-dev-1354.jar:1.2.0-dev-1354-e07b576797e2dc834a60d8ee0da5d26a0b597e23]
        at org.apache.pinot.broker.requesthandler.SingleConnectionBrokerRequestHandler.processBrokerRequest(SingleConnectionBrokerRequestHandler.java:151) ~[org.apache.pinot.pinot-broker-1.2.0-dev-1354.jar:1.2.0-dev-1354-e07b576797e2dc834a60d8ee0da5d26a0b597e23]
        at org.apache.pinot.broker.requesthandler.BaseBrokerRequestHandler.handleRequest(BaseBrokerRequestHandler.java:792) ~[org.apache.pinot.pinot-broker-1.2.0-dev-1354.jar:1.2.0-dev-1354-e07b576797e2dc834a60d8ee0da5d26a0b597e23]
        at org.apache.pinot.broker.requesthandler.BaseBrokerRequestHandler.handleRequest(BaseBrokerRequestHandler.java:290) ~[org.apache.pinot.pinot-broker-1.2.0-dev-1354.jar:1.2.0-dev-1354-e07b576797e2dc834a60d8ee0da5d26a0b597e23]
        at org.apache.pinot.broker.requesthandler.BrokerRequestHandlerDelegate.handleRequest(BrokerRequestHandlerDelegate.java:104) ~[org.apache.pinot.pinot-broker-1.2.0-dev-1354.jar:1.2.0-dev-1354-e07b576797e2dc834a60d8ee0da5d26a0b597e23]
        at org.apache.pinot.broker.requesthandler.BrokerRequestHandler.handleRequest(BrokerRequestHandler.java:48) ~[org.apache.pinot.pinot-broker-1.2.0-dev-1354.jar:1.2.0-dev-1354-e07b576797e2dc834a60d8ee0da5d26a0b597e23]
        at com.linkedin.pinot.v2.broker.impl.rest.PinotServiceProxy.sendQueryRaw(PinotServiceProxy.java:312) ~[pinot-broker-impl-0.2.1163.jar:?]
        at com.linkedin.pinot.v2.broker.impl.rest.PinotServiceProxy.sendQuery(PinotServiceProxy.java:126) ~[pinot-broker-impl-0.2.1163.jar:?]
        at com.linkedin.pinot.v2.broker.impl.rest.QueryResource.getQueryResponse(QueryResource.java:92) ~[pinot-broker-impl-0.2.1163.jar:?]
        at com.linkedin.pinot.v2.broker.impl.rest.QueryResource.getQueryResponse(QueryResource.java:60) ~[pinot-broker-impl-0.2.1163.jar:?]
        at jdk.internal.reflect.GeneratedMethodAccessor159.invoke(Unknown Source) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
        at com.linkedin.restli.internal.server.RestLiMethodInvoker.doInvoke(RestLiMethodInvoker.java:143) ~[restli-server-29.0.1.jar:?]
        at com.linkedin.restli.internal.server.RestLiMethodInvoker.invoke(RestLiMethodInvoker.java:333) ~[restli-server-29.0.1.jar:?]
        at com.linkedin.restli.internal.server.filter.FilterChainDispatcherImpl.onRequestSuccess(FilterChainDispatcherImpl.java:47) ~[restli-server-29.0.1.jar:?]
        at com.linkedin.restli.internal.server.filter.RestLiFilterChainIterator.onRequest(RestLiFilterChainIterator.java:86) ~[restli-server-29.0.1.jar:?]
        at com.linkedin.restli.internal.server.filter.RestLiFilterChainIterator.lambda$onRequest$0(RestLiFilterChainIterator.java:73) ~[restli-server-29.0.1.jar:?]
        at java.util.concurrent.CompletableFuture.uniAcceptNow(CompletableFuture.java:753) ~[?:?]
        at java.util.concurrent.CompletableFuture.uniAcceptStage(CompletableFuture.java:731) ~[?:?]
        at java.util.concurrent.CompletableFuture.thenAccept(CompletableFuture.java:2108) ~[?:?]

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions