| Entrada | Saída | Alias |
|---|---|---|
| ✔ | ✗ |
Descrição
FeatureCollection e produz uma linha por feature. Cada linha tem o seguinte esquema fixo:
| Coluna | Tipo | Descrição |
|---|---|---|
id | String | O membro id da feature (uma string ou número JSON), armazenado como texto; uma string vazia se o id estiver ausente ou for null. |
geometry | Geometry | A geometria da feature, armazenada como um tipo Geometry Variant. |
properties | Nullable(JSON) | O objeto properties da feature, armazenado como uma coluna JSON semiestruturada. Um "properties": null explícito é preservado como NULL. |
Geometry do ClickHouse (um Variant). Os tipos de geometria GeoJSON compatíveis são Point, LineString, MultiLineString, Polygon e MultiPolygon. Os outros dois tipos de geometria GeoJSON, GeometryCollection e MultiPoint, não podem ser representados pelo tipo Geometry; por padrão, a leitura de um deles na coluna geometry gera uma exceção, mas isso pode ser alterado para inserir NULL — veja Tratamento de tipos de geometria não compatíveis abaixo. Por padrão, a coluna geometry é NULL apenas quando a geometria de uma feature é um JSON null explícito; com input_format_geojson_unsupported_geometry_handling = 'null', ela também é NULL para um tipo de geometria não compatível.
A estrutura do documento é validada: o type de nível superior deve ser FeatureCollection, e cada elemento de features deve ter type Feature. As coordenadas devem obedecer às invariantes de forma do GeoJSON — um LineString (e cada linha de um MultiLineString) deve ter pelo menos duas posições, e um anel de Polygon (e cada anel de um MultiPolygon) deve ser fechado e ter pelo menos quatro posições. Documentos malformados são rejeitados, em vez de serem carregados silenciosamente.
Outras chaves no objeto FeatureCollection (como name ou crs) e outras chaves dentro de cada objeto Feature (como bbox) são ignoradas.
A ordem das chaves é flexível: o type de nível superior pode aparecer antes ou depois do array features, e, dentro de um objeto de geometria, coordinates pode aparecer antes ou depois de type.
A inferência de esquema retorna o esquema fixo acima, portanto DESCRIBE e SELECT ... FROM format(...) funcionam sem uma definição de tabela.
Exemplo de uso
london.geojson, com uma combinação de tipos de geometria:
Query
Response
.geojson é detectada automaticamente, portanto o argumento de formato pode ser omitido:
Query
variantType para verificar o tipo subjacente de cada objeto Geometry:
Query
Response
Query
Response
Geometry, o valor é retornado quando a linha contém esse tipo; caso contrário, retorna o valor padrão do tipo — (0,0) para Point e [] para os tipos baseados em Array — portanto, use variantType(geometry) para identificar qual deles está definido.
Também podemos fazer a ingestão de dados GeoJSON em uma tabela:
Query
Query
Response
Query
Response
Tratamento de tipos de geometria não compatíveis
GeometryCollection e MultiPoint — não podem ser representados pelo tipo Geometry do ClickHouse. Você pode controlar o que acontece quando uma dessas geometrias precisa ser armazenada na coluna geometry usando a configuração input_format_geojson_unsupported_geometry_handling. Os valores possíveis são:
'throw'— lançar uma exceção (padrão)'null'— inserir um valorNULLna colunageometrye continuar a análise
geometry é lida. Quando geometry não é uma coluna de saída solicitada (por exemplo, SELECT id FROM ...), uma geometria não compatível ainda é validada quanto à sua integridade estrutural, mas não aciona esse tratamento — ela não lança exceção nem insere NULL, porque nenhum valor de geometria é materializado.