apache / apache/iotdb

[Bug] IoTDB Gaussian_HMM/GMM_HMM Inference Model Execution Error: Data Type Conversion Exception

Aperta
#16,346 5 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Java
Stelle
6.4k
Fork
1.2k
Merge medio
1g 23h
PR unite (30g)
115

Descrizione

### Search before asking

- [x] I searched in the [issues](https://github.com/apache/iotdb/issues) and found nothing similar.

### Version

CentOS Linux release 7.9.2009, IoTDB 2.0.5

### Describe the bug and provide the minimal reproduce step

```sql
IoTDB> show TIMESERIES root.db.sensor.tmp.device_100.**
+-------------------------------------------------+-----+-----------+--------+--------+-----------+----+----------+--------+------------------+--------+
| Timeseries|Alias| Database|DataType|Encoding|Compression|Tags|Attributes|Deadband|DeadbandParameters|ViewType|
+-------------------------------------------------+-----+-----------+--------+--------+-----------+----+----------+--------+------------------+--------+
| root.db.sensor.tmp.device_100.val| null|root.db| DOUBLE| GORILLA| LZ4|null| null| null| null| BASE|
+-------------------------------------------------+-----+-----------+--------+--------+-----------+----+----------+--------+------------------+--------+
```

```sql
IoTDB> CALL INFERENCE(gaussian_hmm, "select val from root.db.sensor.tmp.device_100.val where time >= now()-2h and time <=
now()-1h", generateTime=true)
Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 301: Error occurred while executing inference:[Inference model internal error: int() argument must be a string, a bytes-like object or a real number, not 'pandas._libs.interval.Interval']
```

```sql
IoTDB> CALL INFERENCE(gmm_hmm, "select val from root.db.sensor.tmp.device_100.val where time >= now()-2h and time <= now(
)-1h", generateTime=true)
Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 301: Error occurred while executing inference:[Inference model internal error: int() argument must be a string, a bytes-like object or a real number, not 'pandas._libs.interval.Interval']
```

### What did you expect to see?

Can normally call Gaussian_HMM/GMM_HMM machine learning models

### What did you see instead?

Can normally call Gaussian_HMM/GMM_HMM machine learning models

### Anything else?

IoTDB datanode log

```log
2025-09-04 17:06:24,881 [Query-Worker-Thread-1$20250904_090624_13222_1.1.0.0] WARN o.a.i.d.q.e.s.AbstractDriverThread:95 - [ExecuteFailed]
org.apache.iotdb.db.exception.runtime.ModelInferenceProcessException: Error occurred while executing inference:[Inference model internal error: int() argument must be a string, a bytes-like object or a real number, not 'pandas._libs.interval.Interval']
at org.apache.iotdb.db.queryengine.execution.operator.process.ai.InferenceOperator.next(InferenceOperator.java:201)
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-09-04 17:06:24,881 [Query-Worker-Thread-1$20250904_090624_13222_1.1.0.0] INFO o.a.i.d.q.e.s.DriverScheduler$Scheduler:581 - The task 20250904_090624_13222_1.1.0.0 is aborted. All other tasks in the same query will be cancelled
2025-09-04 17:06:24,881 [pool-54-IoTDB-ClientRPC-Processor-15] WARN o.a.i.d.u.ErrorHandlingUtils:126 - Status code: 301, Query Statement: "CALL INFERENCE(gaussian_hmm, "select val from root.db.sensor.tmp.device_100 where time >= now()-2h and time <= now()-1h", generateTime=true)". executeStatement failed because Error occurred while executing inference:[Inference model internal error: int() argument must be a string, a bytes-like object or a real number, not 'pandas._libs.interval.Interval']
org.apache.iotdb.commons.exception.IoTDBException: org.apache.iotdb.db.exception.runtime.ModelInferenceProcessException: Error occurred while executing inference:[Inference model internal error: int() argument must be a string, a bytes-like object or a real number, not 'pandas._libs.interval.Interval']
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.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: org.apache.iotdb.db.exception.runtime.ModelInferenceProcessException: Error occurred while executing inference:[Inference model internal error: int() argument must be a string, a bytes-like object or a real number, not 'pandas._libs.interval.Interval']
at org.apache.iotdb.db.queryengine.execution.operator.process.ai.InferenceOperator.next(InferenceOperator.java:201)
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-09-04 17:06:25,882 [pool-47-IoTDB-MPP-Coordinator-Scheduled-Executor-2] WARN o.a.i.d.q.e.f.FragmentInstanceContext:440 - [Unknown exception]:
org.apache.iotdb.db.exception.runtime.ModelInferenceProcessException: Error occurred while executing inference:[Inference model internal error: int() argument must be a string, a bytes-like object or a real number, not 'pandas._libs.interval.Interval']
at org.apache.iotdb.db.queryengine.execution.operator.process.ai.InferenceOperator.next(InferenceOperator.java:201)
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)
```

### Are you willing to submit a PR?

- [ ] I'm willing to submit a PR!

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia dal punto di ingresso CALL INFERENCE e da InferenceOperator.java:201; riproduci le query gaussian_hmm e gmm_hmm su IoTDB 2.0.5, concentrandoti sull’errore di conversione pandas Interval mostrato nel log del datanode. Il lavoro è completato quando entrambe le chiamate di inference vengono eseguite normalmente senza l’eccezione segnalata.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java, pandas, sql
Ambito
backend, databases, machine-learning
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.