ClickHouse поддерживает словари полигонов. Данный словарь является одной из реализаций внешних словарей, у которого задана специфичная структура. Общий вид кофигурации выглядит следующим образом:
Ключом словаря является сам полигон, что довольно необычно. Все атрибуты являются опциональными, при желании туда можно добавить более подробную информацию. К примеру, может быть добавлен атрибут, содержащий информацию о числе людей, проживающих в данном регионе.
Для данного словаря доступно несколько типов [хранения в памяти](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md), сейчас доступно 4 типа:
Пользователь может [загружать свои собственные данные](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md), представленные во всех поддерживаемых ClickHouse форматах.
Дальнейшие запросы к словарю осуществляются с помощью [dictGet](../../../sql-reference/functions/ext-dict-functions.md/#dictget), где ключами являются заданные точки. Один из возможных решений может быть использование таблицы ClickHouse:
В качестве источника данных таблицы можно указать все поддерживаемые ClickHouse форматы данных, к примеру можно передать в таблицу файл с точками в формате `TSV`.
После этого, для выполнения запросов к словарю можно использовать следующую команду:
``` sql
SELECT 'dictGet', 'polygon_dict_name' AS dict_name, tuple(x, y) AS key,
dictGet(dict_name, 'name', key),
dictGet(dict_name, 'value', key) FROM points ORDER BY x, y;
```
В результате ее исполнения для каждой точки в таблице `points` будет найден полигон минимальной площади, содержащий данную точку. Если точка не лежит ни в каком из полигонов, будут возвращены значения по умолчанию.