apache / pinot

Apache Pinot - A realtime distributed OLAP datastore
https://pinot.apache.org/
Apache License 2.0
5.31k stars 1.24k forks source link

NullPointerException while running invalid queries. #6324

Open amrishlal opened 3 years ago

amrishlal commented 3 years ago

Running the following queries against the sample baseballStates table in Pinot query console causes NPE stack trace to show up in console:

select playerName, percentile(homeRuns, 80) from baseballStats limit 10

[
  {
    "errorCode": 200,
    "message": "QueryExecutionError:
java.lang.NullPointerException
  at org.apache.pinot.core.plan.maker.InstancePlanMakerImplV2.isFitForMetadataBasedPlan(InstancePlanMakerImplV2.java:193)
  at org.apache.pinot.core.plan.maker.InstancePlanMakerImplV2.makeSegmentPlanNode(InstancePlanMakerImplV2.java:145)
  at org.apache.pinot.core.plan.maker.InstancePlanMakerImplV2.makeInstancePlan(InstancePlanMakerImplV2.java:117)
  at org.apache.pinot.core.query.executor.ServerQueryExecutorV1Impl.processQuery(ServerQueryExecutorV1Impl.java:290)
  at org.apache.pinot.core.query.executor.ServerQueryExecutorV1Impl.processQuery(ServerQueryExecutorV1Impl.java:215)
  at org.apache.pinot.core.query.executor.QueryExecutor.processQuery(QueryExecutor.java:60)
  at org.apache.pinot.core.query.scheduler.QueryScheduler.processQueryAndSerialize(QueryScheduler.java:157)
  at org.apache.pinot.core.query.scheduler.QueryScheduler.lambda$createQueryFutureTask$0(QueryScheduler.java:141)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:111)
  at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:58)
  at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:75)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)"
  }
]

select playerName, percentile50mv(homeRuns) from baseballStats group by playerName limit 100

[
  {
    "errorCode": 200,
    "message": "QueryExecutionError:
java.lang.NullPointerException
  at org.apache.pinot.core.operator.combine.GroupByOrderByCombineOperator.getNextBlock(GroupByOrderByCombineOperator.java:247)
  at org.apache.pinot.core.operator.combine.GroupByOrderByCombineOperator.getNextBlock(GroupByOrderByCombineOperator.java:62)
  at org.apache.pinot.core.operator.BaseOperator.nextBlock(BaseOperator.java:49)
  at org.apache.pinot.core.operator.InstanceResponseOperator.getNextBlock(InstanceResponseOperator.java:37)
  at org.apache.pinot.core.operator.InstanceResponseOperator.getNextBlock(InstanceResponseOperator.java:26)
  at org.apache.pinot.core.operator.BaseOperator.nextBlock(BaseOperator.java:49)
  at org.apache.pinot.core.plan.GlobalPlanImplV0.execute(GlobalPlanImplV0.java:48)
  at org.apache.pinot.core.query.executor.ServerQueryExecutorV1Impl.processQuery(ServerQueryExecutorV1Impl.java:294)
  at org.apache.pinot.core.query.executor.ServerQueryExecutorV1Impl.processQuery(ServerQueryExecutorV1Impl.java:215)
  at org.apache.pinot.core.query.executor.QueryExecutor.processQuery(QueryExecutor.java:60)
  at org.apache.pinot.core.query.scheduler.QueryScheduler.processQueryAndSerialize(QueryScheduler.java:157)
  at org.apache.pinot.core.query.scheduler.QueryScheduler.lambda$createQueryFutureTask$0(QueryScheduler.java:141)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)"
  }
]
kishoreg commented 3 years ago

We have a PR out to catch invalid queries. Schema is still optional in Pinot for batch tables which makes it hard to enable this by default. But we plan to enable validation by default and provide the ability to disable.