встроенные гео-словари со следующей ошибкой:
<Error> EmbeddedDictionaries: Cannot load dictionary! You must resolve this manually.: Code: 0, e.displayText() = DB::Exception: Region id is too large: 1000006, should be not more than 1000000
Судя по коду:
https://github.com/yandex/ClickHouse/blob/master/dbms/src/Dictionaries/Embedded/RegionsHierarchy.cpp#L41
https://github.com/yandex/ClickHouse/blob/master/dbms/src/Dictionaries/Embedded/RegionsNames.cpp#L59
это ограничение:
const size_t max_size = 1000000;
Но наши словари опираются на базу geonames.org, на которую, в т.ч., опирается поставщик данных MaxMind, где максимальный geoname_id (в терминах CH - это region_id), который используется нами - это 11073439.
Появилось это в этом коммите https://github.com/yandex/ClickHouse/commit/f9eb536825ae3cfab65b1d8d37a2bdd67c58010d
С чем связанно такое ограничение max_size ?
Можно ли предложить PR по увеличению этого лимита до 20 млн ?
Действительно. Выглядит как надуманное ограничение. Такое ощущение, что предполагалось, что вся геобаза будет лежать в виде недо-хэштаблицы (т.е. попросту массива размером миллион), где комфортно расположились бы все айдишники по порядку, почти без пропусков, видимо из какой-то внутренней яндексовской геобазы. Я нашёл вариант, как это "закостылить" и прикрутить сюда базу максмайнд: перенумеровать айдишники максмайнд и создать кастомный внешний словарь с отображением из одних id в другие (+скрипт для регулярного обновления получившегося дикта). Только так появляется возможность использовать встроенные в КХ геофункции. Разумеется, остаётся ещё вариант использовать собственные внешние словари, а не геофункции КХ. Но, конечно, я не оставляю надежды, что разработчики кх исправят этот недочет, и добавят возможность использовать обычные хэш-таблицы для хранения геобазы.
Если до этого всё работало нормально, то давай PR, и просто увеличим.
Обсуждают сегодня