-
Notifications
You must be signed in to change notification settings - Fork 19
Grootste gemene deler
Gezien we dezelfde databronnen zo divers mogelijk wensen te ontsluiten is het van groot belang om de meest gepaste grootste gemene deler van onze data te bepalen.
Ten behoeve daarvan hebben we de volgende doelrepresentaties geevalueerd op de volgende criteria:
- Modelleringsbasis (eg. document zoals Elasticsearch, regel zoals Postgres of relatie zoals Neo4j)
- Unique Identifier
- Geometrische velden
- Point
- Line String
- Multi Point
- Multi LineString
- Multi Polygon
- Geometry Collection
- Bounding Box
- Circle
- PolyhedralSurface
- TIN (TriangulatedSurface)
- Scalaire typen
- Numeriek
- Integer
- Floating Point
- Decimaal
- Text
- Classificatie
- Datum en Tijd
- Binair
- Numeriek
- Logische types
- Array
- Map
- Set
- Struct
- Range types
- Nesting
- Logisch
- Arbitrair
- Union types (incl. null)
- We werken exclusief op regel/row-basis
- Elke regel is adresseerbaar via een unique identifier in één kolom.
- We ondersteunen de scalar types:
- integer (tiny, small, int, bigint; max waarde ±2^53-1 ivm JSON)
- decimal (schaal en optioneel precisie, maximaal 15 decimalen, vast op kolombasis)
- floating point (half, float, double)
- boolean
- enum (maximaal 1024 waarden)
- text (char, varchar, string)
- binary (variable of fixed length)
- Tijd
- date (day within calendar)
- time (time within day, microseconde precisie)
- timestamp (moment in time, microseconde precisie, UTC)
- interval (maanden, dagen en milliseconden)
- Geometrie
Een regel heeft maximaal één actief geometrie veld- Point
- Polygoon
- Line String
- Multi Point
- Multi LineString
- Multi Polygon
- Een kolom kan van de logische types zijn:
- array (lijst van waardes met mogelijke duplicatie)
- struct (klasse met gedefinieerde velden en types)
- Een logisch type kan zelf ook weer een ander logisch type bevatten (e.g. array van maps)
- Een kolom heeft geen UNION-semantiek dus kan niet meerdere types waardes te bevatten; behalve null.
- Arbitrair-geneste data kan alleen, ongeïndexeerd, worden opgeslagen als JSON string.
Wat dit dus niet bevat is (en welke doelrepresentatie het niet ondersteunt):
- Data op graaf/relatie niveau (Postgres, Avro, DataFrame, ...)
- Meerdere (actieve) geometrie velden per object (GeoJSON)
- Bounding Box en Circle (PostGIS, GeoJSON, GeoPandas, Athena)
- GeometryCollection (AWS Athena, GeoPandas)
- PolyhedralSurface en TIN (GeoJSON, ElasticSearch)
- Decimalen met varierende precisie per regel of meer dan 15 decimalen precisie. (JSON)
- Integers boven ±2^53 (JSON)
- Enums met meer dan 1024 waardes (Postgres)
- Tijd of moment op meer dan microseconde precisie (Postgres)
- Interval op meer dan milliseconde precisie (Avro)
- Sets
Dit kan altijd toegevoegd worden als validatie op een Array - Maps
Dit kan gemodelleerd worden als ongeindexeerde JSON.
Eventueel later nog toe te voegen d.m.v. een koppeltabel in Postgres met beperking dat keys altijd strings zijn. - Union types (Postgres, Spark/Pandas Dataframe)
- Range types (JSON Schema, Avro, Athena, Spark)
- Arbitraire nesting met behoud van type informatie en indexering (Postgres, Avro, AWS Glue/Athena, Spark)
Wat nog ter discussie staat:
- Integers boven ±2^53
Dit lijkt binnen de gekozen aanpak niet haalbaar maar zou je eigenlijk wel verwachten als mogelijkheid.
- Elke regel is adresseerbaar via een unique identifier in één kolom.
- Gemodelleerd als
$ref
naar/definitions/id
.
"$ref": "https://ams-schema.glitch.me/[email protected]#/definitions/id"
- Gemodelleerd als
- Scalaire types
-
integer (tiny8, small16, int32, bigint64)
- Gemodelleerd als
integer
metexclusiveMaximum
en negatiefminimum
van2^(bits-1)
.
{"type":"integer", "exclusiveMaximum": 128, "minimum": 128}
- Signed integers kunnen een
minimum
van 0 opgeven enexclusiveMaximum
van2^bits
{"type":"integer", "exclusiveMaximum": 256, "minimum": 0}
- Bij ontbreken van een maximum/minimum wordt een bigint64 gebruikt.
- Maximum-/minimumwaardes van meer dan ±2^53-1 (15 decimalen) leveren een waarschuwing op m.b.t. mogelijk inaccurate encodering in JSON.
- Unsigned bigint64 wordt niet ondersteund.
- Gemodelleerd als
-
decimal
- Gemodelleerd als
number
met eenmultipleOf
van0.1^schaal
.
{"type":"number", "multipleOf": 0.01}
- Optionele precisie wordt meegeven via de
maximum
van10^(precisie-schaal)-1
e.g. een precisie van 7 bij een schaal van 2 geeft een maximum van99999
)
{"type":"number", "multipleOf": 0.01, "maximum": 99999}
- Maximum-/minimumwaardes van meer dan 15 decimalen (±2^53-1) leveren een waarschuwing op m.b.t. mogelijk inaccurate encodering in JSON.
- Gemodelleerd als
-
floating point (half, float, double)
- Gemodelleerd als
number
zonder opgave vanmultipleOf
. Opslag gebeurt altijd in double formaat. Half en float kan als annotatie op deprovenance
meegenomen worden. -
dataset: {"provenance": {..., "type": "elasticsearch"}
column: {"provenance": {..., "type":"half_float"}
- Gemodelleerd als
- boolean
- Gemodelleerd als
boolean
type.
- Gemodelleerd als
- enum (maximaal 1024 waarden)
- Gemodelleerd als een
string
type metenum
voor de toegestane waardes. {"type": "string", "enum": ["rood", "geel", "groen"]}
- Gemodelleerd als een
- text (char, varchar, string)
- Gemodelleerd als
string
{"type":"string"}
- Varchar heeft een
maxLength
attribuut
{"type":"string", "maxLength": 10}
- Char heeft ook een
minLength
attribuut met de gelijke waarde
{"type":"string", "maxLength": 10, "minLength": 10}
- Gemodelleerd als
- binary (variable of fixed length)
- Gemodelleerd als
string
metcontentEncoding
van typebase64
{"type":"string", "contentEncoding": "base64"}
- Fixed length binary kan deels enforced worden via een
maxLength
van via de formule4*ceil(bytes/3)
en kan meegenomen in de provenance.
- Gemodelleerd als
- Tijd
- date (day within calendar)
- Gemodelleerd als string met
date
format
{"type":"string", "format": "date"}
⇒"2020-02-20"
- Gemodelleerd als string met
- time (time within day, microseconde precisie)
- Gemodelleerd als string met
time
format. Precisie boven de microseconde wordt afgekapt.
{"type":"string", "format": "time"}
⇒"12:00:00"
of"12:00:00.000000"
- Gemodelleerd als string met
- timestamp (moment in time, microseconde precisie, UTC)
- Te modelleren als string met
date-time
format.
Precisie boven de microseconde wordt afgekapt.
Bij voorkeur wordt gewerkt met een opgegeven tijdszone. Wanneer er geen tijdszone wordt opgegeven levert dit een data-kwaliteit waarschuwing op.
{"type":"string", "format": "date-time"}
⇒"2020-02-20T12:00:00+01:00"
,"2020-02-20T12:00:00.000000+01:00"
of"2020-02-20T12:00:00"
- Te modelleren als string met
date-time
format.
Precisie boven de microseconde wordt afgekapt.
De tijdszone kan weggelaten wanneer deze in de metadata van het veld opgenomen is.
{"type":"string", "format": "date"}
- Te modelleren als string met
- interval (maanden, dagen en milliseconden)
- Te modelleren als string met een format volgens het ISO8601 Durations formaat.
Eventueel te valideren via een complexe reguliere expressie.
- Te modelleren als string met een format volgens het ISO8601 Durations formaat.
- date (day within calendar)
-
integer (tiny8, small16, int32, bigint64)
- Geometrie (Point, Polygoon, Line String, Multi Point, Multi LineString, Multi Polygon)
- Gemodelleerd als GeoJson Schema's Geometry type
"$ref": "https://geojson.org/schema/Geometry.json"
of in context:
"geometry": { "$ref": "https://geojson.org/schema/Geometry.json", "description": "Geografische locatie" }
- Gemodelleerd als GeoJson Schema's Geometry type
- Een kolom kan van de logische types zijn:
- array (lijst van waardes met mogelijke duplicatie)
- Gemodelleerd als List validation met gespecificeerd item type.
{"type": "array", "items": {"type": "number"}}
- Tuple validatie wordt niet ondersteunt aangezien dit in veel doelrepresentaties een union semantiek vereist. Elk tuple element kan wel een eigen veld gegeven worden.
- Gemodelleerd als List validation met gespecificeerd item type.
- struct (klasse met gedefinieerde velden en types)
- Gemodelleerd als object met typed properties en geen additionele properties
{"type": "object", "properties": {"count": { "type": "number" }}, "additionalProperties": false}
- Gemodelleerd als object met typed properties en geen additionele properties
- array (lijst van waardes met mogelijke duplicatie)
- Een logisch type kan zelf ook weer een ander logisch type bevatten (e.g. array van structs)
{"type": "array", "items": {"type": "object", "properties": {"name": { "type": "string" }}, "additionalProperties": false}}
- Een kolom heeft geen UNION semantiek dus kan niet meerdere types waardes te bevatten; behalve null.
- Elk veld is nullable tenzij het als
required
property is opgegeven.
{"type": "object", "properties": {"name": { "type": "string" }}, "required": ["name"], "additionalProperties": false}
- De anyOf operater is dus niet toegestaan
{"anyOf": [{ "type": "integer" }, { "type": "string"}]}
- Elk veld is nullable tenzij het als
- Arbitrair-geneste data kan alleen, ongeindexeerd, worden opgeslagen als JSON string.
- Gemodelleerd als object type zonder type definitie
{"type": "object"}
- Dit is een fallback type en het gebruik hiervan dient waar mogelijk voorkomen te worden.
- Gebruik voor bijvoorbeeld een config/properties veld (string keys naar string values) is een voorbeeld van acceptabel gebruik.
- Gemodelleerd als object type zonder type definitie
Deze aspecten hebben we geevalueerd aan de hand van de volgende doelrepresentaties:
Gezien de aard van RDF grafen zijn alle representaties per definitie te representeren. Hier zal de complexiteit vooral liggen in het technisch afdwingen van de subset van representaties (document als modelleringsbasis en beperkte logische types.)
- Modelleringsbasis
Postgres werkt exclusief op basis van row/regel als kernelement voor data modellering.
Werken met documenten (schemaloos en arbitrair genest) is mogelijk via hulpmiddelen maar niet idiomatisch.
Data opslaan op het niveau van (graaf-)relaties is effectief niet mogelijk wegens performance problematiek. - Unique Identifier
Samengestelde unique identifiers van arbitraire waardes (integer, string, etc.)
Het UUID data type wordt ook ondersteund. - Geometrische velden
PostGIS ondersteunt meerdere geometrie velden per regel. Een PostGIS geometrie veld kan alle relevante geometrieen ondersteunen.- Point ✔
- Line String ✔
- Polygon ✔
- Multi Point ✔
- Multi LineString ✔
- Multi Polygon ✔
- Geometry Collection ✔
- Bounding Box ✔
- Circle Circle is niet ondersteund
- PolyhedralSurface ✔
- TIN (TriangulatedSurface) ✔
- Scalaire typen
- Numeriek
- Integer
Signed integers van de types smallint, integer en bigint (maximum waarde van ±2^63) - Floating Point
Real of double (max 8 bytes en 15 decimalen precisie) - Decimaal
Per kolom wordt zowel de maximum cijfers voor als het minimum aantal cijfers achter de komma gedefinieerd.
Het is ook mogelijk hetmoney
type te gebruiken om alleen fractionele precisie achter de komma te definieren per kolom.
Varierende precisie per regel/row is echter niet mogelijk.
- Integer
- Text
Variable character length with maximum (varchar), fixed character length (char), variable length (text) - Classificatie
- Boolean
Ondersteund - Enum
Alleen tekst gebaseerd; met een maximum lengte van 63 bytes by default.
Per database server kan je maximaal 2^32 (4,294,967,296) enums opslaan dus we stellen voor het aantal enum waardes per veld te beperken tot 1024
- Boolean
- Numeriek
- Datum en Tijd
- Datum
Dag van 4713 BC tot 5874897 AD - Tijd
Tijd van de dag, **tot microseconde **precisie. Ondersteunt ook tijdzones. - Moment
Timestamp kan zonder time zone en is dan gewoon datum + tijd.
Samen met timezone is het een exact moment in de tijd. - Interval
Een interval met een optionele waardes per unit en een direction. Compatibel met ISO 8601 time intervals.
De units zijn microsecond, millisecond, second, minute, hour, day, week, month, year, decade, century, millennium
- Datum
- Binair
Postgres ondersteunt alleen variable length binary blobs (bytea.) Fixed length binary data kan daar natuurlijk wel gewoon in gerepresenteerd worden. - Logische types
- Array
Postgres ondersteunt meerdimensionele arrays met data van een gespecificeerd type.
Dit kan natuurlijk ook in tabelvorm genormaliseerd worden opgeslagen. - Map
Door middel van de HSTORE extensie is het mogelijk key value pairs van string naar string te implementeren. Het JSONB type kan dit ook representeren.
Typed map data is niet direct ondersteund maar kan wel weergegeven worden d.m.v. een koppeltabel indien nodig. - Set
Een set data type ondersteunt Postgres niet.
Ook dit is natuurlijk wel te normaliseren door middel van een extra tabel. - Struct
Postgres kan complexe types ondersteunen.
- Array
- Range types
Postgres ondersteunt range types op veel verschillende typen en custom ranges kunnen gedefinieerd worden. - Nesting
- Logisch
Logische nesting is realiseerbaar door middel van complex types. - Arbitrair
Arbitraire nesting is alleen realiseerbaar door een JSONB type te gebruiken en dat te indexeren.
- Logisch
- Union types
Postgres ondersteunt geen union types,m.u.v. de UNION met NULL voor elk mogelijk type.
- Modelleringsbasis
Geschikt voor document of row based modellering - Unique Identifier
Unique identifiers zijn niet intrinsiek aanwezig maar velden kunnen wel als dusdanig gebruikt worden.
Het UUID data type wordt niet expliciet ondersteund maar kan wel gerepresenteerd worden. - Geometrische velden
GeoJSON ondersteunt slechts één actieve geometrische feature per object.- Point ✔
- Line String ✔
- Polygon ✔
- Multi Point ✔
- Multi LineString ✔
- Multi Polygon ✔
- Geometry Collection ✔
- Bounding Box Bounding Box is niet ondersteund
- Circle: Circle is niet ondersteund
- PolyhedralSurface PolyhedralSurface is niet ondersteund
- TIN (TriangulatedSurface) TIN is niet ondersteund
- Scalaire typen
- Numeriek
- Integer
Integers worden niet inherent ondersteund in JSON. Met behulp van metadata kan het wel opgeslagen worden alsnumber
type.
Dit heeft wel slechts een maximum waarde van maar ±2^53 (9.007.199.254.740.991) - Floating Point
Wordt standaard opgeslagen als een 'double' van 8 bytes met 15 decimalen precisie. - Decimaal
Wordt niet ondersteund. Met behulp van metadata kan het wel opgeslapen worden als number type door middel van afronding naar de precisie van de bron (i.e. 3.798999 naar 3.799 gezien precisie van 3 decimalen. Dit geeft wel een ook een maximale precisie van 15 decimalen.
- Integer
- Text
Wordt ondersteund in een string formaat met variable length text. Lengte restricties worden niet ondersteund maar kunnen wel gerepresenteerd worden. - Classificatie
- Boolean
Ondersteund in de vorm van true false. - Enum
Niet ondersteund in het data formaat. Kan wel weergegeven worden in het bijhorende JSON Schema.
- Boolean
- Datum en Tijd
Geen van de datum en tijd types wordt direct ondersteund door JSON. Met behulp van het schema kunnen ze wel gerepresenteerd worden. - Binair
- JSON ondersteunt geen binaire data. Dit kan wel weer worden gegeven in de vorm van Base64 encoded strings.
- Numeriek
- Logische types
- Array
JSON ondersteunt dit volledig op elk niveau; echter niet typed. - Map
Volledig ondersteund; echter niet typed. - Set
Niet ondersteund. - Struct
JSON kan geneste complexe structuren aan; echter niet typed.
- Array
- Range types
Kan in string formaat geencodeerd worden maar ook in JSON schema worden ranges niet ondersteund. - Nesting
- Logisch
Logische nesting is onbeperkt mogelijk - Arbitrair
Arbitraire nesting is onbeperkt mogelijk
- Logisch
- Union types
Union types zijn onbeperkt mogelijk (volledig dynamisch getyped; ook JSON Schema ondersteunt het)
MapServer ondersteunt de weergave van alle relevante geometrische gegevens in de vorm van MapLayers.
MapServer biedt ook de mogelijkheid om metadata behorende bij een punt te ontsluiten. Dit gebeurt echter door middel van templating waarbij de onderliggende Postgres kolommen in het template ontsloten kunnen worden.
Dit betekent dat het zonder toevoegingen een zeer beperkend formaat zou zijn. Dit hoeft verder niet problematisch te zijn aangezien de GetFeatureInfo resultaten ook als optioneel gezien zouden kunnen worden en/of per dataset/maplaag in custom templates meegeleverd kan worden. Dit dient echter wel besproken te worden met eventuele klanten.
De onderstaande analyse gaat uit van een poging tot automatische ontsluiting van alle gegevens. Beperkingen zijn niet als rood gemarkeerd aangezien deze te vergaand zijn om ook onze grootste gemene deler te laten sturen.
- Modelleringsbasis: Volgt Postgres modellering
- Unique Identifier: Kan deze weergeven.
- Geometrische velden: Ondersteunt alle beschikbare PostGIS geometrieen.
-
Scalaire typen
- Numeriek: Kunnen weergegeven worden in text formaat.
- Text: Kan weergegeven worden.
- Classificatie: Kunnen weergegeven worden in text formaat.
- Datum en Tijd: Onduidelijk of de formattering controleerbaar is en voldoet aan de vereisten.
- Binair: Onduidelijk of binaire data als Base64 gerenderd kan worden.
-
Logische types
- Array: Onduidelijk of dit ondersteund wordt.
- Map: Hoogstwaarschijnlijk niet ondersteund.
- Set: Niet ondersteund.
- Struct: Waarschijnlijk wel ondersteund. Nesting zal programmatisch in het template uitgeschreven moeten worden.
-
Nesting
-
Logisch: Logische nesting kan programmatisch uitgeschreven worden in de templates.
Complex maar haalbaar. - Arbitrair: Dit valt niet programmatisch te realiseren in GetFeatureInfo templates
-
Logisch: Logische nesting kan programmatisch uitgeschreven worden in de templates.
- Union types: Mogelijk via templating
Wellicht zou het wel mogelijk zijn om een JSON representatie van het hele object toe te voegen op Postgres niveau welke één op één in het template kan worden ontsloten.
- Modelleringsbasis
De modelleringsbasis van ElasticSearch is document. Het is natuurlijk echter altijd mogelijk om rows weer te geven als een document. - Unique Identifier
Ondersteunt identifiers door representatie in native datatypes. Uniqueness constraints kunnen niet ge-enforced worden. - Geometrische velden
- Point ✔
- Line String ✔
- Polygon ✔
- Multi Point (Nog) niet goed ondersteund voor querying.
- Multi LineString ✔
- Multi Polygon ✔
- Geometry Collection ✔
- Bounding Box ✔
- Circle ✔
- PolyhedralSurface ✘
- TIN (TriangulatedSurface) ✘
- Scalaire typen
- Numeriek
- Integer ✔ long, integer, short and byte
- Floating Point
float, double, half_float - Decimaal
Kan als scaled_float gerepresenteerd worden (long met fixed precisie/scaling)
- Text
Ruim ondersteund inclusief meervoudig indexering - Classificatie
- Boolean ✔
- Enum ✔
Beperkingen op waardes niet ondersteund. Efficiente indexering wel mogelijk door 'keyword' type.
- Numeriek
- Datum en Tijd
- Datum
Date zijn 'sort of' ondersteund als time since epoch in UTC. - Tijd
Niet ondersteund maar wel representabel. - Moment
Ondersteund; echter <span style="color: #f39c12;>opgesplitst in date met milliseconde- en date_nanos met nanoseconde-precisie. - Interval
Niet ondersteund maar wel representabel.
- Datum
- Binair
Ondersteund echter niet doorzoekbaar. - Logische types
- Array ✔
- Map ✔
- Set
Niet ondersteund. - Struct
Typed data wordt niet ondersteund maar kan wel weergegeven worden.
- Range types ✔
ElasticSearch ondersteund range types voor integer, float, long, double, date en ip. - Nesting
- Logisch ✔
- Arbitrair ✔
- Union types ✔
In CSV kan elke mogelijke waarde natuurlijk gemapt worden op een string representatie.
Structs zouden ook in CSV weergegeven kunnen worden door de nesting hierarchie plat te slaan in CSV kolommen.
Arrays en maps kunnen kunnen niet op een kolomstructuur gemapt worden dus zullen deze altijd als text representatie opgenomen worden.
Derhalve oefent CSV geen invloed uit op de grootste gemene deler.
- Modelleringsbasis
AWS Avro is een row/record formaat. - Unique Identifier
Wordt als concept niet ondersteund. Wel een UUID type. - Geometrische velden
Niet inherent ondersteund. WKT/WKB representatie is altijd mogelijk. Het is mogelijk om dit ook native in Avro te encoden d.m.v. custom logische types; echter is het voordeel daarvan boven WKB/WKT nog niet duidelijk. - Scalaire typen
- Numeriek
- Integer ✔ (int, long)
- Floating Point ✔ (float, double)
- Decimaal ✔ (logisch type; precisie en schaal per veld)
- Text ✔ (string)
- Classificatie
- Boolean ✔
- Enum ✔
- Numeriek
- Datum en Tijd
- Datum ✔
- Tijd ✔ (vooraf gespecificeerd op milleseconde en maximaal microseconde precisie)
- Moment ✔ (vooraf gespecificeerd op milleseconde en maximaal microseconde precisie)
- Interval ✔ Duration. Beschikbaar in units months, days en milliseconds. Dit zijn de universeel toepasbare units.
- Binair ✔ (zowel fixed als variable length)
- Logische types
- Array ✔ (incl. typing van waardes)
- Map ✔ (incl. typing van waardes; alle keys zijn strings)
- Set ✘
- Struct ✔ (incl. typing van waardes)
- Range types ✘
Niet ondersteund. Kan wel gepresenteerd worden natuurlijk. - Nesting
- Logisch ✔ logische types kunnen genest worden
- Arbitrair ✘ arbitraire nesting niet mogelijk; alleen via indexeren van string veld met JSON
- Union types ✔
Volledig ondersteund op elk niveau.
- Modelleringsbasis
Pandas Dataframes zijn een row/record formaat. - Unique Identifier
Wordt ondersteund via indexering van Pandas. - Geometrische velden
Ondersteund via de GeoPandas extensie- Point ✔
- Line String ✔
- Polygon ✔
- Multi Point ✔
- Multi LineString ✔
- Multi Polygon ✔
- Geometry Collection Niet ondersteund.
- Bounding Box ✘
- Circle ✘
- PolyhedralSurface ✘
- TIN (TriangulatedSurface) ✘
- Scalaire typen
- Numeriek
- Integer ✔ (int64)
- Floating Point ✔ (float64)
- Decimaal ≈ can be stored as Python object
- Text ≈ can be stored as Python object
- Classificatie
- Boolean ✔
- Enum ✔ (CategoricalDtype)
- Numeriek
- Datum en Tijd
- Datum ≈ can be stored as Python object
- Tijd ≈ can be stored as Python object
- Moment ✔ (reqular and tz-aware)
- Interval ??
It seems this only supports an interval in terms of seconds and thus not month or year based intervals.
- Binair ≈ can be stored as Python object
- Logische types
- Array ✔
- Map ≈ can be stored as Python object
- Set ≈ can be stored as Python object
- Struct ✔
- Range types ✔ (IntervalIndex)
- Nesting
- Logisch ✔
- Arbitrair ≈ can be stored as Python objects
- Union types ✘
- Modelleringsbasis
Dataframes zijn een row/record formaat. - Unique Identifier
Wordt niet specifiek ondersteund. - Geometrische velden
Ondersteund via de GeoSpark extensie- Point ✔
- Line String ✔
- Polygon ✔
- Multi Point ✔ (Niet in code gevonden maar wel vermeld op de GeoSpark site)
- Multi LineString ✔ (Niet in code gevonden maar wel vermeld op de GeoSpark site)
- Multi Polygon ✔ (Niet in code gevonden maar wel vermeld op de GeoSpark site)
- Geometry Collection ✔ (Niet in code gevonden maar wel vermeld op de GeoSpark site)
- Bounding Box ✔
- Circle ✔
- PolyhedralSurface ✘
- TIN (TriangulatedSurface) ✘
- Scalaire typen
- Numeriek
- Integer ✔ (byte, short, integer, long)
- Floating Point ✔ (float, double)
- Decimaal ✔ (varying precision per row)
- Text ✔ (no fixed lengths)
- Classificatie
- Boolean ✔
- Enum
Not greatly supported. Seems like it would need some custom Enumeration User Defined Type to be added.
For performance reasons using strings is also not recommended which makes just mapping it to string less than ideal.
- Numeriek
- Datum en Tijd
- Datum ✔
- Tijd ✘
- Moment ✔
- Interval ≈ Supported but only months and microseconds. Not days which is incorrect when crossing daylight savings time adjustments.
- Binair ✔ (no fixed lengths)
- Logische types
- Array ✔ (typed)
- Map ✔ (typed)
- Set ✘
- Struct ✔ (typed)
- Range types ✘
- Nesting
- Logisch ✔
- Arbitrair ✘ only as raw manually processed JSON blob
- Union types ✘
AWS Glue is het meta schema formaat dat ondersteund wordt door AWS Athena; een flexibele BI omgeving die gemaakt is om efficient te werken op heterogene data; zoals ook binnen DataPunt het geval is.
We hebben niet direct de wens om te integreren met AWS Athena maar het is een goed model om tegen te vergelijken als sanity check.
Zo heeft Athena bijvoorbeeld beperkingen m.b.t. het gebruik van Geometry Collections en kiezen we er toch voor om deze in Amsterdam Schema toe te laten.
- Modelleringsbasis
AWS Glue werkt ook op row-basis - Unique Identifier
Wordt als concept niet ondersteund. Ook geen UUID veld. Wel allemaal representabel. - Geometrische velden
Kan opgeslagen worden als JSON of WKT representatie in een veld.- Point ✔
- Line String ✔
- Polygon ✔
- Multi Point
Multi point wordt niet ondersteund - Multi LineString ✔
- Multi Polygon ✔
- Geometry Collection
Geometrie collecties worden niet ondersteund. - Bounding Box ✘
- Circle ✘
- PolyhedralSurface ✘
- TIN (TriangulatedSurface) ✘
- Scalaire typen
- Numeriek
- Integer ✔ (tinyint, smallint, int, bigint)
- Floating Point ✔ (float, double)
- Decimaal ✔ (precisie en schaal per kolom)
- Text ✔ (char, varchar(65535), string )
- Classificatie
- Boolean ✔
- Enum
- Numeriek
- Datum en Tijd
- Datum ✔
- Tijd ✘ (wel representabel, niet ondersteund)
- Moment ✔
- Interval
Niet omschreven welke units mogelijk zijn. Voorbeelden melden week, day, hour, minute en second. Werkt niet in alle systemen.
- Binair ✔
- Logische types
- Array ✔ (incl. typing van waardes)
- Map ✔ (incl. typing van sleutels en waardes)
- Set ✔ (incl. typing van waardes)
- Struct ✔ (incl. typing van waardes)
- Range types ✘
Niet ondersteund. Kan wel gepresenteerd worden natuurlijk. - Nesting
- Logisch ✔ alle logische types kunnen genest worden
- Arbitrair ✘ arbitraire nesting niet mogelijk; alleen via indexeren van string veld met JSON
- Union types ✔
Volledig ondersteund op elk niveau.