2020-10-26 10:29:30 +00:00
---
toc_priority: 59
toc_title: "\u0424\u0443\u043d\u043a\u0446\u0438\u0438\u0020\u0434\u043b\u044f\u0020\u0440\u0430\u0431\u043e\u0442\u044b\u0020\u0441\u043e\u0020\u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c\u0438\u0020\u042f\u043d\u0434\u0435\u043a\u0441\u002e\u041c\u0435\u0442\u0440\u0438\u043a\u0438"
---
2020-03-20 18:20:59 +00:00
# Функции для работы с о словарями Яндекс.Метрики {#ym-dict-functions}
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Чтобы указанные ниже функции работали, в конфиге сервера должны быть указаны пути и адреса для получения всех словарей Яндекс.Метрики. Словари загружаются при первом вызове любой из этих функций. Если справочники не удаётся загрузить - будет выкинуто исключение.
2020-03-20 18:20:59 +00:00
О том, как создать справочники, смотрите в разделе «Словари».
2017-03-12 17:58:51 +00:00
2020-05-06 06:13:29 +00:00
## Множественные геобазы {#multiple-geobases}
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
ClickHouse поддерживает работу одновременно с несколькими альтернативными геобазами (иерархиями регионов), для того чтобы можно было поддержать разные точки зрения о принадлежности регионов странам.
В конфиге clickhouse-server указывается файл с иерархией регионов:
2017-10-25 05:27:09 +00:00
`<path_to_regions_hierarchy_file>/opt/geo/regions_hierarchy.txt</path_to_regions_hierarchy_file>`
2017-03-12 17:58:51 +00:00
2020-10-13 17:23:29 +00:00
Кроме указанного файла, рядом ищутся файлы, к имени которых (до расширения) добавлен символ _ и какой угодно суффикс.
2017-10-25 05:27:09 +00:00
Например, также найдётся файл `/opt/geo/regions_hierarchy_ua.txt` , если такой есть.
2017-03-12 17:58:51 +00:00
2017-10-25 05:27:09 +00:00
`ua` называется ключом словаря. Для словаря без суффикса, ключ является пустой строкой.
2017-03-12 17:58:51 +00:00
2020-10-13 17:23:29 +00:00
В с е словари перезагружаются в рантайме (раз в количество секунд, заданное в конфигурационном параметре builtin_dictionaries_reload_interval, по умолчанию - раз в час), но перечень доступных словарей определяется один раз, при старте сервера.
2017-03-12 17:58:51 +00:00
В о все функции по работе с регионами, в конце добавлен один необязательный аргумент - ключ словаря. Далее он обозначен как geobase.
Пример:
2017-06-13 20:35:07 +00:00
2020-03-20 18:20:59 +00:00
``` text
2017-10-25 05:27:09 +00:00
regionToCountry(RegionID) - использует словарь по умолчанию: /opt/geo/regions_hierarchy.txt;
regionToCountry(RegionID, '') - использует словарь по умолчанию: /opt/geo/regions_hierarchy.txt;
regionToCountry(RegionID, 'ua') - использует словарь для ключа ua: /opt/geo/regions_hierarchy_ua.txt;
```
2017-03-12 17:58:51 +00:00
2020-03-20 18:20:59 +00:00
### regionToCity(id\[, geobase\]) {#regiontocityid-geobase}
2017-03-12 17:58:51 +00:00
Принимает число типа UInt32 - идентификатор региона из геобазы Яндекса. Если регион является городом или входит в некоторый город, то возвращает идентификатор региона - соответствующего города. Иначе возвращает 0.
2020-03-20 18:20:59 +00:00
### regionToArea(id\[, geobase\]) {#regiontoareaid-geobase}
2017-03-12 17:58:51 +00:00
Переводит регион в область (тип в геобазе - 5). В остальном, аналогично функции regionToCity.
2020-03-20 18:20:59 +00:00
``` sql
2017-10-25 05:27:09 +00:00
SELECT DISTINCT regionToName(regionToArea(toUInt32(number), 'ua'))
FROM system.numbers
LIMIT 15
```
2020-03-20 18:20:59 +00:00
``` text
2017-10-25 05:27:09 +00:00
┌─regionToName(regionToArea(toUInt32(number), \'ua\'))─┐
│ │
│ Москва и Московская область │
│ Санкт-Петербург и Ленинградская область │
│ Белгородская область │
│ Ивановская область │
│ Калужская область │
│ Костромская область │
│ Курская область │
│ Липецкая область │
│ Орловская область │
│ Рязанская область │
│ Смоленская область │
│ Тамбовская область │
│ Тверская область │
│ Тульская область │
└──────────────────────────────────────────────────────┘
```
2020-03-20 18:20:59 +00:00
### regionToDistrict(id\[, geobase\]) {#regiontodistrictid-geobase}
2017-03-12 17:58:51 +00:00
Переводит регион в федеральный округ (тип в геобазе - 4). В остальном, аналогично функции regionToCity.
2020-03-20 18:20:59 +00:00
``` sql
2017-10-25 05:27:09 +00:00
SELECT DISTINCT regionToName(regionToDistrict(toUInt32(number), 'ua'))
FROM system.numbers
LIMIT 15
```
2020-03-20 18:20:59 +00:00
``` text
2017-10-25 05:27:09 +00:00
┌─regionToName(regionToDistrict(toUInt32(number), \'ua\'))─┐
│ │
│ Центральный федеральный округ │
│ Северо-Западный федеральный округ │
│ Южный федеральный округ │
│ Северо-Кавказский федеральный округ │
│ Приволжский федеральный округ │
│ Уральский федеральный округ │
│ Сибирский федеральный округ │
│ Дальневосточный федеральный округ │
│ Шотландия │
│ Фарерские острова │
│ Фламандский регион │
│ Брюссельский столичный регион │
│ Валлония │
│ Федерация Боснии и Герцеговины │
└──────────────────────────────────────────────────────────┘
```
2020-03-20 18:20:59 +00:00
### regionToCountry(id\[, geobase\]) {#regiontocountryid-geobase}
2017-03-12 17:58:51 +00:00
Переводит регион в страну. В остальном, аналогично функции regionToCity.
2017-10-25 05:27:09 +00:00
Пример: `regionToCountry(toUInt32(213)) = 225` - преобразовали Москву (213) в Россию (225).
2017-03-12 17:58:51 +00:00
2020-03-20 18:20:59 +00:00
### regionToContinent(id\[, geobase\]) {#regiontocontinentid-geobase}
2017-03-12 17:58:51 +00:00
Переводит регион в континент. В остальном, аналогично функции regionToCity.
2017-10-25 05:27:09 +00:00
Пример: `regionToContinent(toUInt32(213)) = 10001` - преобразовали Москву (213) в Евразию (10001).
2017-03-12 17:58:51 +00:00
2020-10-13 17:23:29 +00:00
### regionToTopContinent (#regiontotopcontinent) {#regiontotopcontinent-regiontotopcontinent}
2020-03-30 12:23:54 +00:00
Находит для региона верхний в иерархии континент.
**Синтаксис**
2020-04-30 18:19:18 +00:00
``` sql
2020-03-30 12:23:54 +00:00
regionToTopContinent(id[, geobase]);
```
**Параметры**
2020-04-30 18:19:18 +00:00
- `id` — Идентификатор региона из геобазы Яндекса. [UInt32 ](../../sql-reference/functions/ym-dict-functions.md ).
- `geobase` — Ключ словаря. Смотрите [Множественные геобазы ](#multiple-geobases ). [String ](../../sql-reference/functions/ym-dict-functions.md ). Опциональный параметр.
2020-03-30 12:23:54 +00:00
**Возвращаемое значение**
2020-04-30 18:19:18 +00:00
- Идентификатор континента верхнего уровня (последний при подъеме по иерархии регионов).
- 0, если е г о нет.
2020-03-30 12:23:54 +00:00
Тип: `UInt32` .
2020-03-20 18:20:59 +00:00
### regionToPopulation(id\[, geobase\]) {#regiontopopulationid-geobase}
2017-03-12 17:58:51 +00:00
Получает население для региона.
2020-03-20 18:20:59 +00:00
Население может быть прописано в файлах с геобазой. Смотрите в разделе «Встроенные словари».
2017-03-12 17:58:51 +00:00
Если для региона не прописано население, возвращается 0.
В геобазе Яндекса, население может быть прописано для дочерних регионов, но не прописано для родительских.
2020-03-20 18:20:59 +00:00
### regionIn(lhs, rhs\[, geobase\]) {#regioninlhs-rhs-geobase}
2017-03-12 17:58:51 +00:00
Проверяет принадлежность региона lhs региону rhs. Возвращает число типа UInt8, равное 1, если принадлежит и 0, если не принадлежит.
Отношение рефлексивное - любой регион принадлежит также самому с е б е .
2020-03-20 18:20:59 +00:00
### regionHierarchy(id\[, geobase\]) {#regionhierarchyid-geobase}
2017-03-12 17:58:51 +00:00
Принимает число типа UInt32 - идентификатор региона из геобазы Яндекса. Возвращает массив идентификаторов регионов, состоящий из переданного региона и всех родителей по цепочке.
2017-10-25 05:27:09 +00:00
Пример: `regionHierarchy(toUInt32(213)) = [213,1,3,225,10001,10000]` .
2017-03-12 17:58:51 +00:00
2020-03-20 18:20:59 +00:00
### regionToName(id\[, lang\]) {#regiontonameid-lang}
2017-03-12 17:58:51 +00:00
Принимает число типа UInt32 - идентификатор региона из геобазы Яндекса. Вторым аргументом может быть передана строка - название языка. Поддерживаются языки ru, en, ua, uk, by, kz, tr. Если второй аргумент отсутствует - используется язык ru. Если язык не поддерживается - кидается исключение. Возвращает строку - название региона на соответствующем языке. Если региона с указанным идентификатором не существует - возвращается пустая строка.
2017-10-25 05:27:09 +00:00
`ua` и `uk` обозначают одно и то же - украинский язык.
2018-10-16 10:47:17 +00:00
2020-01-30 10:34:55 +00:00
[Оригинальная статья ](https://clickhouse.tech/docs/ru/query_language/functions/ym_dict_functions/ ) <!--hide-->