| Entrée | Sortie | Alias |
|---|---|---|
| ✔ | ✗ |
Description
FeatureCollection et produit une ligne par entité. Chaque ligne a le schéma fixe suivant :
| Colonne | Type | Description |
|---|---|---|
id | String | Le membre id de l’entité (une chaîne JSON ou un nombre), stocké sous forme de texte ; une chaîne vide si id est absent ou null. |
geometry | Geometry | La géométrie de l’entité, stockée sous la forme d’un type variant Geometry. |
properties | Nullable(JSON) | L’objet properties de l’entité, stocké dans une colonne JSON semi-structurée. Un "properties": null explicite est conservé comme NULL. |
Geometry de ClickHouse (un Variant). Les types de géométrie GeoJSON pris en charge sont Point, LineString, MultiLineString, Polygon et MultiPolygon. Les deux autres types de géométrie GeoJSON, GeometryCollection et MultiPoint, ne peuvent pas être représentés par le type Geometry ; par défaut, la lecture de l’un d’eux dans la colonne geometry lève une exception, mais ce comportement peut être modifié pour insérer NULL à la place — voir Gestion des types de géométrie non pris en charge ci-dessous. Par défaut, la colonne geometry vaut NULL uniquement lorsque la géométrie d’une entité est un null JSON explicite ; avec input_format_geojson_unsupported_geometry_handling = 'null', elle vaut aussi NULL pour un type de géométrie non pris en charge.
La structure du document est validée : le type de niveau supérieur doit être FeatureCollection et chaque élément de features doit avoir type égal à Feature. Les coordonnées doivent respecter les invariants de forme de GeoJSON — un LineString (et chaque ligne d’un MultiLineString) doit comporter au moins deux positions, et un anneau de Polygon (ainsi que chaque anneau d’un MultiPolygon) doit être fermé et comporter au moins quatre positions. Les documents mal formés sont rejetés plutôt que chargés silencieusement.
Les autres clés de l’objet FeatureCollection (comme name ou crs) et les autres clés à l’intérieur de chaque objet Feature (comme bbox) sont ignorées.
L’ordre des clés est flexible : le type de niveau supérieur peut apparaître avant ou après le tableau features, et, dans un objet de géométrie, coordinates peut apparaître avant ou après type.
L’inférence de schéma renvoie le schéma fixe ci-dessus, de sorte que DESCRIBE et SELECT ... FROM format(...) fonctionnent sans définition de table.
Exemple d’utilisation
london.geojson ci-dessous, qui contient un mélange de types de géométrie :
Query
Response
.geojson est automatiquement détectée ; l’argument de format peut donc être omis :
Query
variantType pour déterminer le type sous-jacent de chaque objet Geometry :
Query
Response
Query
Response
Geometry renvoie la valeur si la ligne contient ce type, et sinon la valeur par défaut du type — (0,0) pour Point et [] pour les types basés sur des tableaux — ; utilisez donc variantType(geometry) pour déterminer lequel est présent.
Nous pouvons également ingérer des données GeoJSON dans une table :
Query
Query
Response
Query
Response
Gestion des types de géométrie non pris en charge
GeometryCollection et MultiPoint — ne peuvent pas être représentés par le type Geometry de ClickHouse. Vous pouvez contrôler le comportement lorsqu’une telle géométrie doit être stockée dans la colonne geometry à l’aide du paramètre input_format_geojson_unsupported_geometry_handling. Les valeurs possibles sont :
'throw'— générer une exception (par défaut)'null'— insérer une valeurNULLdans la colonnegeometryet continuer l’analyse
geometry est lue. Lorsque geometry ne fait pas partie des colonnes de sortie demandées (par exemple SELECT id FROM ...), une géométrie non prise en charge est tout de même validée pour vérifier qu’elle est bien formée, mais ne déclenche pas ce traitement : elle ne génère pas d’exception et n’insère pas non plus NULL, car aucune valeur géométrique n’est matérialisée.