为什么Flink SQL对所有表使用100行的基数估计?

时间:2019-01-08 23:25:26

标签: java scala apache-flink apache-calcite flink-sql

我不确定为什么未在this example中正确评估逻辑计划。

我对Flink基本代码进行了更深入的研究,并检查了方解石评估/估计对象中查询的行数时是否进行了检查。由于某种原因,对于任何表格来源,它总是返回 100

实际上,在Flink中,在程序计划创建过程中,对于每个转换后的规则,它由VolcanoPlanner。runVolcanoPlanner称为TableEnvironment类。规划者尝试通过调用RelMetadataQuery。getRowCount

来优化和计算一些估算值

我通过创建一个失败的test来重现错误,该错误应将0声明为关系表'S'的行数,但始终返回100。

为什么会这样?有人对此问题有答案吗?

1 个答案:

答案 0 :(得分:0)

在当前版本(2019年1月1.7.1)中,Flink的关系API(表API和SQL)不会尝试估算基表的基数。因此,方解石使用的默认值为100。

这对于诸如过滤器和投影下推之类的基本优化工作正常,并且由于Flink尚未(尚未)重新排序联接,因此目前已足够。

注入表基数估计的唯一方法是通过ExternalCatalog