gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:07:44 26 4
gpt4 key购买 nike

我不确定为什么在 this example 中没有正确评估逻辑计划.

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

实际上在Flink中,在创建程序计划的过程中,对于每条转换后的规则,它都称为VolcanoPlanner。由 TableEnvironment 上课.runVolcanoPlanner。计划者尝试通过调用 RelMetadataQuery 来优化和计算一些估计。 .getRowCount

我通过创建失败的 test 重现了错误它应该将 0 断言为关系表“S”的行数,但它始终返回 100。

为什么会这样?有人知道这个问题的答案吗?

最佳答案

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

这对于过滤器和投影下推等基本优化非常有效,目前已经足够了,因为 Flink(还)不会重新排序连接。

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

关于java - 为什么 Flink SQL 对所有表都使用 100 行的基数估计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54101174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com