我不确定为什么在这个例子中没有正确评估逻辑计划。
我更深入地查看了 Flink 基本代码,并检查了当 calcite 评估/估计对象中查询的行数时。出于某种原因,对于任何表源,它总是返回100。
实际上在 Flink 中,在创建程序计划的过程中,对于每一个转换后的规则,它都被TableEnvironment .runVolcanoPlanner 称为VolcanoPlanner类 。计划者尝试通过调用RelMetadataQuery .getRowCount来优化和计算一些估计
我通过创建一个失败的测试来重现该错误,该测试应该将 0 断言为关系表“S”的行数,但它始终返回 100。
为什么会这样?有人对这个问题有答案吗?