ksql
ksql copied to clipboard
EXPLODE does not work with LIMIT
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