Raxx55 opened a new issue, #15566:
URL: https://github.com/apache/pinot/issues/15566

   ### **_The query contains JSON_EXTRACT_SCALAR in the SELECT clause, a LEFT 
JOIN between two tables, and a column from the right table used in the WHERE 
clause, which causes an error in Pinot._**
   **Note:** I am working with **Pinot 1.2.0** version
   
   ### **Query:** Not working
   select s.name, s.createdby, **json_extract_scalar(s.attributes, 
'$.42fb8f5f-9a2f-4e06-aa28-0318df4e632d', 'STRING', 'null') AS 
'42fb8f5f-9a2f-4e06-aa28-0318df4e632d'**
   from student s **left join** class c on s.classId = c.id 
   where (s.professorId = '870e3f0d-25ac-45b6-bc42-841cdeda8b78') and **(c.id = 
'0c9b1cea-5b98-4ac0-89dc-1ad914b5bf13')** limit 50000
   
   ### **Response:**
   ```
   Error Code: 200
   QueryExecutionError:
   Unable to execute query plan for request: 1129558639000000402 on server: 
my-pinot-release-server-0.my-pinot-release-server-headless.pinot.svc.cluster.local@{51314,18307},
 ERROR: java.util.concurrent.ExecutionException: java.lang.RuntimeException: 
Caught exception while submitting request: 1129558639000000402, stage: 3
     at 
java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396)
     at 
java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2096)
     at 
org.apache.pinot.query.service.server.QueryServer.submit(QueryServer.java:156)
     at 
org.apache.pinot.common.proto.PinotQueryWorkerGrpc$MethodHandlers.invoke(PinotQueryWorkerGrpc.java:284)
   ...
   Caused by: java.lang.RuntimeException: Caught exception while submitting 
request: 1129558639000000402, stage: 3
     at 
org.apache.pinot.query.service.server.QueryServer.lambda$submit$1(QueryServer.java:144)
     at 
java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
     ... 3 more
   Caused by: java.util.concurrent.ExecutionException: 
java.lang.IllegalStateException: Cannot find function with name: 
JSON_EXTRACT_SCALAR
     at 
java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396)
     at 
java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2096)
     at 
org.apache.pinot.query.service.server.QueryServer.lambda$submit$1(QueryServer.java:141)
     ... 4 more
   ...
   Caused by: java.lang.IllegalStateException: Cannot find function with name: 
JSON_EXTRACT_SCALAR
     at 
org.apache.pinot.shaded.com.google.common.base.Preconditions.checkState(Preconditions.java:604)
     at 
org.apache.pinot.query.runtime.operator.operands.FunctionOperand.<init>(FunctionOperand.java:51)
     at 
org.apache.pinot.query.runtime.operator.operands.TransformOperandFactory.getTransformOperand(TransformOperandFactory.java:81)
     at 
org.apache.pinot.query.runtime.operator.operands.TransformOperandFactory.getTransformOperand(TransformOperandFactory.java:33)
   
org.apache.pinot.query.service.dispatch.QueryDispatcher.submit(QueryDispatcher.java:198)
   
org.apache.pinot.query.service.dispatch.QueryDispatcher.submitAndReduce(QueryDispatcher.java:95)
   
org.apache.pinot.broker.requesthandler.MultiStageBrokerRequestHandler.handleRequest(MultiStageBrokerRequestHandler.java:219)
   
org.apache.pinot.broker.requesthandler.BaseBrokerRequestHandler.handleRequest(BaseBrokerRequestHandler.java:133)
   ```
   
   ### **Observation:**
   
   1. ### **The same query without right tables column in where clause(here its 
class id):** Working
   
   select s.name, s.createdby, **json_extract_scalar(s.attributes, 
'$.42fb8f5f-9a2f-4e06-aa28-0318df4e632d', 'STRING', 'null') AS 
'42fb8f5f-9a2f-4e06-aa28-0318df4e632d'** 
   from student s **left join** class c on s.classId = c.id 
   where (s.professorId = '870e3f0d-25ac-45b6-bc42-841cdeda8b78') limit 50000
   
   **Response:**
   
![Image](https://github.com/user-attachments/assets/d0df4bb7-83b9-45b2-a90a-1a81a27bdc34)
   
   2. ### **The same query but with "join" instead of "left join":** Working
   
   select s.name, s.createdby, **json_extract_scalar(s.attributes, 
'$.42fb8f5f-9a2f-4e06-aa28-0318df4e632d', 'STRING', 'null') AS 
'42fb8f5f-9a2f-4e06-aa28-0318df4e632d'** 
   from student s **join** class c on s.classId = c.id 
   where (s.professorId = '870e3f0d-25ac-45b6-bc42-841cdeda8b78') **and (c.id = 
'0c9b1cea-5b98-4ac0-89dc-1ad914b5bf13')** limit 50000
   
   **Response:**
   
![Image](https://github.com/user-attachments/assets/d0df4bb7-83b9-45b2-a90a-1a81a27bdc34)
   
   ### Few more details like schema, tables and actual data are as below,
   **Student Schema:**
   ```
   {
     "schemaName": "student",
     "primaryKeyColumns": [
       "id"
     ],
     "dimensionFieldSpecs": [
       {
         "name": "id",
         "dataType": "STRING",
         "maxLength": 64
       },
       {
         "name": "name",
         "dataType": "STRING",
         "maxLength": 256
       },
       {
         "name": "professorId",
         "dataType": "STRING",
         "maxLength": 64
       },
       {
         "name": "classId",
         "dataType": "STRING",
         "maxLength": 64
       },
       {
         "name": "createdBy",
         "dataType": "STRING",
         "maxLength": 64
       },
       {
         "name": "updatedBy",
         "dataType": "STRING",
         "maxLength": 64
       },
       {
         "name": "attributes",
         "dataType": "JSON"
       }
     ],
     "dateTimeFieldSpecs": [
       {
         "name": "creationTime",
         "dataType": "LONG",
         "format": "1:MILLISECONDS:EPOCH",
         "granularity": "1:MILLISECONDS",
         "defaultNullValue": 0
       },
       {
         "name": "updationTime",
         "dataType": "LONG",
         "format": "1:MILLISECONDS:EPOCH",
         "granularity": "1:MILLISECONDS",
         "defaultNullValue": 0
       }
     ]
   }
   
   ```
   
   **Student table:**
   ```
   {
     "tableName": "student",
     "tableType": "REALTIME",
     "tenants": {
       "broker": "DefaultTenant",
       "server": "DefaultTenant"
     },
     "segmentsConfig": {
       "schemaName": "student",
       "timeColumnName": "updationTime",
       "timeType": "MILLISECONDS",
       "replication": "1",
       "replicasPerPartition": "1"
     },
     "tableIndexConfig": {
       "loadMode": "MMAP",
       "invertedIndexColumns": [],
       "createInvertedIndexDuringSegmentGeneration": false,
       "rangeIndexColumns": [],
       "sortedColumn": [],
       "bloomFilterColumns": [],
       "bloomFilterConfigs": null,
       "noDictionaryColumns": [],
       "onHeapDictionaryColumns": [],
       "varLengthDictionaryColumns": [],
       "enableDefaultStarTree": false,
       "starTreeIndexConfigs": null,
       "enableDynamicStarTreeCreation": false,
       "segmentPartitionConfig": null,
       "columnMinMaxValueGeneratorMode": null,
       "aggregateMetrics": false,
       "nullHandlingEnabled": false
     },
     "metadata": {},
     "ingestionConfig": {
       "filterConfig": null,
       "transformConfigs": null,
       "streamIngestionConfig": {
         "streamConfigMaps": [
           {
             "streamType": "kafka",
             "stream.kafka.topic.name": "student_entity_data",
             "stream.kafka.broker.list": "{{kafka.broker.list}}",
             "stream.kafka.consumer.type": "lowlevel",
             "stream.kafka.consumer.prop.auto.offset.reset": "smallest",
             "stream.kafka.consumer.factory.class.name": 
"org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory",
             "stream.kafka.decoder.class.name": 
"org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder",
             "stream.kafka.decoder.prop.format": "JSON",
             "key.serializer": 
"org.apache.kafka.common.serialization.ByteArraySerializer",
             "value.serializer": 
"org.apache.kafka.common.serialization.ByteArraySerializer",
             "realtime.segment.flush.threshold.rows": "30000",
             "realtime.segment.flush.threshold.time": "12h",
             "topic.consumption.rate.limit": "6000"
           }
         ]
       }
     },
     "quota": {
       "storage": null,
       "maxQueriesPerSecond": null
     },
     "task": {
       "taskTypeConfigsMap": {
       }
     },
     "routing": {
       "segmentPrunerTypes": null,
       "instanceSelectorType": "strictReplicaGroup"
     },
     "query": {
       "timeoutMs": null
     },
     "fieldConfigList": null,
     "upsertConfig": {
       "mode": "FULL",
       "deleteRecordColumn": "deleted"
     },
     "tierConfigs": null
   }
   ```
   
   **Student table data:**
   ```
   {
     "id": "6f02ae8c-e7ca-4671-b759-5e18cb97c74f",
     "name": "Alen",
     "professorId": "870e3f0d-25ac-45b6-bc42-841cdeda8b78",
     "classId": "0c9b1cea-5b98-4ac0-89dc-1ad914b5bf13",
     "createdBy": "870e3f0d-25ac-45b6-bc42-841cdeda8b78",
     "creationTime": 1740995630168,
     "updatedBy": null,
     "updationTime": null,
     "attributes": {"42fb8f5f-9a2f-4e06-aa28-0318df4e632d":"Male", 
"d30ef901-8acc-4872-887c-d048073fe5d4":5}
   },
   {
     "id": "2743b65e-7ec3-4072-90db-1921fe5728d3",
     "name": "Lana",
     "professorId": "870e3f0d-25ac-45b6-bc42-841cdeda8b78",
     "classId": "0c9b1cea-5b98-4ac0-89dc-1ad914b5bf13",
     "createdBy": "870e3f0d-25ac-45b6-bc42-841cdeda8b78",
     "creationTime": 1741064094982,
     "updatedBy": "870e3f0d-25ac-45b6-bc42-841cdeda8b78",
     "updationTime": 1741064099981,
     "attributes": {"42fb8f5f-9a2f-4e06-aa28-0318df4e632d":"Female", 
"d30ef901-8acc-4872-887c-d048073fe5d4":7}
   },
   {
     "id": "cb18e2c6-6095-49c7-b991-70fc5c981a0e",
     "name": "James",
     "professorId": "dbac7d66-e443-473d-829c-43bb50a796f0",
     "classId": "e2428f7d-565e-4b3b-9423-549a850a2ef5",
     "creationTime": 1741253546022,
     "createdBy": "dbac7d66-e443-473d-829c-43bb50a796f0",
     "updatedBy": null,
     "updationTime": null,
     "attributes": {"42fb8f5f-9a2f-4e06-aa28-0318df4e632d":"Male", 
"d30ef901-8acc-4872-887c-d048073fe5d4":3}
   },
   {
     "id": "74eb710e-63c8-4524-943e-9586055fa840",
     "name": "orry",
     "professorId": "dbac7d66-e443-473d-829c-43bb50a796f0",
     "classId": null,
     "creationTime": 1741253946013,
     "createdBy": "dbac7d66-e443-473d-829c-43bb50a796f0",
     "updatedBy": null,
     "updationTime": null,
     "attributes": {"42fb8f5f-9a2f-4e06-aa28-0318df4e632d":"Female"}
   }
   ```
   
   
   **Class schema:**
   ```
   {
     "schemaName": "class",
     "primaryKeyColumns": [
       "id"
     ],
     "dimensionFieldSpecs": [
       {
         "name": "id",
         "dataType": "STRING",
         "maxLength": 64
       },
       {
         "name": "name",
         "dataType": "STRING",
         "maxLength": 256
       },
       {
         "name": "displayOrder",
         "dataType": "INT"
       }
     ],
     "metricFieldSpecs": [
     ],
     "dateTimeFieldSpecs": [
       {
         "name": "dateTime",
         "dataType": "LONG",
         "format": "1:MILLISECONDS:EPOCH",
         "granularity": "1:MILLISECONDS"
       }
     ]
   }
   ```
   
   **Class table:**
   ```
   {
     "tableName": "class",
     "tableType": "REALTIME",
     "tenants": {
       "broker": "DefaultTenant",
       "server": "DefaultTenant"
     },
     "segmentsConfig": {
       "schemaName": "class",
       "timeColumnName": "dateTime",
       "timeType": "MILLISECONDS",
       "replication": "1",
       "replicasPerPartition": "1"
     },
     "tableIndexConfig": {
       "loadMode": "MMAP",
       "invertedIndexColumns": [],
       "createInvertedIndexDuringSegmentGeneration": false,
       "rangeIndexColumns": [],
       "sortedColumn": [],
       "bloomFilterColumns": [],
       "bloomFilterConfigs": null,
       "noDictionaryColumns": [],
       "onHeapDictionaryColumns": [],
       "varLengthDictionaryColumns": [],
       "enableDefaultStarTree": false,
       "starTreeIndexConfigs": null,
       "enableDynamicStarTreeCreation": false,
       "segmentPartitionConfig": null,
       "columnMinMaxValueGeneratorMode": null,
       "aggregateMetrics": false,
       "nullHandlingEnabled": false
     },
     "metadata": {},
     "ingestionConfig": {
       "filterConfig": null,
       "transformConfigs": null,
       "streamIngestionConfig": {
         "streamConfigMaps": [
           {
             "streamType": "kafka",
             "stream.kafka.topic.name": "class_entity_data",
             "stream.kafka.broker.list": "{{kafka.broker.list}}",
             "stream.kafka.consumer.type": "lowlevel",
             "stream.kafka.consumer.prop.auto.offset.reset": "smallest",
             "stream.kafka.consumer.factory.class.name": 
"org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory",
             "stream.kafka.decoder.class.name": 
"org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder",
             "stream.kafka.decoder.prop.format": "JSON",
             "key.serializer": 
"org.apache.kafka.common.serialization.ByteArraySerializer",
             "value.serializer": 
"org.apache.kafka.common.serialization.ByteArraySerializer",
             "realtime.segment.flush.threshold.rows": "30000",
             "realtime.segment.flush.threshold.time": "12h",
             "topic.consumption.rate.limit": "6000"
           }
         ]
       }
     },
     "quota": {
       "storage": null,
       "maxQueriesPerSecond": null
     },
     "task": {
       "taskTypeConfigsMap": {
       }
     },
     "routing": {
       "segmentPrunerTypes": null,
       "instanceSelectorType": "strictReplicaGroup"
     },
     "query": {
       "timeoutMs": null
     },
     "fieldConfigList": null,
     "upsertConfig": {
       "mode": "FULL",
       "deleteRecordColumn": "deleted"
     },
     "tierConfigs": null
   }
   ```
   
   **Class table data:**
   ```
   {
     "id": "0c9b1cea-5b98-4ac0-89dc-1ad914b5bf13",
     "name": "class A",
     "displayOrder": 10000,
     "dateTime": 1741695499859
   },
   {
     "id": "e2428f7d-565e-4b3b-9423-549a850a2ef5",
     "name": "class B",
     "displayOrder": 20000,
     "dateTime": 1741695499869
   },
   {
     "id": "5724f202-3cfb-41f5-894f-b44b0389878e",
     "name": "class C",
     "displayOrder": 30000,
     "dateTime": 1741695499879
   },
   {
     "id": "5ff9b60b-d012-4ba7-a02b-4f74dcbc79ac",
     "name": "class D",
     "displayOrder": 40000,
     "dateTime": 1741695499889
   },
   {
     "id": "9a9af0ec-334c-4212-b5ff-51390f909dde",
     "name": "class E",
     "displayOrder": 50000,
     "dateTime": 1741695499899
   }
   ```
   


-- 
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: commits-unsubscr...@pinot.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to