Функции для работы с встроенными словарями
Чтобы функции ниже работали, конфигурация сервера должна указывать пути и адреса для получения всех встроенных словарей. Словари загружаются при первом вызове любой из этих функций. Если справочные списки не могут быть загружены, выбрасывается исключение.
Таким образом, примеры, показанные в этом разделе, будут выбрасывать исключение в ClickHouse Fiddle и в быстрых релизах и продукционных развертываниях по умолчанию, если не настроены заранее.
Для получения информации о создании справочных списков смотрите раздел "Словари".
Множественные геобазы
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— Ключ словаря. См. Множественные геобазы. String. Необязательный.
Возвращаемое значение
- Идентификатор региона для соответствующей области, если он существует. UInt32.
- 0, если его нет.
Пример
Запрос:
Результат:
regionToDistrict
Преобразует регион в федеральный округ (тип 4 в геобазе). По всем другим параметрам эта функция такая же, как 'regionToCity'.
Синтаксис
Параметры
id— Идентификатор региона из геобазы. UInt32.geobase— Ключ словаря. См. Множественные геобазы. String. Необязательный.
Возвращаемое значение
- Идентификатор региона для соответствующего округа, если он существует. UInt32.
- 0, если его нет.
Пример
Запрос:
Результат:
regionToCountry
Преобразует регион в страну (тип 3 в геобазе). По всем другим параметрам эта функция такая же, как 'regionToCity'.
Синтаксис
Параметры
id— Идентификатор региона из геобазы. UInt32.geobase— Ключ словаря. См. Множественные геобазы. String. Необязательный.
Возвращаемое значение
- Идентификатор региона для соответствующей страны, если он существует. UInt32.
- 0, если его нет.
Пример
Запрос:
Результат:
regionToContinent
Преобразует регион в континент (тип 1 в геобазе). По всем другим параметрам эта функция такая же, как 'regionToCity'.
Синтаксис
Параметры
id— Идентификатор региона из геобазы. UInt32.geobase— Ключ словаря. См. Множественные геобазы. String. Необязательный.
Возвращаемое значение
- Идентификатор региона для соответствующего континента, если он существует. UInt32.
- 0, если его нет.
Пример
Запрос:
Результат:
regionToTopContinent
Находит самый высокий континент в иерархии для региона.
Синтаксис
Параметры
id— Идентификатор региона из геобазы. UInt32.geobase— Ключ словаря. См. Множественные геобазы. String. Необязательный.
Возвращаемое значение
- Идентификатор континента верхнего уровня (последний в иерархии регионов). UInt32.
- 0, если его нет.
Пример
Запрос:
Результат:
regionToPopulation
Получает население региона. Население может быть записано в файлах с геобазой. См. раздел "Словари". Если население не записано для региона, возвращает 0. В геобазе население может быть записано для дочерних регионов, но не для родительских регионов.
Синтаксис
Параметры
id— Идентификатор региона из геобазы. UInt32.geobase— Ключ словаря. См. Множественные геобазы. String. Необязательный.
Возвращаемое значение
- Население региона. UInt32.
- 0, если его нет.
Пример
Запрос:
Результат:
regionIn
Проверяет, принадлежит ли регион lhs региону rhs. Возвращает число UInt8, равное 1, если принадлежит, или 0, если не принадлежит.
Синтаксис
Параметры
lhs— Идентификатор региона lhs из геобазы. UInt32.rhs— Идентификатор региона rhs из геобазы. UInt32.geobase— Ключ словаря. См. Множественные геобазы. String. Необязательный.
Возвращаемое значение
- 1, если принадлежит. UInt8.
- 0, если не принадлежит.
Подробности реализации
Отношение является рефлексивным – любой регион также принадлежит самому себе.
Пример
Запрос:
Результат:
regionHierarchy
Принимает число UInt32 – идентификатор региона из геобазы. Возвращает массив идентификаторов регионов, состоящий из переданного региона и всех родителей вдоль цепи.
Синтаксис
Параметры
id— Идентификатор региона из геобазы. UInt32.geobase— Ключ словаря. См. Множественные геобазы. String. Необязательный.
Возвращаемое значение
- Массив идентификаторов регионов, состоящий из переданного региона и всех родителей вдоль цепи. Array(UInt32).
Пример
Запрос:
Результат: