Функции для работы с встроенными словарями
Для работы функций, приведённых ниже, конфигурация сервера должна указывать пути и адреса для получения всех встроенных словарей. Словари загружаются при первом вызове любой из этих функций. Если справочные списки не могут быть загружены, выдается исключение.
Таким образом, примеры, показанные в этом разделе, будут вызывать исключение в ClickHouse Fiddle и в быстрых релизах и производственных развертываниях по умолчанию, если не будут предварительно настроены.
Для получения информации о создании справочных списков см. раздел "Словари".
Несколько геобаз
ClickHouse поддерживает работу с несколькими альтернативными геобазами (региональными иерархиями) одновременно, чтобы поддерживать различные перспективы по принадлежности определенных регионов к странам.
Конфигурация 'clickhouse-server' указывает файл с региональной иерархией:
<path_to_regions_hierarchy_file>/opt/geo/regions_hierarchy.txt</path_to_regions_hierarchy_file>
Besides this file, it also searches for files nearby that have the _
symbol and any suffix appended to the name (before the file extension).
For example, it will also find the file /opt/geo/regions_hierarchy_ua.txt
, if present. Here ua
is called the dictionary key. For a dictionary without a suffix, the key is an empty string.
All the dictionaries are re-loaded during runtime (once every certain number of seconds, as defined in the builtin_dictionaries_reload_interval
config parameter, or once an hour by default). However, the list of available dictionaries is defined once, when the server starts.
All functions for working with regions have an optional argument at the end – the dictionary key. It is referred to as the geobase.
Example:
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
.region региону 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. Необязательный.
Возвращаемое значение
Пример
Запрос:
Результат: