我不确定为什么未在this example中正确评估逻辑计划。
我对Flink基本代码进行了更深入的研究,并检查了方解石评估/估计对象中查询的行数时是否进行了检查。由于某种原因,对于任何表格来源,它总是返回 100 。
实际上,在Flink中,在程序计划创建过程中,对于每个转换后的规则,它由VolcanoPlanner。runVolcanoPlanner称为TableEnvironment类。规划者尝试通过调用RelMetadataQuery。getRowCount
来优化和计算一些估算值我通过创建一个失败的test来重现错误,该错误应将0声明为关系表'S'的行数,但始终返回100。
为什么会这样?有人对此问题有答案吗?
答案 0 :(得分:0)
在当前版本(2019年1月1.7.1)中,Flink的关系API(表API和SQL)不会尝试估算基表的基数。因此,方解石使用的默认值为100。
这对于诸如过滤器和投影下推之类的基本优化工作正常,并且由于Flink尚未(尚未)重新排序联接,因此目前已足够。
注入表基数估计的唯一方法是通过ExternalCatalog
。