-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Search before asking
- I searched in the issues and found nothing similar.
Version
1.3.3
Describe the bug and provide the minimal reproduce step
基于example\udf\src\main\java\org\apache\iotdb\udf\UDAFExample.java,在validate 函数中修改为2个时间序列:
执行sql:SELECT UDAFExample(Latitude, Longitude) as level FROM root.XXXX.D52010000_0001 where time =1472870568779 客户端提示错误:Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 301: Error occurred during executing UDAF#validate(UDFParameterValidator):
, please check whether the implementation of UDF is correct according to the udf-api description.java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
datanode 提示错误:
2025-11-19 13:32:37,844 [pool-41-IoTDB-ClientRPC-Processor-12$20251119_053237_00066_1.1.0] WARN o.a.i.d.q.e.a.UDAFAccumulator:206 - Error occurred during executing UDAF, please check whether the implementation of UDF is correct according to the udf-api description.
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at org.apache.iotdb.udf.api.customizer.parameter.UDFParameters.getDataType(UDFParameters.java:84)
at org.apache.iotdb.udf.api.customizer.parameter.UDFParameterValidator.validateInputSeriesDataType(UDFParameterValidator.java:99)
at org.apache.iotdb.udf.UDAFExample.validate(UDAFExample.java:81)
at org.apache.iotdb.db.queryengine.execution.aggregation.UDAFAccumulator.reflectAndValidateUDF(UDAFAccumulator.java:105)
at org.apache.iotdb.db.queryengine.execution.aggregation.UDAFAccumulator.beforeStart(UDAFAccumulator.java:84)
at org.apache.iotdb.db.queryengine.execution.aggregation.UDAFAccumulator.(UDAFAccumulator.java:72)
at org.apache.iotdb.db.queryengine.execution.aggregation.AccumulatorFactory.createAccumulator(AccumulatorFactory.java:49)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.createRawDataAggregationOperator(OperatorTreeGenerator.java:1995)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.visitRawDataAggregation(OperatorTreeGenerator.java:1977)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.visitRawDataAggregation(OperatorTreeGenerator.java:316)
at org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.RawDataAggregationNode.accept(RawDataAggregationNode.java:212)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.dealWithConsumeChildrenOneByOneNode(OperatorTreeGenerator.java:3472)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.visitIdentitySink(OperatorTreeGenerator.java:2665)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.visitIdentitySink(OperatorTreeGenerator.java:316)
at org.apache.iotdb.db.queryengine.plan.planner.plan.node.sink.IdentitySinkNode.accept(IdentitySinkNode.java:75)
at org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanner.plan(LocalExecutionPlanner.java:92)
at org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceManager.lambda$execDataQueryFragmentInstance$3(FragmentInstanceManager.java:163)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceManager.execDataQueryFragmentInstance(FragmentInstanceManager.java:139)
at org.apache.iotdb.db.consensus.statemachine.dataregion.DataRegionStateMachine.read(DataRegionStateMachine.java:354)
at org.apache.iotdb.consensus.iot.IoTConsensusServerImpl.read(IoTConsensusServerImpl.java:276)
at org.apache.iotdb.consensus.iot.IoTConsensus.read(IoTConsensus.java:224)
at org.apache.iotdb.db.queryengine.execution.executor.RegionReadExecutor.execute(RegionReadExecutor.java:84)
at org.apache.iotdb.db.queryengine.plan.scheduler.FragmentInstanceDispatcherImpl.dispatchLocally(FragmentInstanceDispatcherImpl.java:455)
at org.apache.iotdb.db.queryengine.plan.scheduler.FragmentInstanceDispatcherImpl.dispatchOneInstance(FragmentInstanceDispatcherImpl.java:298)
at org.apache.iotdb.db.queryengine.plan.scheduler.FragmentInstanceDispatcherImpl.dispatchRead(FragmentInstanceDispatcherImpl.java:131)
at org.apache.iotdb.db.queryengine.plan.scheduler.FragmentInstanceDispatcherImpl.dispatch(FragmentInstanceDispatcherImpl.java:118)
at org.apache.iotdb.db.queryengine.plan.scheduler.ClusterScheduler.start(ClusterScheduler.java:117)
at org.apache.iotdb.db.queryengine.plan.planner.TreeModelPlanner.doSchedule(TreeModelPlanner.java:144)
at org.apache.iotdb.db.queryengine.plan.execution.QueryExecution.schedule(QueryExecution.java:267)
at org.apache.iotdb.db.queryengine.plan.execution.QueryExecution.start(QueryExecution.java:180)
at org.apache.iotdb.db.queryengine.plan.Coordinator.execution(Coordinator.java:134)
at org.apache.iotdb.db.queryengine.plan.Coordinator.executeForTreeModel(Coordinator.java:169)
at org.apache.iotdb.db.protocol.thrift.impl.ClientRPCServiceImpl.executeStatementInternal(ClientRPCServiceImpl.java:312)
at org.apache.iotdb.db.protocol.thrift.impl.ClientRPCServiceImpl.executeStatementV2(ClientRPCServiceImpl.java:778)
at org.apache.iotdb.service.rpc.thrift.IClientRPCService$Processor$executeStatementV2.getResult(IClientRPCService.java:4104)
at org.apache.iotdb.service.rpc.thrift.IClientRPCService$Processor$executeStatementV2.getResult(IClientRPCService.java:4084)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:38)
at org.apache.iotdb.db.protocol.thrift.ProcessorWithMetrics.process(ProcessorWithMetrics.java:64)
at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:248)
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)
2025-11-19 13:32:37,850 [pool-41-IoTDB-ClientRPC-Processor-12$20251119_053237_00066_1.1.0] WARN o.a.i.d.q.e.f.FragmentInstanceManager:202 - error when create FragmentInstanceExecution.
java.lang.RuntimeException: Error occurred during executing UDAF#validate(UDFParameterValidator):
, please check whether the implementation of UDF is correct according to the udf-api description.java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at org.apache.iotdb.db.queryengine.execution.aggregation.UDAFAccumulator.onError(UDAFAccumulator.java:210)
at org.apache.iotdb.db.queryengine.execution.aggregation.UDAFAccumulator.reflectAndValidateUDF(UDAFAccumulator.java:107)
at org.apache.iotdb.db.queryengine.execution.aggregation.UDAFAccumulator.beforeStart(UDAFAccumulator.java:84)
at org.apache.iotdb.db.queryengine.execution.aggregation.UDAFAccumulator.(UDAFAccumulator.java:72)
at org.apache.iotdb.db.queryengine.execution.aggregation.AccumulatorFactory.createAccumulator(AccumulatorFactory.java:49)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.createRawDataAggregationOperator(OperatorTreeGenerator.java:1995)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.visitRawDataAggregation(OperatorTreeGenerator.java:1977)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.visitRawDataAggregation(OperatorTreeGenerator.java:316)
at org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.RawDataAggregationNode.accept(RawDataAggregationNode.java:212)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.dealWithConsumeChildrenOneByOneNode(OperatorTreeGenerator.java:3472)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.visitIdentitySink(OperatorTreeGenerator.java:2665)
at org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator.visitIdentitySink(OperatorTreeGenerator.java:316)
at org.apache.iotdb.db.queryengine.plan.planner.plan.node.sink.IdentitySinkNode.accept(IdentitySinkNode.java:75)
at org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanner.plan(LocalExecutionPlanner.java:92)
at org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceManager.lambda$execDataQueryFragmentInstance$3(FragmentInstanceManager.java:163)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceManager.execDataQueryFragmentInstance(FragmentInstanceManager.java:139)
at org.apache.iotdb.db.consensus.statemachine.dataregion.DataRegionStateMachine.read(DataRegionStateMachine.java:354)
at org.apache.iotdb.consensus.iot.IoTConsensusServerImpl.read(IoTConsensusServerImpl.java:276)
at org.apache.iotdb.consensus.iot.IoTConsensus.read(IoTConsensus.java:224)
at org.apache.iotdb.db.queryengine.execution.executor.RegionReadExecutor.execute(RegionReadExecutor.java:84)
at org.apache.iotdb.db.queryengine.plan.scheduler.FragmentInstanceDispatcherImpl.dispatchLocally(FragmentInstanceDispatcherImpl.java:455)
at org.apache.iotdb.db.queryengine.plan.scheduler.FragmentInstanceDispatcherImpl.dispatchOneInstance(FragmentInstanceDispatcherImpl.java:298)
at org.apache.iotdb.db.queryengine.plan.scheduler.FragmentInstanceDispatcherImpl.dispatchRead(FragmentInstanceDispatcherImpl.java:131)
at org.apache.iotdb.db.queryengine.plan.scheduler.FragmentInstanceDispatcherImpl.dispatch(FragmentInstanceDispatcherImpl.java:118)
at org.apache.iotdb.db.queryengine.plan.scheduler.ClusterScheduler.start(ClusterScheduler.java:117)
at org.apache.iotdb.db.queryengine.plan.planner.TreeModelPlanner.doSchedule(TreeModelPlanner.java:144)
at org.apache.iotdb.db.queryengine.plan.execution.QueryExecution.schedule(QueryExecution.java:267)
at org.apache.iotdb.db.queryengine.plan.execution.QueryExecution.start(QueryExecution.java:180)
at org.apache.iotdb.db.queryengine.plan.Coordinator.execution(Coordinator.java:134)
at org.apache.iotdb.db.queryengine.plan.Coordinator.executeForTreeModel(Coordinator.java:169)
at org.apache.iotdb.db.protocol.thrift.impl.ClientRPCServiceImpl.executeStatementInternal(ClientRPCServiceImpl.java:312)
at org.apache.iotdb.db.protocol.thrift.impl.ClientRPCServiceImpl.executeStatementV2(ClientRPCServiceImpl.java:778)
at org.apache.iotdb.service.rpc.thrift.IClientRPCService$Processor$executeStatementV2.getResult(IClientRPCService.java:4104)
at org.apache.iotdb.service.rpc.thrift.IClientRPCService$Processor$executeStatementV2.getResult(IClientRPCService.java:4084)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:38)
at org.apache.iotdb.db.protocol.thrift.ProcessorWithMetrics.process(ProcessorWithMetrics.java:64)
at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:248)
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)
2025-11-19 13:32:37,869 [pool-41-IoTDB-ClientRPC-Processor-12$20251119_053237_00066_1.1.0] WARN o.a.i.d.q.p.s.FragmentInstanceDispatcherImpl:457 - Error occurred during executing UDAF#validate(UDFParameterValidator):
, please check whether the implementation of UDF is correct according to the udf-api description.java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
What did you expect to see?
验证通过
What did you see instead?
Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 301: Error occurred during executing UDAF#validate(UDFParameterValidator):
, please check whether the implementation of UDF is correct according to the udf-api description.java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
Anything else?
Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 301: Error occurred during executing UDAF#validate(UDFParameterValidator):
, please check whether the implementation of UDF is correct according to the udf-api description.java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
Are you willing to submit a PR?
- I'm willing to submit a PR!