MeihanLi opened a new issue #8019:
URL: https://github.com/apache/pinot/issues/8019


   [Pinot SQL] It seems that non-aggregation group by only works for single 
value columns. Grouping by multi-value columns throws exceptions with error 
code 200. The exception message from Pinot Controller UI is redundant and it 
repeats the first message over 20 times and the detailed stack tree is not 
meaningful for us to understand what causes the issue. 
   
   Example tags_value (String array):
   `restaurant_professional,restaurant_fast,restaurant_fresh,restaurant_tasty`
   
   Example query:
   `select tags_value from myTable GROUP BY tags_value`
   
   Error message from Pinot Controller UI:
   `  {
       "errorCode": 200,
       "message": 
"QueryExecutionError:\njava.lang.UnsupportedOperationException\n\tat 
org.apache.pinot.segment.spi.index.reader.ForwardIndexReader.readDictIds(ForwardIndexReader.java:84)\n\tat
 
org.apache.pinot.core.common.DataFetcher$ColumnValueReader.readDictIds(DataFetcher.java:278)\n\tat
 
org.apache.pinot.core.common.DataFetcher.fetchDictIds(DataFetcher.java:88)\n\tat
 
org.apache.pinot.core.common.DataBlockCache.getDictIdsForSVColumn(DataBlockCache.java:99)\n\tat
 
org.apache.pinot.core.operator.docvalsets.ProjectionBlockValSet.getDictionaryIdsSV(ProjectionBlockValSet.java:69)\n\tat
 
org.apache.pinot.core.query.distinct.dictionary.DictionaryBasedSingleColumnDistinctOnlyExecutor.process(DictionaryBasedSingleColumnDistinctOnlyExecutor.java:42)\n\tat
 
org.apache.pinot.core.operator.query.DistinctOperator.getNextBlock(DistinctOperator.java:61)\n\tat
 
org.apache.pinot.core.operator.query.DistinctOperator.getNextBlock(DistinctOperator.java:38)\n\tat
 org.apache.pinot.core.operator.BaseOperator
 .nextBlock(BaseOperator.java:49)\n\tat 
org.apache.pinot.core.operator.combine.BaseCombineOperator.processSegments(BaseCombineOperator.java:150)\n\tat
 
org.apache.pinot.core.operator.combine.BaseCombineOperator$1.runJob(BaseCombineOperator.java:105)\n\tat
 
org.apache.pinot.core.util.trace.TraceRunnable.run(TraceRunnable.java:40)\n\tat 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\n\tat 
java.util.concurrent.FutureTask.run(FutureTask.java:266)"
     },`
   
   Error message from the server:
   `2022-01-10 19:16:24.768 [pqw-10] ERROR 
org.apache.pinot.core.operator.combine.BaseCombineOperator  - Caught exception 
while executing operator of index: 1 (query: QueryContext{_tableName='re
   staurant_bi_feedback_OFFLINE', _selectExpressions=[distinct(tags_value)], 
_aliasList=[null], _filter=rating_value > '0', _groupByExpressions=null, 
_havingFilter=null, _orderByExpressions=nul
   l, _limit=10, _offset=0, _queryOptions={responseFormat=sql, trace=true, 
groupByMode=sql, timeoutMs=16000}, _debugOptions=null, 
_brokerRequest=BrokerRequest(querySource:QuerySource(tableName:
   restaurant_bi_feedback_OFFLINE), 
pinotQuery:PinotQuery(dataSource:DataSource(tableName:restaurant_bi_feedback_OFFLINE),
 selectList:[Expression(type:FUNCTION, functionCall:Function(operator:D
   ISTINCT, operands:[Expression(type:IDENTIFIER, 
identifier:Identifier(name:tags_value))]))], 
filterExpression:Expression(type:FUNCTION, 
functionCall:Function(operator:GREATER_THAN, operands:[
   Expression(type:IDENTIFIER, identifier:Identifier(name:rating_value)), 
Expression(type:LITERAL, literal:<Literal longValue:0>)])), groupByList:[], 
orderByList:[], limit:10, queryOptions:{res
   ponseFormat=sql, trace=true, groupByMode=sql, timeoutMs=16000}))})
   java.lang.UnsupportedOperationException: null
           at 
org.apache.pinot.segment.spi.index.reader.ForwardIndexReader.readDictIds(ForwardIndexReader.java:84)
           at 
org.apache.pinot.core.common.DataFetcher$ColumnValueReader.readDictIds(DataFetcher.java:278)
           at 
org.apache.pinot.core.common.DataFetcher.fetchDictIds(DataFetcher.java:88)
           at 
org.apache.pinot.core.common.DataBlockCache.getDictIdsForSVColumn(DataBlockCache.java:99)
           at 
org.apache.pinot.core.operator.docvalsets.ProjectionBlockValSet.getDictionaryIdsSV(ProjectionBlockValSet.java:69)
           at 
org.apache.pinot.core.query.distinct.dictionary.DictionaryBasedSingleColumnDistinctOnlyExecutor.process(DictionaryBasedSingleColumnDistinctOnlyExecutor.java:42)
           at 
org.apache.pinot.core.operator.query.DistinctOperator.getNextBlock(DistinctOperator.java:61)
           at 
org.apache.pinot.core.operator.query.DistinctOperator.getNextBlock(DistinctOperator.java:38)
           at 
org.apache.pinot.core.operator.BaseOperator.nextBlock(BaseOperator.java:42)
           at 
org.apache.pinot.core.operator.combine.BaseCombineOperator.processSegments(BaseCombineOperator.java:150)
           at 
org.apache.pinot.core.operator.combine.BaseCombineOperator$1.runJob(BaseCombineOperator.java:105)
           at 
org.apache.pinot.core.util.trace.TraceRunnable.run(TraceRunnable.java:40)
           at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
           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:125)
           at 
com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:57)
           at 
com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
           at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
           at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
           at java.lang.Thread.run(Thread.java:748)
   `
   
   Also, It is weired that aggregation group by works for multi-value columns. 
This query shows more details and if this query can work, the non-aggregation 
group by should also work for multi-value columns.
   Workable query:
   `select tags_value, count(*) from myTable GROUP BY tags_value`


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to