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

Встроенные словари (геобаза)

Not supported in ClickHouse Cloud
Примечание

Эта страница не относится к ClickHouse Cloud. Описанная здесь функция недоступна в услугах ClickHouse Cloud. См. руководство ClickHouse Совместимость с ClickHouse Cloud для получения дополнительной информации.

ClickHouse содержит встроенный механизм для работы с геобазой.

Это позволяет вам:

  • Использовать ID региона, чтобы получить его имя на нужном языке.
  • Использовать ID региона, чтобы получить ID города, области, федерального округа, страны или континента.
  • Проверять, входит ли регион в другой регион.
  • Получать цепочку родительских регионов.

Все функции поддерживают «транслокальность» — возможность одновременно использовать разные представления принадлежности регионов. Для получения дополнительной информации см. раздел «Функции для работы со словарями веб-аналитики».

Внутренние словари по умолчанию отключены. Чтобы включить их, раскомментируйте параметры path_to_regions_hierarchy_file и path_to_regions_names_files в конфигурационном файле сервера.

Геобаза загружается из текстовых файлов.

Поместите файлы regions_hierarchy*.txt в директорию path_to_regions_hierarchy_file. Этот конфигурационный параметр должен содержать путь к файлу regions_hierarchy.txt (иерархия регионов по умолчанию), а остальные файлы (regions_hierarchy_ua.txt) должны находиться в той же директории.

Поместите файлы regions_names_*.txt в директорию path_to_regions_names_files.

Вы также можете создать эти файлы самостоятельно. Формат файлов следующий:

regions_hierarchy*.txt: TabSeparated (без заголовка), столбцы:

  • ID региона (UInt32)
  • ID родительского региона (UInt32)
  • тип региона (UInt8): 1 - континент, 3 - страна, 4 - федеральный округ, 5 - регион, 6 - город; другие типы не имеют значений
  • население (UInt32) — необязательный столбец

regions_names_*.txt: TabSeparated (без заголовка), столбцы:

  • ID региона (UInt32)
  • имя региона (String) — не может содержать символы табуляции или переводы строк, даже в экранированном виде.

Для хранения в RAM используется плоский массив. По этой причине ID не должны превышать миллион.

Словари могут обновляться без перезапуска сервера. Однако набор доступных словарей не обновляется. Для обновлений проверяется время модификации файлов. Если файл изменился, словарь обновляется. Интервал проверки изменений настраивается параметром builtin_dictionaries_reload_interval. Обновление словарей (за исключением загрузки при первом использовании) не блокирует запросы. Во время обновлений запросы используют старые версии словарей. Если при обновлении возникает ошибка, она записывается в лог сервера, а запросы продолжают использовать старую версию словарей.

Рекомендуется периодически обновлять словари с геобазой. Во время обновления генерируйте новые файлы и записывайте их в отдельное место. Когда всё будет готово, переименуйте их в файлы, используемые сервером.

Существуют также функции для работы с идентификаторами ОС и поисковыми движками, но их не следует использовать.