Полигональные словари
Словарь polygon (POLYGON) оптимизирован для запросов на определение принадлежности точки полигону — по сути, для операций «обратного геокодирования».
По заданной координате (широта/долгота) он эффективно определяет, какой полигон или регион (из набора множества полигонов, например границ стран или регионов) содержит данную точку.
Он хорошо подходит для привязки координат местоположения к соответствующему региону.
Пример настройки полигонального словаря:
Если вы используете словари с ClickHouse Cloud, используйте DDL-запрос для их создания и создавайте словари от имени пользователя default.
Также проверьте список поддерживаемых источников словарей в руководстве по совместимости с ClickHouse Cloud.
- DDL
- Файл конфигурации
При настройке полигонального словаря ключ должен быть одного из двух типов:
- Простой многоугольник. Он представлен в виде массива точек.
- MultiPolygon. Это массив многоугольников. Каждый многоугольник — это двумерный массив точек. Первый элемент этого массива — внешняя граница многоугольника, а последующие элементы задают области, которые должны быть из него исключены.
Точки могут быть заданы в виде массива или кортежа их координат. В текущей реализации поддерживаются только двумерные точки.
Пользователь может загружать собственные данные во всех форматах, поддерживаемых ClickHouse.
Доступны 3 типа хранилища в памяти:
| Схема | Описание |
|---|---|
POLYGON_SIMPLE | Наивная реализация. Для каждого запроса выполняется линейный проход по всем полигонам с проверкой принадлежности без использования дополнительных индексов. |
POLYGON_INDEX_EACH | Для каждого полигона строится отдельный индекс, что в большинстве случаев позволяет быстро проверять принадлежность (оптимизировано для географических регионов). На область накладывается сетка, рекурсивно делящая ячейки на 16 равных частей. Деление прекращается, когда глубина рекурсии достигает MAX_DEPTH или ячейка пересекается не более чем MIN_INTERSECTIONS полигонами. |
POLYGON_INDEX_CELL | Также создаёт описанную выше сетку с теми же параметрами. Для каждой конечной ячейки строится индекс по всем фрагментам полигонов, попадающим в неё, что обеспечивает быстрые ответы на запросы. |
POLYGON | Синоним POLYGON_INDEX_CELL. |
Запросы к словарю выполняются с использованием стандартных функций для работы со словарями. Важное отличие состоит в том, что здесь ключами являются точки, для которых необходимо найти содержащий их полигон.
Пример
Пример работы со словарём, определённым выше:
В результате выполнения последней команды для каждой точки в таблице 'points' будет найден полигон минимальной площади, содержащий данную точку, и выведены запрошенные атрибуты.
Пример
Вы можете читать столбцы из полигональных словарей с помощью запроса SELECT — для этого включите store_polygon_key_column = 1 в конфигурации словаря или в соответствующем DDL-запросе.