Почему Flink SQL использует оценку мощности в 100 строк для всех таблиц? - PullRequest
0 голосов
/ 09 января 2019

Я не был уверен, почему логический план не был правильно оценен в этом примере .

Я посмотрел более подробно в базовом коде Flink и проверил это, когда кальцит оценивает / оценивает количество строк для запроса в объекте. По какой-то причине он всегда возвращает 100 для любого источника таблицы .

В действительности, во время создания плана программы в Flink для каждого преобразованного правила он называется VolcanoPlanner классом TableEnvironment .runVolcanoPlanner. Планировщик попытается оптимизировать и рассчитать некоторую оценку, вызвав RelMetadataQuery .getRowCount

Я воспроизвел ошибку, создав неудачный тест , который должен утверждать 0 в качестве счетчика строк для таблицы отношений 'S', но всегда возвращает 100.

Почему это происходит? У кого-нибудь есть ответ на этот вопрос?

1 Ответ

0 голосов
/ 09 января 2019

В текущей версии (1.7.1, январь 2019 г.) реляционные API-интерфейсы Flink (Table API и SQL) не пытаются оценить мощность базовых таблиц. Следовательно, Calcite использует значение по умолчанию, равное 100.

Это прекрасно работает для базовых оптимизаций, таких как фильтр и проекция, и в настоящее время достаточно, потому что Flink (пока) не меняет порядок соединений.

Единственный способ ввести оценки кардинальности для таблиц через ExternalCatalog.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...