Функции для работы со встроенными словарями
Чтобы функции, перечисленные ниже, работали, в конфигурации сервера должны быть указаны пути и адреса для получения всех встроенных словарей. Словари загружаются при первом вызове любой из этих функций. Если справочные списки не удаётся загрузить, генерируется исключение.
Таким образом, примеры, приведённые в этом разделе, по умолчанию будут приводить к исключению в ClickHouse Fiddle, а также в быстрых и продукционных развертываниях, если предварительно не выполнить настройку.
Сведения о создании справочных списков см. в разделе "Dictionaries".
Несколько геобаз
ClickHouse поддерживает одновременную работу с несколькими альтернативными геобазами (региональными иерархиями), чтобы учитывать различные представления о том, к каким странам относятся те или иные регионы.
Конфигурация clickhouse-server задаёт файл с региональной иерархией:
<path_to_regions_hierarchy_file>/opt/geo/regions_hierarchy.txt</path_to_regions_hierarchy_file>
Помимо этого файла, также выполняется поиск файлов в той же директории, в имени которых к основному имени (перед расширением файла) добавлен символ _ и любой суффикс.
Например, при наличии будет найден и файл /opt/geo/regions_hierarchy_ua.txt. Здесь ua называется ключом словаря. Для словаря без суффикса ключом является пустая строка.
Все словари перезагружаются во время работы (один раз в заданное количество секунд, определяемое параметром конфигурации builtin_dictionaries_reload_interval, или один раз в час по умолчанию). Однако список доступных словарей задаётся один раз — при запуске сервера.
Все функции для работы с регионами имеют в конце необязательный аргумент — ключ словаря. Он называется геобазой.
Пример:
regionToName
Принимает идентификатор региона и геобазу данных и возвращает строку с названием региона на соответствующем языке. Если региона с указанным идентификатором не существует, возвращается пустая строка.
Синтаксис
Параметры
id— идентификатор региона в геобазе. UInt32.geobase— ключ словаря. См. Несколько геобаз. String. Необязательный параметр.
Возвращаемое значение
- Название региона на соответствующем языке, указанном в
geobase. String. - В противном случае — пустая строка.
Пример
Запрос:
Результат:
regionToCity
Принимает идентификатор региона из геобазы. Если этот регион является городом или частью города, функция возвращает идентификатор региона соответствующего города. В противном случае возвращает 0.
Синтаксис
Параметры
id— идентификатор региона из геобазы. UInt32.geobase— ключ словаря. См. Несколько геобаз. String. Необязательный параметр.
Возвращаемое значение
- идентификатор региона для соответствующего города, если он существует. UInt32.
- 0, если такого нет.
Пример
Запрос:
Результат:
regionToArea
Преобразует регион в область (тип 5 в геобазе). Во всём остальном эта функция аналогична функции 'regionToCity'.
Синтаксис
Параметры
id— идентификатор региона из геобазы. UInt32.geobase— ключ словаря. См. Multiple Geobases. String. Необязательный параметр.
Возвращаемое значение
- Идентификатор региона для соответствующей области, если он существует. UInt32.
- 0, если такого нет.
Пример
Запрос:
Результат:
regionToDistrict
Преобразует регион в федеральный округ (тип 4 в геобазе). Во всём остальном эта функция аналогична regionToCity.
Синтаксис
Параметры
id— идентификатор региона из геобазы. UInt32.geobase— ключ словаря. См. Несколько геобаз. String. Необязательный параметр.
Возвращаемое значение
- идентификатор региона для соответствующего города, если такой регион существует. UInt32.
- 0, если такого региона нет.
Пример
Запрос:
Результат:
regionToCountry
Преобразует регион в страну (тип 3 в геобазе). Во всём остальном эта функция аналогична regionToCity.
Синтаксис
Параметры
id— ID региона из геобазы. UInt32.geobase— Ключ словаря. См. Несколько геобаз. String. Необязательный параметр.
Возвращаемое значение
- ID региона для соответствующей страны, если такой регион существует. UInt32.
- 0, если его нет.
Пример
Запрос:
Результат:
regionToContinent
Преобразует регион в континент (тип 1 в geobase). В остальном эта функция аналогична функции 'regionToCity'.
Синтаксис
Параметры
id— идентификатор региона из геобазы. UInt32.geobase— ключ словаря. См. Несколько геобаз. String. Необязательный параметр.
Возвращаемое значение
- Идентификатор региона соответствующего континента, если он существует. UInt32.
- 0, если такого региона нет.
Пример
Запрос:
Результат:
regionToTopContinent
Находит континент верхнего уровня в иерархии для региона.
Синтаксис
Параметры
id— идентификатор региона из геобазы. UInt32.geobase— ключ словаря. См. Несколько геобаз. String. Необязательный параметр.
Возвращаемое значение
- Идентификатор континента верхнего уровня (континента, который получается при подъёме по иерархии регионов). UInt32.
- 0, если такого нет.
Пример
Запрос:
Результат:
regionToPopulation
Возвращает численность населения для региона. Данные о населении могут храниться в файлах geobase. См. раздел "Dictionaries". Если численность населения для региона не указана, функция возвращает 0. В geobase численность населения может быть указана для дочерних регионов, но не для родительских.
Синтаксис
Параметры
id— идентификатор региона в геобазе. UInt32.geobase— ключ словаря. См. Несколько геобаз. String. Необязательный параметр.
Возвращаемое значение
- Численность населения региона. UInt32.
- 0, если оно отсутствует.
Пример
Запрос:
Результат:
regionIn
Проверяет, принадлежит ли регион lhs региону rhs. Возвращает число типа UInt8, равное 1, если принадлежит, и 0 — если не принадлежит.
Синтаксис
Параметры
lhs— ID левого региона из геобазы. UInt32.rhs— ID правого региона из геобазы. UInt32.geobase— ключ словаря. См. Multiple Geobases. String. Необязательный параметр.
Возвращаемое значение
- 1, если принадлежит. UInt8.
- 0, если не принадлежит.
Подробности реализации
Отношение рефлексивно — любой регион также принадлежит самому себе.
Пример
Запрос:
Результат:
regionHierarchy
Принимает число типа UInt32 — идентификатор региона из геобазы. Возвращает массив идентификаторов регионов, включающий переданный регион и всех его родительских регионов по цепочке.
Синтаксис
Параметры
id— ID региона из геобазы. UInt32.geobase— ключ словаря. См. Несколько геобаз. String. Необязательный параметр.
Возвращаемое значение
- Массив ID регионов, состоящий из переданного региона и всех родительских регионов по иерархии. Array(UInt32).
Пример
Запрос:
Результат: