Skip to main content

Description

Lit un document GeoJSON FeatureCollection et produit une ligne par entité. Chaque ligne a le schéma fixe suivant : Chaque géométrie est stockée dans le type 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

Considérons le fichier GeoJSON london.geojson ci-dessous, qui contient un mélange de types de géométrie :
Nous pouvons interroger le fichier et examiner les types de géométrie :
Query
Response
L’extension de fichier .geojson est automatiquement détectée ; l’argument de format peut donc être omis :
Query
Nous pouvons utiliser variantType pour déterminer le type sous-jacent de chaque objet Geometry :
Query
Response
Et nous pouvons extraire les données sous-jacentes comme suit :
Query
Response
L’accès à une sous-colonne 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
Ensuite, effectuez une requête par type d’entité :
Query
Response
Nous pouvons également inférer le schéma des données GeoJSON sans définir de table :
Query
Response

Gestion des types de géométrie non pris en charge

Certains types de géométrie GeoJSON valides — tels que 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 valeur NULL dans la colonne geometry et continuer l’analyse
Ce comportement s’applique uniquement lorsque la colonne 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.
Last modified on July 2, 2026