[Bug] Regression of SQL command "SELECT M4..." between version 1.3.5 and 2.0.5
Search before asking
- [x] I searched in the issues and found nothing similar.
Version
Windows 10 64 bits and Linux ARM 64 bits (Linux raspberrybuild 6.6.62+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.62-1+rpt1 (2024-11-25) aarch64 GNU/Linux) iotdb version 2.0.5
Describe the bug and provide the minimal reproduce step
I created an IOTDB database with a single double scalar and over 400,000 rows. Using the SQL command "select M4...", I can't read past column 323999, regardless of the starting column. I can read all the data with the command "select id1 from root.** where time >..", and the command "select count(id1) from root.**" returns the correct number of rows. The problem occurs on Windows 10 64-bit and Linux 64-bit (on a Raspberry Pi 4) with version 2.0.5 but not with version 1.3.5.
What did you expect to see?
select M4(id1,'timeInterval'='400','displayWindowBegin'='323000','displayWindowEnd'='323999') from root.bb1.ctx1 +----------------------------+------------------------------------------------------------------------------------------------------+ | Time|M4(root.bb1.ctx1.id1, "timeInterval"="400", "displayWindowBegin"="323000", "displayWindowEnd"="323999")| +----------------------------+------------------------------------------------------------------------------------------------------+ |1970-01-01T01:05:23.000+01:00| 20.0| |1970-01-01T01:05:23.399+01:00| 150.0| |1970-01-01T01:05:23.400+01:00| 20.0| |1970-01-01T01:05:23.799+01:00| 150.0| |1970-01-01T01:05:23.800+01:00| 20.0| |1970-01-01T01:05:23.849+01:00| 150.0| |1970-01-01T01:05:23.998+01:00| 140.0| +----------------------------+------------------------------------------------------------------------------------------------------+ Total line number = 7 It costs 0.094s
What did you see instead?
select M4(id1,'timeInterval'='400','displayWindowBegin'='323000','displayWindowEnd'='324000') from root.bb1.ctx1 Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 301: org.apache.tsfile.read.common.block.column.LongColumn cannot be cast to org.apache.tsfile.read.common.block.column.TimeColumn
And the traces in the "IoTDBDataNode" console for the last command: 2025-10-07 15:36:29,566 [Query-Worker-Thread-15$20251007_133629_00007_1.1.0.0] INFO o.a.i.d.q.e.s.DriverScheduler$Scheduler:581 - The task 20251007_133629_00007_1.1.0.0 is aborted. All other tasks in the same query will be cancelled 2025-10-07 15:36:29,566 [pool-45-IoTDB-ClientRPC-Processor-1] WARN o.a.i.d.u.ErrorHandlingUtils:126 - Status code: 301, Query Statement: "select M4(id1,'timeInterval'='400','displayWindowBegin'='323000','displayWindowEnd'='324000') from root.bb1.ctx1". executeStatement failed because org.apache.tsfile.read.common.block.column.LongColumn cannot be cast to org.apache.tsfile.read.common.block.column.TimeColumn org.apache.iotdb.commons.exception.IoTDBException: java.lang.ClassCastException: org.apache.tsfile.read.common.block.column.LongColumn cannot be cast to org.apache.tsfile.read.common.block.column.TimeColumn at org.apache.iotdb.db.queryengine.plan.execution.QueryExecution.dealWithException(QueryExecution.java:479) at org.apache.iotdb.db.queryengine.plan.execution.QueryExecution.getResult(QueryExecution.java:452) at org.apache.iotdb.db.queryengine.plan.execution.QueryExecution.getByteBufferBatchResult(QueryExecution.java:498) at org.apache.iotdb.db.utils.QueryDataSetUtils.convertQueryResultByFetchSize(QueryDataSetUtils.java:619) at org.apache.iotdb.db.protocol.thrift.impl.ClientRPCServiceImpl.lambda$static$0(ClientRPCServiceImpl.java:283) at org.apache.iotdb.db.protocol.thrift.impl.ClientRPCServiceImpl.executeStatementInternal(ClientRPCServiceImpl.java:430) at org.apache.iotdb.db.protocol.thrift.impl.ClientRPCServiceImpl.executeStatementV2(ClientRPCServiceImpl.java:919) at org.apache.iotdb.service.rpc.thrift.IClientRPCService$Processor$executeStatementV2.getResult(IClientRPCService.java:4164) at org.apache.iotdb.service.rpc.thrift.IClientRPCService$Processor$executeStatementV2.getResult(IClientRPCService.java:4144) 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(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassCastException: org.apache.tsfile.read.common.block.column.LongColumn cannot be cast to org.apache.tsfile.read.common.block.column.TimeColumn at org.apache.iotdb.db.queryengine.transformation.dag.intermediate.SingleInputSingleReferenceLayer$2.yield(SingleInputSingleReferenceLayer.java:224) at org.apache.iotdb.db.queryengine.transformation.dag.transformer.multi.UDFQueryRowWindowTransformer.tryExecuteUDFOnce(UDFQueryRowWindowTransformer.java:42) at org.apache.iotdb.db.queryengine.transformation.dag.transformer.multi.UniversalUDFQueryTransformer.yieldValue(UniversalUDFQueryTransformer.java:44) at org.apache.iotdb.db.queryengine.transformation.dag.transformer.Transformer.yield(Transformer.java:41) at org.apache.iotdb.db.queryengine.execution.operator.process.TransformOperator.iterateReaderToNextValid(TransformOperator.java:177) at org.apache.iotdb.db.queryengine.execution.operator.process.TransformOperator.iterateAllColumnsToNextValid(TransformOperator.java:160) at org.apache.iotdb.db.queryengine.execution.operator.process.TransformOperator.next(TransformOperator.java:265) at org.apache.iotdb.db.queryengine.execution.operator.Operator.nextWithTimer(Operator.java:48) at org.apache.iotdb.db.queryengine.execution.operator.sink.IdentitySinkOperator.next(IdentitySinkOperator.java:106) at org.apache.iotdb.db.queryengine.execution.operator.Operator.nextWithTimer(Operator.java:48) at org.apache.iotdb.db.queryengine.execution.driver.Driver.processInternal(Driver.java:241) at org.apache.iotdb.db.queryengine.execution.driver.Driver.lambda$processFor$1(Driver.java:152) at org.apache.iotdb.db.queryengine.execution.driver.Driver.tryWithLock(Driver.java:337) at org.apache.iotdb.db.queryengine.execution.driver.Driver.processFor(Driver.java:133) at org.apache.iotdb.db.queryengine.execution.schedule.DriverTaskThread.execute(DriverTaskThread.java:83) at org.apache.iotdb.db.queryengine.execution.schedule.AbstractDriverThread.run(AbstractDriverThread.java:79) 2025-10-07 15:36:30,574 [pool-38-IoTDB-MPP-Coordinator-Scheduled-Executor-6] WARN o.a.i.d.q.e.f.FragmentInstanceContext:440 - [Unknown exception]: java.lang.ClassCastException: org.apache.tsfile.read.common.block.column.LongColumn cannot be cast to org.apache.tsfile.read.common.block.column.TimeColumn at org.apache.iotdb.db.queryengine.transformation.dag.intermediate.SingleInputSingleReferenceLayer$2.yield(SingleInputSingleReferenceLayer.java:224) at org.apache.iotdb.db.queryengine.transformation.dag.transformer.multi.UDFQueryRowWindowTransformer.tryExecuteUDFOnce(UDFQueryRowWindowTransformer.java:42) at org.apache.iotdb.db.queryengine.transformation.dag.transformer.multi.UniversalUDFQueryTransformer.yieldValue(UniversalUDFQueryTransformer.java:44) at org.apache.iotdb.db.queryengine.transformation.dag.transformer.Transformer.yield(Transformer.java:41) at org.apache.iotdb.db.queryengine.execution.operator.process.TransformOperator.iterateReaderToNextValid(TransformOperator.java:177) at org.apache.iotdb.db.queryengine.execution.operator.process.TransformOperator.iterateAllColumnsToNextValid(TransformOperator.java:160) at org.apache.iotdb.db.queryengine.execution.operator.process.TransformOperator.next(TransformOperator.java:265) at org.apache.iotdb.db.queryengine.execution.operator.Operator.nextWithTimer(Operator.java:48) at org.apache.iotdb.db.queryengine.execution.operator.sink.IdentitySinkOperator.next(IdentitySinkOperator.java:106) at org.apache.iotdb.db.queryengine.execution.operator.Operator.nextWithTimer(Operator.java:48) at org.apache.iotdb.db.queryengine.execution.driver.Driver.processInternal(Driver.java:241) at org.apache.iotdb.db.queryengine.execution.driver.Driver.lambda$processFor$1(Driver.java:152) at org.apache.iotdb.db.queryengine.execution.driver.Driver.tryWithLock(Driver.java:337) at org.apache.iotdb.db.queryengine.execution.driver.Driver.processFor(Driver.java:133) at org.apache.iotdb.db.queryengine.execution.schedule.DriverTaskThread.execute(DriverTaskThread.java:83) at org.apache.iotdb.db.queryengine.execution.schedule.AbstractDriverThread.run(AbstractDriverThread.java:79)
Anything else?
With the 1.3.5 version the command: select M4(id1,'timeInterval'='400','displayWindowBegin'='323000','displayWindowEnd'='324000') from root.bb1.ctx1 succeed It is also possible to read the data from the time stamp 0 up to 400000
The command "select id1 from root.bb1.ctx1 where time > 0 and time > 400000" is able to read all the rows with the version 2.0.5 and 1.3.5
Are you willing to submit a PR?
- [ ] I'm willing to submit a PR!
Hi, this is your first issue in IoTDB project. Thanks for your report. Welcome to join the community!
The problem also occurs with 8 and 256 columns.