Функции для работы с встроенными словарями
Чтобы функции ниже работали, конфигурация сервера должна указывать пути и адреса для получения всех встроенных словарей. Словари загружаются при первом вызове любой из этих функций. Если справочные списки не могут быть загружены, выбрасывается исключение.
Таким образом, примеры, показанные в этом разделе, будут выбрасывать исключение в 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).
Пример
Запрос:
Результат: