Skip to main content

Описание

Считывает документ GeoJSON FeatureCollection и создает по одной строке для каждого объекта. Каждая строка имеет следующую фиксированную схему: Каждая геометрия хранится в типе Geometry ClickHouse (Variant). Поддерживаются следующие геометрические типы GeoJSON: Point, LineString, MultiLineString, Polygon и MultiPolygon. Два других геометрических типа GeoJSON, GeometryCollection и MultiPoint, не могут быть представлены типом Geometry; чтение такого значения в столбец geometry по умолчанию вызывает исключение, но это поведение можно изменить так, чтобы вместо этого вставлялось NULL — см. раздел Обработка неподдерживаемых геометрических типов ниже. По умолчанию столбец geometry имеет значение NULL только в том случае, если геометрия объекта представляет собой явный JSON null; при input_format_geojson_unsupported_geometry_handling = 'null' он также будет NULL для неподдерживаемого геометрического типа. Структура документа проверяется: type верхнего уровня должен быть равен FeatureCollection, а каждый элемент features должен иметь type Feature. Координаты должны удовлетворять ограничениям формы GeoJSON: LineString (и каждая линия в MultiLineString) должен содержать как минимум две позиции, а кольцо Polygon (и каждое кольцо в MultiPolygon) должно быть замкнутым и содержать как минимум четыре позиции. Некорректные документы отклоняются, а не молча загружаются. Другие ключи в объекте FeatureCollection (например, name или crs) и другие ключи внутри каждого объекта Feature (например, bbox) игнорируются. Порядок ключей может быть произвольным: type верхнего уровня может находиться как до, так и после массива features, а внутри объекта геометрии coordinates может находиться как до, так и после type. Вывод схемы возвращает указанную выше фиксированную схему, поэтому DESCRIBE и SELECT ... FROM format(...) работают без определения таблицы.

Пример использования

Рассмотрим следующий GeoJSON‑файл london.geojson, содержащий различные геометрические типы:
Можно выполнить запрос к файлу и посмотреть геометрические типы:
Query
Response
Расширение файла .geojson определяется автоматически, поэтому аргумент format можно не указывать:
Query
Мы можем использовать variantType, чтобы определить внутренний тип каждого объекта Geometry:
Query
Response
А исходные данные можно извлечь так:
Query
Response
При обращении к подстолбцу Geometry возвращается значение, если в строке хранится этот тип; в противном случае возвращается значение по умолчанию для этого типа — (0,0) для Point и [] для типов на основе массивов, — поэтому используйте variantType(geometry), чтобы определить, какой именно тип установлен. Мы также можем загружать данные GeoJSON в таблицу:
Query
Затем выполните запрос с фильтрацией по типу объекта:
Query
Response
Мы также можем определить схему данных GeoJSON без определения таблицы:
Query
Response

Обработка неподдерживаемых геометрических типов

Некоторые допустимые геометрические типы GeoJSON — такие как GeometryCollection и MultiPoint — не могут быть представлены типом Geometry в ClickHouse. Управлять тем, что происходит, когда такую геометрию нужно сохранить в столбце geometry, можно с помощью настройки input_format_geojson_unsupported_geometry_handling. Возможные значения:
  • 'throw' — сгенерировать исключение (по умолчанию)
  • 'null' — вставить значение NULL в столбец geometry и продолжить синтаксический разбор
Эта обработка применяется только при чтении столбца geometry. Если geometry не входит в число запрошенных выходных столбцов (например, SELECT id FROM ...), неподдерживаемая геометрия всё равно проверяется на корректность формата, но эта обработка не срабатывает: исключение не генерируется и NULL не вставляется, поскольку значение геометрии не материализуется.
Last modified on June 25, 2026