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