-
-
Notifications
You must be signed in to change notification settings - Fork 83
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BAG: Tijdzone voor BAG is onjuist #238
Comments
This reverts commit b2a2038. Fixes: nlextract#238
Timestamp met timezone is wel het meest gebruikelijk om te doen in Postgres. Bij de BAG gaat het om de datum, maar goed die verspringt dus blijkbaar. Het is ook weer typisch BAG om niet een standaard formaat voor datum/tijd te gebruiken als ISO 8601. We mogen aannemen dat de nullen een lokale NL ( |
In de huidige opzet moet elke postgresql connectie de timezone expliciet instellen, dit is een bijzonder irritante regression. De default configuratie van postgresql op Debian gebruikt de TZ waarde van het OS, wat voor systemen buiten Nederland (cloud instances e.d.) niet Europe/Amsterdam hoeft te zijn.
|
Ben geen time expert: maar begreep dat door gebruik van Maar goed, het blijft interessant, want gaat over BAG datums, tijd is onbelangrijk. Kan |
|
Het lijkt me juist ongewenst om geen tijdzone te gebruiken: dat laat de tijdstempel ongedefinieerd. Zeker in het geval je een willekeurige machine met willekeurige tijdzone gebruikt en daarop webservices bouwt die de data publiceert. Dan kun je nergens meer van op aan. Misschien is het beter om toch de tijdzone van de database in te stellen op Europe/Amsterdam tijdens het opzetten van de tabellen. Zie de discussie bij het Pull request. |
Het instellen van de tijdzone van de database kan alleen door gebruikers die admin rechten op hun postgresql server hebben, dat zijn ze niet allemaal. Als men graag een timezone aan de datums in de BAG knoopt kan met dat eenvoudig zelf:
Ik zie geen reden om |
Erop vertrouwen dat servers en clients het vanzelf maar goed doen als ze allemaal in een andere timezone staan lijkt me juist gevaarlijk. Ik gok dat daarom issue #223 is geopend om timezones in te stellen. |
Er is geen enkel risico voor clients en servers die "allemaal in een andere timezone staan", dat is juist het mooie van de Omdat de datums in de BAG geen volwaardige datum met tijd zijn, moeten deze waardes niet als zodanig behandeld worden. Alle applicaties die van de BAG database gebruik maken moeten rekening houden dat het tijd component een volg nummer is, en dat de datums van toepassing zijn op Nederland. Waarom is de timezone voor de datum volgens jou van belang? Het lijkt er op dat de je geen concrete use-case hebt voor de timezone change, waarom heb je die change dan door gevoerd? Je heb daarmee een regression geintroduceerd waardoor de BAG database niet meer te gebruiken is zoals het de voorgaande jaren wel was. Zolang er geen concrete use-case voor timezones in de BAG database zijn moeten de betreffende changes gerevert worden (#239). Wanneer er wel een concrete use-case is kan daarvoor een betere oplossing ontwikkeld worden. Bijvoorbeeld een optioneel post processing SQL script om een extra kolom met timezone toe te voegen naast de |
Heren. Ik breek mij er ook het hoofd over (en hopelijk @fsteggink en @arjennienhuis nu ook). We willen voor iedereen de correcte/meest bruikbare BAG DB. Mijn gevoel voor correctheid zou zeggen om altijd Lijkt mij goed use-cases te maken waarin de oorspronkelijke (of nieuwe) situatie verkeerde resultaten zou opleveren. Bijv: queries:
Of ik deze queries nu in Amsterdam of op Hawaii uitvoer, ik moet hetzelfde aantal krijgen. Niet op Hawaii iets anders omdat het daar 9 of 10 uur vroeger is en/of ik als client "ingewikkelde" dingen moet doen. |
In het geval van queries in een andere timezone dan Europe/Amsterdam moet de applicatie/query zijn lokale tijd omzetten naar Europe/Amsterdam, dit kan bijvoorbeeld door het gebruik van Mijn use-case is het vergelijken van de M.i moet NLExtract de data die het importeerd nagenoeg as-is importeren, daarnaast kan het de data verrijken met optionele script die bijvoorbeeld het gebruik in de SQL context verbeteren. Hoe de data geinterpreteerd wordt is het domein van de applicaties die gebruik maken van de NLExtract databases. |
Ik heb deze discussie niet gevolgd, aangezien ik mijn hoofd over dit issue aan het breken ben. Ik ben het op zich met Bas eens dat NLExtract de data zoveel mogelijk "as is" moet importeren, maar wel "interpretatie" moet doen voor zover dat uit de BAG (of welke andere basisregistratie dan ook) voortvloeit. Als de BAG voorschrijft dat een datum aan een tijdzone gebonden is, dan moet NLExtract dit ook zo importeren. Als dit niet helder is uit de BAG documentatie, dan moeten we dit ergens in de docs van NLExtract melden en pas dan is het aan de applicatie die de dump gebruikt om te interpreteren. Let op, het kan ook zo zijn dat Geonovum ervan uitgaat dat datums en tijdstippen altijd voor Nederland gelden. Dit zou bij hen gecheckt moeten worden. Een discussie hierover kan het beste op het PDOK-forum worden gevoerd. Dan kunnen ook makkelijk mensen van Geonovum of de LV's erbij betrokken worden. Verder gelden dit soort vragen niet alleen voor NLExtract, maar voor alle gebruikers van de basisregistraties. |
De reden dat ik de wijziging heb gedaan is vanwege issue #223: dat stond al een tijd open en de algemene stemming was dat het een gewenste aanvulling was. Het zou mooier zijn geweest als de BAG-export een tijdzone zou specificeren (er wordt wel een SRID meergegeven voor de geom), maar helaas. Voor wat het waard is: volgens mij gebruikt het kadaster zelf wel de Op het moment gebruiken de 'actueel' en 'actueel-bestaand' views de timestamp van de server. Als de server in Hawaii staat, dan kan dat dus wel een verkeerde selectie geven. Over een andere boeg: wellicht moeten we de |
De tabellen moet m.i. de data as-is opslaan, views e.d. toevoegingen kunnen daar verrijkingen op doen zoals het toevoegen van een time zone, het splitsen van de datum & tijd/volgnummer, etc. |
Ik lees in laatste opmerkingen aantal heldere zaken waar ik mij in kan vinden:
Ad 1) daarom ook identifiers als strings (#108). Volgens de BAG XSD, zijn de
Dit volgend zouden Ad 2) inderdaad denk ik dat met of zonder gebruik TZ in de VIEWs een probleem op kan treden bij gebruik dumps op andere server/tijdzone met De hamvraag voor BAG blijft: wel geen TZ? Ik probeer weer een interpretatie: Met gebruik TZ en tijd bijna altijd 00:00:00, zal PG de UTC tijd opslaan. Dit (UTC) zal 1 of 2 uur eerder zijn (DST) dus op vorige dag. Maar sec beschouwd: als ik nu in Londen zit, zal bijvoorbeeld een Ik zou graag eens zien wat andere BAG tools doen: BEK (Geon) of PDOK (FME?). Vraag op PDOK Forum lijkt mij ook goed idee, want treft ook andere Basis Regs. Mijn (voorzichtige) conclusie hier zou zijn: 1) lees in als char(16) in tabel, 2) converteer naar WITH TIMEZONE in VIEWs. Impact (performance, storage) echter onduidelijk. |
Het blijkt inderdaad lastiger dan dat je in eerste instantie denkt. Ik heb wel in de BAG catalogus gevonden dat alles in de Nederlandse tijdzone wordt gedefinieerd. Dat staat expliciet beschreven in paragraaf 4.7.3 van dit document.
Als je naar Hawaii verhuist en je wilt 'actueel' weten dan zul je dus alsnog moeten omrekenen, omdat alle data in Nederlandse tijdzone zijn uitgewerkt (ongeacht of je het opslaat met of zonder tijdzone). Het lijkt me inderdaad zuiver om dan de character(16) aan te houden en via de views de interpretatie toe te voegen. |
|
@borrob: bedankt voor dit document. Wat mij betreft is het helder, dus tijdstippen volgens de tijdzone Europe/Amsterdam interpreteren en opslaan. Alsl je de data zonder tijdzone opslaat, is het m.i. juist een verlies aan informatie. Als er clients die op een andere tijdzone staan ingesteld met de BAG-data aan de slag willen, moeten ze maar hun instellingen veranderen. Het gaat om Nederlandse data. Het is wel een slechte zaak dat de BAG tijdstippen gebruikt als een soort volgnummer. Dan kunnen ze beter een apart attribuut hiervoor opnemen wat duidelijk maakt dat het echt om een volgnummer gaat. |
De timezone is m.i. impliciet en hoeft niet als zodanig opgeslagen te worden, want de tijden in de datums zijn geen echte tijden en wordt de data niet meer as-is opgeslagen. Ik zal alle timezone changes in mijn fork reverten omdat ik niet al mijn scripts en database servers ga aanpassen om de Europe/Amsterdam timezone expliciet te gebruiken. Dit issue blijft voor mij een onaanvaardbare regression. |
Dat is natuurlijk prima en het fijne van hoe Github werkt :) Soms moet je keuzes maken. |
Een fork moeten bijhouden is nooit fijn, ongeacht dat git dit eenvoudiger maakt. M.i moeten de timezone waardes als extra kolommen toegevoegd worden zodat de regression is opgelost door het blijven opslaan as-is van de waarde in de XML en dat voor de gebruikers die waarde hechten aan timezones dat ook beschikbaar is. |
In commit b2a2038 zijn de timestamp kolommen door @borrob voorzien van een timezone, hierdoor klopt de data in de postgis database niet meer met de XML die is ingelezen.
Voorbeeld:
The text was updated successfully, but these errors were encountered: