ksql icon indicating copy to clipboard operation
ksql copied to clipboard

EXPLODE does not work with LIMIT

Open SamiShaikh opened this issue 2 years ago • 0 comments

Describe the bug EXPLODE functions does not work with LIMIT clause

To Reproduce CREATE STREAM STR123 (ID STRING, DESCARRAY ARRAY<STRING>) WITH (KAFKA_TOPIC='strexp', KEY_FORMAT='KAFKA', PARTITIONS=3, VALUE_FORMAT='JSON'); INSERT INTO STR123 (ID, DESCARRAY) VALUES('SS',ARRAY['A','B','C']; select ID, EXPLODE(DESCARRAY) from str123 limit 1;

Expected behavior Query returns 1 row

Actual behaviour select id, explode(descarray) from str123 limit 1; Invalid Select: Can't find any functions with the name 'EXPLODE'. expression:

Additional context Add any other context about the problem here. select ID, EXPLODE(DESCARRAY) from str123; --works fine

[2022-07-28 16:01:59,250] ERROR Failed to execute query (io.confluent.ksql.api.server.ServerUtils:115) io.confluent.ksql.util.KsqlException: Invalid Select: Can't find any functions with the name 'EXPLODE'. expression: EXPLODE(READINGS), schema:SENSOR_ID STRING, READINGS ARRAY, ROWTIME BIGINT, ROWPARTITION INTEGER, ROWOFFSET BIGINT, KSQL_SYNTH_0 INTEGER at io.confluent.ksql.execution.codegen.CodeGenRunner.buildCodeGenFromParseTree(CodeGenRunner.java:170) at io.confluent.ksql.execution.transform.select.SelectValueMapperFactory.buildSelect(SelectValueMapperFactory.java:81) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) at io.confluent.ksql.execution.transform.select.SelectValueMapperFactory.buildSelects(SelectValueMapperFactory.java:92) at io.confluent.ksql.execution.transform.select.SelectValueMapperFactory.create(SelectValueMapperFactory.java:76) at io.confluent.ksql.execution.transform.select.SelectValueMapperFactory.create(SelectValueMapperFactory.java:69) at io.confluent.ksql.execution.transform.select.Selection.of(Selection.java:42) at io.confluent.ksql.execution.streams.StepSchemaResolver.buildSelectSchema(StepSchemaResolver.java:374) at io.confluent.ksql.execution.streams.StepSchemaResolver.handleStreamSelect(StepSchemaResolver.java:253) at io.confluent.ksql.util.HandlerMaps$BuilderR2.lambda$castHandler2$2(HandlerMaps.java:840) at io.confluent.ksql.execution.streams.StepSchemaResolver.lambda$resolve$0(StepSchemaResolver.java:134) at java.base/java.util.Optional.map(Optional.java:265) at io.confluent.ksql.execution.streams.StepSchemaResolver.resolve(StepSchemaResolver.java:134) at io.confluent.ksql.structured.SchemaKStream.resolveSchema(SchemaKStream.java:476) at io.confluent.ksql.structured.SchemaKStream.select(SchemaKStream.java:159) at io.confluent.ksql.planner.plan.ProjectNode.buildStream(ProjectNode.java:45) at io.confluent.ksql.planner.plan.KsqlBareOutputNode.buildStream(KsqlBareOutputNode.java:52) at io.confluent.ksql.execution.ExecutionPlanBuilder.buildPhysicalPlan(ExecutionPlanBuilder.java:72) at io.confluent.ksql.engine.QueryEngine.buildPhysicalPlan(QueryEngine.java:106) at io.confluent.ksql.engine.EngineExecutor.planQuery(EngineExecutor.java:841) at io.confluent.ksql.engine.EngineExecutor.executeStreamPullQuery(EngineExecutor.java:498) at io.confluent.ksql.engine.KsqlEngine.createStreamPullQuery(KsqlEngine.java:413) at io.confluent.ksql.rest.server.query.QueryExecutor.handleStreamPullQuery(QueryExecutor.java:367) at io.confluent.ksql.rest.server.query.QueryExecutor.handleQuery(QueryExecutor.java:207) at io.confluent.ksql.rest.server.query.QueryExecutor.handleStatement(QueryExecutor.java:129) at io.confluent.ksql.api.impl.QueryEndpoint.createQueryPublisher(QueryEndpoint.java:97) at io.confluent.ksql.rest.server.KsqlServerEndpoints.lambda$createQueryPublisher$0(KsqlServerEndpoints.java:141) at io.confluent.ksql.rest.server.KsqlServerEndpoints.lambda$executeOnWorker$22(KsqlServerEndpoints.java:316) at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:313) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: io.confluent.ksql.util.KsqlException: Can't find any functions with the name 'EXPLODE' at io.confluent.ksql.function.InternalFunctionRegistry.getUdfFactory(InternalFunctionRegistry.java:54) at io.confluent.ksql.metastore.MetaStoreImpl.getUdfFactory(MetaStoreImpl.java:249) at io.confluent.ksql.execution.codegen.CodeGenRunner$Visitor.visitFunctionCall(CodeGenRunner.java:222) at io.confluent.ksql.execution.codegen.CodeGenRunner$Visitor.visitFunctionCall(CodeGenRunner.java:199) at io.confluent.ksql.execution.expression.tree.FunctionCall.accept(FunctionCall.java:65) at io.confluent.ksql.execution.expression.tree.ExpressionVisitor.process(ExpressionVisitor.java:21) at io.confluent.ksql.execution.codegen.CodeGenRunner.getCodeGenSpec(CodeGenRunner.java:139) at io.confluent.ksql.execution.codegen.CodeGenRunner.buildCodeGenFromParseTree(CodeGenRunner.java:148) … 38 more

SamiShaikh avatar Jul 28 '22 17:07 SamiShaikh