Я не был уверен, почему логический план не был правильно оценен в этом примере .
Я посмотрел более подробно в базовом коде Flink и проверил это, когда кальцит оценивает / оценивает количество строк для запроса в объекте. По какой-то причине он всегда возвращает 100 для любого источника таблицы .
В действительности, во время создания плана программы в Flink для каждого преобразованного правила он называется VolcanoPlanner классом TableEnvironment .runVolcanoPlanner. Планировщик попытается оптимизировать и рассчитать некоторую оценку, вызвав RelMetadataQuery .getRowCount
Я воспроизвел ошибку, создав неудачный тест , который должен утверждать 0 в качестве счетчика строк для таблицы отношений 'S', но всегда возвращает 100.
Почему это происходит? У кого-нибудь есть ответ на этот вопрос?