ALKIS-Daten einlesen
ToDo: Auch den Start- und Endzeitpunkt aus der info.txt auswerten und ggf. das Einlesen verhindern!
Zum Einlesen der NAS-Daten kann das Shell-Skript import_nas.sh im Ordner plugins/alkis/tools verwendet werden. Mit dem Skript werden die NAS-Daten transaktional in die PostGIS-DB eingelesen.
Inhaltsverzeichnis
Skript-Konfiguration
Das Skript erwartet eine Konfigurationsdatei config.sh im Ordner plugins/alkis/config. Diese kann auf Basis der config-default.sh im selben Ordner erstellt werden. In der config.sh müssen insbesondere 4 Pfad-Variablen gesetzt werden:
DATA_PATH="/var/www/data/alkis/ff/eingang" # der Daten-Eingangsordner; hier werden die Zip-Dateien mit den NAS-Daten abgelegt IMPORT_PATH="/var/www/data/alkis/ff/import" # der Import-Ordner; hier befinden sich die ausgepackten NAS-Dateien und die zu importierende SQL-Datei LOG_PATH="/var/www/data/alkis/ff/logs" # der Logs-Ordner; hier findet das Error-Logging statt POSTPROCESSING_PATH="/var/www/data/alkis/ff/postprocessing"; # in diesem Ordner können Postprocessing-SQL-Skripte abgelegt werden, die nach jedem Einlesevorgang ausgeführt werden sollen
Skript-Ablauf
Im Ordner "eingang" werden die gezippten NAS-Fortführungsdaten, die eingelesen werden sollen, abgelegt (Katalog- und Objektdaten). Dies sollte am besten auch automatisiert ablaufen.
Wenn das Shell-Skript "import_nas.sh" ausgeführt wird, prüft es zunächst, ob der Ordner "import" leer ist. Wenn ja, guckt es im Ordner "eingang" nach, ob dort Zip-Dateien liegen. Alle vorhandenen Zip-Dateien werden in den Ordner "import" ausgepackt und danach gelöscht. Jede NAS-Datei im Ordner "import" wird mit ogr2ogr zunächst in eine temporäre SQL-Datei konvertiert. Wenn diese Konvertierung erfolgreich war, wird der Inhalt der SQL-Datei zu einer SQL-Datei "import_transaction.sql" im Ordner "import" hinzugefügt und die NAS-Datei sowie die entstandene SQL-Datei gelöscht. In der SQL-Datei "import_transaction.sql" werden die SQL-Befehle aller NAS-Dateien gesammelt, um sie am Ende transaktional ausführen zu können. Wenn alle NAS-Dateien erfolgreich konvertiert wurden, wird die SQL-Datei "import_transaction.sql" ausgeführt und die Daten in die PostGIS-DB eingelesen. Wenn dies erfolgreich war, wird der Ordner "import" geleert.
Logging der eingelesenen NAS-Dateien
Im Schema "alkis" gibt es eine Tabelle "import" mit folgender Struktur:
CREATE TABLE alkis.import ( id serial NOT NULL, datum timestamp without time zone DEFAULT now(), datei text, status text ) WITH( OIDS=TRUE );
Hier wird jede eingelesene NAS-Datei registriert. Diese Tabelle dient einerseits als Übersicht, was alles eingelesen wurde und andererseits wird durch das Einlese-Skript vor der Abarbeitung jeder NAS-Datei auch überprüft, ob eine Datei schon mal eingelesen wurde.
Fehlerbehebung
Wenn bei der Konvertierung einer NAS-Datei ein Fehler aufgetreten ist, bricht das Einlese-Skript ab. Die Fehlermeldung von ogr2ogr steht in der Datei logs/error.log. Der Fehler kann in der fehlerhaften NAS-Datei behoben werden. Danach kann das Einlese-Skript einfach nochmal gestartet werden. Es beginnt mit der Konvertierung der zuvor fehlerhaften NAS-Datei. Alternativ kann auch der Ordner "import" geleert werden und eine neue, korrigierte Zip-Datei in den Ordner "eingang" gelegt werden.
Wenn bei der Ausführung der SQL-Datei "import_transaction.sql" ein Fehler auftritt (Fehlermeldung auch in logs/error.log), kann dieser entweder in "import_transaction.sql" behoben werden oder evtl. auch durch Änderungen am Datenbestand in der Datenbank. Danach kann das Skript einfach nochmal aufgerufen werden. Alternativ kann auch hier der Ordner "import" geleert werden und eine neue, korrigierte Zip-Datei in den Ordner "eingang" gelegt werden.
Post-Processing
Wenn die SQL-Datei "import_transaction.sql" erfolgreich eingelesen wurde, wird die Funktion "alkis.postprocessing()" aufgerufen. Diese Funktion füllt die PP-Tabellen im Alkis-Schema. Eigene Post-Processing-Skripte können im Ordner postprocessing abgelegt werden. Diese werden am Ende nacheinander ausgeführt.
Das Skript "import_nas.sh" wird per Cron-Job einmal täglich automatisch ausgeführt, kann bei Bedarf aber auch händisch gestartet werden.