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