Delete-Befehl
Der delete
Befehl löscht oder terminiert Features in der VCDB v5
. Er verwendet die entsprechenden
Datenbankfunktionen, um diese Operationen durchzuführen.
Seien Sie vorsichtig beim Verwenden des delete Befehls, da der Löschvorgang sofort gestartet wird. Es erfolgt keine
Rückfrage wie "Sind Sie sicher?". Sie können den Befehl zunächst im Vorschaumodus ausführen – dabei
bleibt die Datenbank unverändert.
|
Optionen
Der delete
Befehl erbt globale Optionen vom Hauptbefehl vcdb
. Zusätzlich definiert er
allgemeine Lösch-, Abfrage-, Filter- und Metadatenoptionen.
Globale Optionen
Option | Beschreibung | Standardwert |
---|---|---|
|
Eine oder mehrere Argumentdateien mit Optionen. |
|
|
Hilfenachricht anzeigen und beenden. |
|
|
Versionsinformationen ausgeben und beenden. |
|
|
Konfiguration aus dieser Datei laden. |
|
|
Log-Level: |
|
|
Log-Nachrichten in diese Datei schreiben. |
|
|
Deaktiviert Log-Nachrichten auf der Konsole. |
|
|
Datei mit der Prozess-ID erstellen. |
|
|
Plugins aus diesem Verzeichnis laden. |
|
|
Plugins mit passendem vollqualifiziertem Klassennamen aktivieren oder deaktivieren. |
|
Weitere Informationen zu den globalen Optionen und Nutzungshinweise siehe hier.
Löschoptionen
Option | Beschreibung | Standardwert |
---|---|---|
|
Temporäre Dateien in diesem Verzeichnis speichern. |
|
|
Löschmodus: |
|
|
Auch untergeordnete Features terminieren. |
|
|
Indexmodus: keep, drop, drop_create. Bei der Verarbeitung großer Datenmengen kann das Deaktivieren der Indizes sinnvoll sein. |
|
|
Im Vorschau-Modus ausführen. Features werden nicht gelöscht. |
|
|
Änderungen nach dem Löschen dieser Anzahl von Features in der Datenbank festschreiben. |
Metadatenoptionen für Terminate-Operationen
Option | Beschreibung | Standardwert |
---|---|---|
|
Zeitangabe im Format |
|
|
Datenabstammung oder Ursprung der Features. |
|
|
Name des Benutzers, der für das Löschen verantwortlich ist. |
Datenbankbenutzer |
|
Grund für das Löschen der Daten. |
Abfrage- und Filteroptionen
|
Namen der zu verarbeitenden Features. |
|
|
Filter zum Abrufen von Features. Verwenden Sie die erweiterte CQL2-Filtersprache der VCDB. |
|
|
SRID oder Identifier des CRS, das für Geometrien im Filterausdruck verwendet wird. |
VCDB CRS |
|
SQL-Query, die als Filter verwendet wird. |
|
|
Maximale Anzahl der zu verarbeitenden Features. |
|
|
Index innerhalb der Eingabemenge, ab dem Features verarbeitet werden. |
Zeitbasierte Objekt-Historie-Optionen
Option | Beschreibung | Standardwert |
---|---|---|
|
Verarbeitung von Feature basierend auf ihrer Gültigkeit: |
|
|
Gültigkeit zu einem bestimmten Zeitpunkt prüfen. Das Zeitformat muss |
|
|
Referenz für die Gültigkeitszeit: |
|
|
Unvollständige Gültigkeitsintervalle von Features ignorieren. |
Datenbank-Verbindungsoptionen
Option | Beschreibung | Standardwert |
---|---|---|
|
Hostname des VCDB Datenbankservers. |
|
|
Port des VCDB Datenbankservers. |
5432 |
|
Name der VCDB-Instanz, zu eine Verbindung hergestellt werden soll. |
|
|
Schema, das beim Verbinden zur VCDB verwendet werden soll. |
|
|
Benutzername für die Verbidung zur VCDB. |
|
|
Passwort für die Verbidung zur VCDB. Leer lassen, um zur Eingabe aufgefordert zu werden. |
|
|
Datenbankspezifische Verbindungsparameter. |
Weitere Informationen zu den Datenbank-Verbindungsoptionen und Nutzungshinweise siehe hier.
Verwendung
Löschmodus
Der Löschmodus, definiert über die Option --delete-mode
, legt fest, wie Features in der Datenbank gelöscht werden. Die
verfügbaren Modi sind:
-
delete
: Features werden physisch aus der Datenbank entfernt. Dies hält die Datenbank schlank, indem nur die aktuellsten Versionen der Stadtobjekte gespeichert bleiben. -
terminate
: Features werden nicht physisch gelöscht, sondern als "terminiert" markiert, indem ihrtermination_date
Attribut auf den Ausführungszeitpunkt der Operation gesetzt wird. Dadurch verbleiben die Features in der Datenbank und ihre Objekt-Historie wird erhalten. Dies ist der Standardmodus.
Beide Modi löschen ein Feature zusammen mit seinen "enthaltenen" (contained
) Subfeatures, die als Teil des Features betrachtet werden.
Die Option --no-terminate-all
ändert dieses Standardverhalten im terminate
Modus. Das Terminieren aller Subfeatures kann
deutlich mehr Zeit in Anspruch nehmen, als wenn nur das Feature selbst terminiert wird. Es muss daher geprüft werden,
ob eine kaskadierende Ausführung für die angedachten Anwendungsfälle und Szenarien erforderlich ist.
|
Löschvorgang festschreiben
Standardmäßig wird der Löschvorgang erst dann in der Datenbank festgeschrieben (committed), wenn er vollständig und erfolgreich abgeschlossen ist. Tritt ein Fehler auf oder wird der Vorgang vorzeitig abgebrochen, werden keine Features gelöscht – die Datenbank bleibt unverändert.
Alternativ kann die Option --commit
verwendet werden, um festzulegen, dass der Löschvorgang bereits nach einer bestimmten
Anzahl gelöschter Features festgeschrieben werden soll. Dadurch wird die Operation in kleinere Pakete (Batches) unterteilt,
die jeweils einzeln nach ihrer Verarbeitung committed werden. In diesem Fall gilt die Alles-oder-Nichts-Strategie (all-or-nothing)
für jeden Batch und nicht für den gesamten Löschvorgang.
In seltenen Fällen kann das Löschen einer sehr großen Anzahl von Features in einer einzigen Operation mehr
SQL-Befehle erfordern, als die Datenbank pro Transaktion erlaubt. Die Option --commit hilft auch dabei, solche
Fehler zu vermeiden. Für PostgreSQL liegt das Limit bei maximal 232 SQL-Befehlen pro Transaktion.
|
Löschvorschau
Die Option --preview
führt den Löschvorgang im Vorschau-Modus aus. Der delete
Befehl wird so verarbeitet, als ob die Löschung
tatsächlich stattfinden würde – jedoch werden keine Änderungen an der Datenbank vorgenommen. Dieser Modus hilft dabei,
potenzielle Probleme wie Konflikte oder Fehler im Vorfeld zu erkennen, bevor sie Auswirkungen auf die Datenbank haben.
So lässt sich sicherstellen, dass die eigentliche Löschoperation wie erwartet durchgeführt werden kann
Filterung von Features
Der delete
Befehl bietet verschiedene Filteroptionen, mit denen kontrolliert werden kann, welche Features
aus der VCDB v5
Instanz gelöscht werden.
Feature-Typ Filter
Über die Option --type-name
können eine oder mehrere Feature-Typen angegeben werden, die gelöscht werden sollen. Für jeden Feature-Typ ist
der Typname wie in der Tabelle OBJECTCLASS
der VCDB v5
anzugeben. Um
Mehrdeutigkeit zu vermeiden, kann der Namespace-Alias aus der NAMESPACE
Tabelle
als Präfix im Format prefix:name
hinzugefügt werden. Es werden nur Features gelöscht, die einem der angegebenen Typen entsprechen.
CQL2-basierte Filterung
vcdb-tool unterstützt die OGC Common Query Language (CQL2) als
Standard-Abfragesprache für die Filterung von Features aus der VCDB v5
. CQL2 erlaubt sowohl attributbasierte als auch räumliche
Filter und bietet eine umfangreichen Satz an Vergleichsoperatoren, räumlichen Funktionen und logischen Operatoren. Nur Features, die die
angegebenen Filterkriterien erfüllen, werden exportiert.
CQL2-Filterausdrücke werden dem delete
Befehl über die Option --filter
übergeben. Gegebenenfalls müssen sie in
Anführungszeichen notiert werden. Bei räumlichen Filtern wird davon ausgegangen, dass die Filtergeometrien im gleichen
Koordinatenreferenzsystem (CRS) vorliegen, das auch für die VCDB-Instanz definiert sind. Um ein anderes CRS anzugeben,
kann die Option --filter-crs
mit der entsprechenden SRID (z.B. 4326
für WGS84) verwendet werden.
Weitere Information zur Verwendung von CQL2 mit der VCDB v5 finden Sie in der CQL2-Dokumentation.
|
Das folgende Beispiel zeigt, wie Gebäude basierend auf ihrem height
Attribut terminiert werden.
-
Linux
-
Windows CMD
./vcdb delete [...] \
--type-name=bldg:Building \
--filter="con:height > 15"
vcdb delete [...] ^
--type-name=bldg:Building ^
--filter="con:height > 15"
Um die envelope
Eigenschaft von Features gegen einen Bounding-Box-Filter zu prüfen, kann der folgende CQL2-Filterausdruck verwendet werden.
-
Linux
-
Windows CMD
./vcdb delete [...] \
--filter="s_intersects(core:envelope, bbox(13.369,52.506,13.405,52.520))" \
--filter-crs=4326
vcdb delete [...] ^
--filter="s_intersects(core:envelope, bbox(13.369,52.506,13.405,52.520))" ^
--filter-crs=4326
SQL-basierte Filterung
Mit der Option --sql-filter
können SQL SELECT
Anweisungen als Filterausdrücke verwendet werden, mit denen alle
Details des relationalen Schemas abgefragt werden können. Jede SELECT
Statement, das vom zugrunde liegenden
Datenbanksystem unterstützt wird, ist als Eingabe erlaubt, sofern es als Ergebnis eine Liste von id
Werten aus
der FEATURE
Tabelle zurückliefert. Nur Features,
die in der zurückgegebenen Liste enthalten sind, werden exportiert.
Das nachfolgende Beispiel zeigt die Filterung von Features anhand ihres Identifiers in der Spalte objectid
der
FEATURE
Tabelle. Die SELECT
Anweisung muss in Anführungszeichen gesetzt und Sonderzeichen gegebenenfalls maskiert werden.
-
Linux
-
Windows CMD
./vcdb delete [...] \
--sql-filter="SELECT id FROM feature WHERE objectid IN ('ABC', 'DEF')"
vcdb delete [...] ^
--sql-filter="SELECT id FROM feature WHERE objectid IN ('ABC', 'DEF')"
Count-Filter
Mit --limit
wird die maximale Anzahl der zu löschenden Features festgelegt. Die --start-index
Option
definiert den 0
-basierten Index des ersten Features in der Ergebnismenge, mit welchem der Löschvorgang beginnen soll.
Beide Optionen können getrennt oder zusammen verwendet werden, um die Gesamtanzahl der zu exportierenden Features zu definieren.
|
Löschen historischer Versionen
Die bi-temporalen Intervalle [creation_date, termination_date)
und [valid_from, valid_to)
ermöglichen
Objekt-Historien in der VCDB v5
(siehe hier). Das erste Intervall
beschreibt die Lebensdauer des Features in der Datenbanke – also wann es eingefügt und terminiert wurde.
Das zweite Intervall beschreibt die Lebensdauer des Features in der realen Welt.
Die Gültigkeit eines Features hängt davon ab, ob das entsprechende Zeitintervall beschränkt oder unbeschränkt ist:
-
Unbeschränkt (kein Enddatum): Das Feature ist derzeit gültig.
-
Beschränkt: Das Feature war nur während des angegebenen Intervalls gültig, ist aber aktuell nicht mehr gültig.
Die --validity
Option steuert, welche Features in Abhängigkeit von ihrer Gültigkeit exportiert werden:
-
valid
: Exportiert nur aktuell gültige Features. Dies ist der Standardmodus. -
invalid
: Exportiert nur historische, nicht mehr gülitge Features. -
all
: Exportiert alle Features – unabhängig von ihrer Gültigkeit.
Mit der Option --validity-reference
wird festgelegt, ob sich die Gültigkeit auf die Datenbankzeit (database
,
Standard) oder auf die Realzeit (real_world
) bezieht.
Zusätzlich erlaubt die Option --validity-at
die Prüfung der Gültigkeit zu einem bestimmten Zeitpunkt in der
Vergangenheit. Dieser Zeitpunkt kann entweder als Datum (<YYYY-MM-DD>
) oder als Zeitstempel mit optionalem UTC-Offset
(<YYYY-MM-DDThh:mm:ss[(+|-)hh:mm]>
) angegeben werden. Es werden nur Features exportiert, die zu diesem Zeitpunkt
entweder valid
oder invalid
waren.
Das folgende Beispiel zeigt, wie alle Features physisch gelöscht werden können, die vor dem 01.07.2018 terminiert
wurden und somit zu diesem Zeitpunkt bereits ungültig (invalid
) waren:
-
Linux
-
Windows CMD
./vcdb delete [...] \
--mode=delete \
--validity=invalid \
--validity-at=2018-07-01 \
--validity-referene=database
vcdb delete [...] ^
--mode=delete ^
--validity=invalid ^
--validity-at=2018-07-01 ^
--validity-referene=database
Standardmäßig erfolgt eine strenge Prüfung der Zeitintervalle. Mit der Option --lenient-validity wird dies aufgelockert,
indem auch Zeitintervalle als gültig betrachtet werden, deren Startdatum nicht gesetzt ist.
|
Verwaltung von Indizes während des Löschens
Beim Löschen von Daten werden Datenbankindizes in Echtzeit aktualisiert, was den Löschvorgang verlangsamen kann, insbesondere
bei großen Datenmengen. Die Option --index-mode
bietet die folgenden Modi zur Steuerung des Indexverhaltens:
-
keep
: Die Indizes bleiben unverändert. Dies ist der Standardmodus. -
drop
: Die Indizes werden vor dem Löschvorgang deaktiviert, was die Lösch-Performance verbessert. -
drop_create
: Wiedrop
, aber die Indizes werden nach dem Löschvorgang automatisch wieder aktiviert. Die stellt sicher, dass sie für nachfolgende Abfragen verfügbar sind.
Das Deaktivieren und Wiederherstellen von Indizes kann je nach Datenbankgröße ebenfalls viel Zeit in Anspruch nehmen. Der drop_create
Modus ist daher besonders beim Löschen großer Datenmengen sinnvoll. Je größer die Datenbank wird und je mehr Daten sie enthält,
desto höher kann jedoch auch der Zeitaufwand für das Deaktivieren und Neuerstellen der Indizies sein. In diesem Fall
kann der größere Zeitaufwand den Vorteil einer schnelleren Lösch-Performance zunichte machen – insbesondere wenn nur
kleinere Datenmengen gelöscht werden.
|
Mit dem index Befehl können Indizes auch unabhängig von einem Löschvorgang verwaltet werden,
was eine gezieltere Kontrolle ermöglicht.
|
Definition von Metadaten beim Terminieren
Bei der Ausführung im terminate
-Modus können die Metadaten der betroffenen Features in der Datenbank aktualisiert werden,
um Informationen über den Terminate-Prozess zu dokumentieren.
Mit den Optionen --lineage
, --updating-person
und --reason-for-update
kann der Ursprung der Features,
die für die Terminierung verantwortliche Person und der Grund für die Terminierung angegeben werden. Mit
--termination-date
kann ein bestimmter Terminierungszeitpunkt festgelegt werden, der entweder als Datum (<YYYY-MM-DD>
) oder als Zeitstempel
mit optionalem UTC-Offset (<YYYY-MM-DDThh:mm:ss[(+|-)hh:mm]>
) übergeben werden muss.
Diese Metadaten sind spezifisch für die VCDB und nicht im CityGML-Standard definiert (siehe auch hier).
Falls sie nicht explizit angegeben werden, wird automatisch der Zeitpunkt der Ausführung als Terminierungszeitpunkt verwendet.
Ebenso wird der Benutzername, der für die Verbindung zur VCDB-Datenbank verwendet wird, als Standardwert für
--updating-person
übernommen.
Der mit --termination-date angegebene Zeitstempel wird auf alle Features angewendet. Wählen Sie diesen sorgfältig,
da die Gültigkeit des Features in der Datenbank über das
Zeitintervall [creation_date, termination_date) bestimmt wird. Zur Wahrung einer konsistenten Objekt-Historie
dürfen sich diese Intervalle nicht überschneiden, wenn sie dasselbe Realwelt-Objekt betreffen.
|