| Entrada | Salida | Alias |
|---|---|---|
| ✔ | ✗ |
Descripción
FeatureCollection de GeoJSON y genera una fila por cada feature. Cada fila tiene el siguiente esquema fijo:
| Columna | Tipo | Descripción |
|---|---|---|
id | String | El miembro id de la feature (una cadena o un número JSON), almacenado como texto; una cadena vacía si id no está presente o es null. |
geometry | Geometry | La geometría de la feature, almacenada como un valor del tipo variante Geometry. |
properties | Nullable(JSON) | El objeto properties de la feature, almacenado como una columna JSON semiestructurada. Un "properties": null explícito se conserva como NULL. |
Geometry de ClickHouse (un Variant). Los tipos de geometría GeoJSON admitidos son Point, LineString, MultiLineString, Polygon y MultiPolygon. Los otros dos tipos de geometría de GeoJSON, GeometryCollection y MultiPoint, no pueden representarse con el tipo Geometry; por defecto, leer uno de ellos en la columna geometry genera una excepción, aunque esto puede cambiarse para insertar NULL en su lugar; consulta Manejo de tipos de geometría no admitidos más abajo. Por defecto, la columna geometry es NULL solo cuando la geometría de una feature es un null JSON explícito; con input_format_geojson_unsupported_geometry_handling = 'null', también es NULL para un tipo de geometría no admitido.
Se valida la estructura del documento: el type de nivel superior debe ser FeatureCollection y cada elemento de features debe tener type Feature. Las coordenadas deben cumplir las restricciones estructurales de GeoJSON: un LineString (y cada línea de un MultiLineString) debe tener al menos dos posiciones, y un anillo de Polygon (y cada anillo de un MultiPolygon) debe estar cerrado y tener al menos cuatro posiciones. Los documentos malformados se rechazan en lugar de cargarse silenciosamente.
Se ignoran otras claves del objeto FeatureCollection (como name o crs) y otras claves dentro de cada objeto Feature (como bbox).
El orden de las claves es flexible: el type de nivel superior puede aparecer antes o después del array features, y dentro de un objeto de geometría coordinates puede aparecer antes o después de type.
La inferencia de esquema devuelve el esquema fijo anterior, por lo que DESCRIBE y SELECT ... FROM format(...) funcionan sin necesidad de una definición de tabla.
Ejemplo de uso
london.geojson, que contiene una combinación de tipos de geometría:
Query
Response
.geojson se detecta automáticamente, por lo que se puede omitir el argumento format:
Query
variantType para comprobar el tipo subyacente de cada objeto de tipo Geometry:
Query
Response
Query
Response
Geometry, se devuelve el valor cuando la fila contiene ese tipo y, en caso contrario, el valor predeterminado del tipo — (0,0) para Point y [] para los tipos basados en arrays —, así que usa variantType(geometry) para saber cuál está definido.
También podemos ingestar datos GeoJSON en una tabla:
Query
Query
Response
Query
Response
Manejo de tipos de geometría no admitidos
GeometryCollection y MultiPoint — no pueden representarse con el tipo Geometry de ClickHouse. Puede controlar qué ocurre cuando debe almacenarse una geometría de este tipo en la columna geometry mediante la configuración input_format_geojson_unsupported_geometry_handling. Los valores posibles son:
'throw'— lanzar una excepción (predeterminado)'null'— insertar un valorNULLen la columnageometryy continuar el análisis
geometry. Cuando geometry no es una columna de salida solicitada (por ejemplo, SELECT id FROM ...), una geometría no admitida sigue validándose para comprobar que esté bien formada, pero no activa este comportamiento: ni lanza una excepción ni inserta NULL, porque no se materializa ningún valor de geometría.