Cube.js多阶段YoY度量+time_shift引发CubeStore DataFusion列索引越界错误
CubeStore多阶段YoY度量查询触发DataFusion ProjectionPushdown内部错误
问题描述
执行包含multi_stage: true的YoY度量(使用time_shift函数)、且针对CubeStore中存储的外部预聚合数据的查询时,/v1/load接口返回来自CubeStore的ProjectionPushdown优化器的DataFusion内部错误。
错误信息
{"error": "Error: Internal: ProjectionPushdown\ncaused by\nInternal error: Could not create `ExprBoundaries`: in `try_from_column` `col_index` has gone out of bounds with a value of 6, the schema has 6 columns..\nThis was likely caused by a bug in DataFusion's code and we would welcome that you file an bug report in our issue tracker"}
环境版本
- @cubejs-backend/server:1.6.16
- @cubejs-backend/cubestore:1.6.16
复现步骤
- 使用包含多阶段YoY度量的简化Cube模型及视图;
- 向POST
/cubejs-api/v1/load接口发送指定维度、度量、时间范围及过滤条件的查询请求。
预期行为
查询返回选定年份范围内按国家和HS2代码分组的YoY对比数据(包含TEU数值及TEU同比变化率)。
实际行为
CubeStore返回DataFusion ProjectionPushdown内部错误,查询无法正常完成。
问题分析
预聚合表包含6列(索引范围0-5),Cube的Tesseract规划器生成带时间偏移的CTE,DataFusion的ProjectionPushdown优化器在计算ExprBoundaries时引用了超出范围的列索引6。该问题曾在DataFusion项目中出现,且已在后续版本中修复。
内容的提问来源于stack exchange,提问作者draymond
相关产品推荐
相关产品推荐

