GridDB TimeSeries聚合查询在显式事务中执行返回错误结果
GridDB TimeSeries容器显式事务内聚合查询异常问题
我在使用GridDB Cloud及Python客户端(griddb_python)时发现:在显式事务内执行TimeSeries容器的聚合查询,结果与事务外执行的相同查询不一致,甚至出现错误。
容器Schema
import griddb_python as griddb conInfo = griddb.ContainerInfo( name="sensor_data", column_info_list=[ ("ts", griddb.Type.TIMESTAMP), ("temperature", griddb.Type.FLOAT) ], type=griddb.ContainerType.TIME_SERIES, row_key=True ) store.put_container(conInfo, True)
插入示例数据
import datetime container = store.get_container("sensor_data") base = datetime.datetime(2024, 5, 1, 0, 0) for i in range(10): container.put((base + datetime.timedelta(minutes=i), 20 + i))
两种查询对比
1. 事务外执行查询(结果正常)
query = container.query("SELECT AVG(temperature) WHERE ts >= TIMESTAMP('2024-05-01T00:00:00') AND ts < TIMESTAMP('2024-05-01T00:10:00')") rs = query.fetch(False) for r in rs: print(r)
- 返回正确结果:
24.5
2. 显式事务内执行查询(结果异常)
container.set_auto_commit(False) query = container.query("SELECT AVG(temperature) WHERE ts >= TIMESTAMP('2024-05-01T00:00:00') AND ts < TIMESTAMP('2024-05-01T00:10:00')") rs = query.fetch(False) print(list(rs)) container.commit()
- 通常返回
0.0,偶尔抛出异常:
GSException: Internal error (no data or invalid cursor state).
核心疑问
这是GridDB针对TimeSeries容器的事务模型限制,还是使用set_auto_commit(False)时聚合结果缓冲的客户端问题?
已验证的操作
- 在GridDB CE 5.3和GridDB Cloud上测试,表现一致。
- 查看日志确认聚合查询已执行,但手动事务模式下游标结果大小为0。
- 尝试在提交前调用
query.close(),无改善。 - 在Collection容器上运行相同代码无异常,问题仅出现在TimeSeries容器上。
内容的提问来源于stack exchange,提问作者Klc
相关产品推荐
相关产品推荐

