Перейти к основному содержанию

Проблема

Поиск в Map, например a['key'], имеет линейную сложность (как упомянуто здесь) и может быть неэффективным. Это связано с тем, что для выбора значения по определённому ключу из таблицы пришлось бы перебирать все ключи (~M) во всех строках (N) столбца Map, что в итоге даёт ~MxN операций поиска. Поиск с использованием Map может быть в 10 раз медленнее, чем в столбце String. Приведённый ниже эксперимент также показывает замедление примерно в 10 раз для холодного запроса и разницу на несколько порядков в объёме обработанных данных (7.21 MB против 5.65 GB).
Решение Чтобы улучшить запрос, мы можем добавить ещё один столбец, значение которого по умолчанию будет браться по определённому ключу из столбца Map, а затем материализовать этот столбец, чтобы заполнить значения для существующих строк. Так мы извлекаем и сохраняем нужное значение при вставке, тем самым ускоряя поиск при выполнении запроса.
Последнее изменение 2 июля 2026 г.