Zur Homepage www.HI-Tier.de QL-Delta
Zurück Home Nach oben Weiter
Öffentlicher Bereich für Entwickler

 

Allgemeines

bulletUnter einem DELTA-Transfer im weiteren Sinn werden in der Query-Language HIT-QL mehrere verschiedene Möglichkeiten zum Abrufen von veränderten Daten bezeichnet.
bulletAktion RETRIVE mit Subcodes /D /H /M /N
bulletAufsetzen auf dem Zeitpunkt der letzten Übertragung, beachten aller Änderungen, festgemacht am Timestamp.
bulletMit Speichern des Startzeitpunkts nach erfolgreicher Aktion, so dass beim nächsten DELTA automatisch dort weitergemacht wird.
bulletDurch die optionale Angabe einer Generation kann auf frühere Startzeitpunkte aufgesetzt werden
bulletBeim Speichern des Startzeitpunkts wird:
  1. nicht nach DELTA und HISTO unterschieden,
  2. unter der Logon-Kennung (BNR und ggf .MBN) gespeichert (siehe Begriffsklärung Logon vs. Melde-BNR)
bulletViele, aber nicht alle Entitäten unterstützen Historisierung und damit auch Delta-Abfragen, siehe Felder FELDVON und FELDBIS in der Meldungsbeschreibung.
bulletDer Timestamp am Server wird erst bei der nächsten Aktion des Clients gespeichert. Z.b. sendet der HitBatch-Client am Ende das LOGOFF-Command und meldet sich damit noch mal beim Server, so dass dieser den Timestamp speichert.

Verschiedene Sub-Codes

Übersicht

Sub-Code Definition Bedeutung Nur aktuelle Merken
bullet

/D
/D<n>

Delta "Delta" im engeren Sinn überträgt alle geänderten aber noch aktuellen Daten seit der letzten gleichartigen RETRIEVE-Aktion eines angemeldeten Benutzers. Nach Erzeugen der Abfrage, wird in den System-Protokoll-Tabellen RETRIEVE und RETRCOND überprüft, ob und wann der angemeldete Betrieb diese Abfrage das letzte mal ausgeführt hat. Wenn die Entität Timestamp-Abfragen unterstützt erhält werden nur Datensätze deren Änderungs-Zeitstempel neuer als der Zeitpunkt der letzten Ausführung ist zurückgegeben. Nach erfolgreicher Transfer wird der Zeitstempel (Timestamp) des Übertragungsbeginns in die Tabelle RETRIEVE abgespeichert, so dass bei dem nächsten Delta auf die selbe Entität dort automatisch wieder aufgesetzt wird.   Die Variante /N<n> siehe Hinweis *1) und  /D<ts> siehe Hinweis *2).. JA JA
bullet

/H
/H<n>
/H<ts>

Histo "Histo" als erweiterte Form des Delta überträgt nicht nur die aktuellen Sätze sondern auch die zwischenzeitlich abgeschlossenen, d.h. die historisierten Teile geänderter Sätze und stornierte Sätze. NEIN JA
bullet

/M
/M<n>
/M<ts>

Modified "Modified" funktioniert analog zu Delta, schreibt aber den Ausführungszeitpunkt nicht weg. Und kann so als Test für Delta dienen. JA NEIN
bullet

/N
/N<n>
/N<ts>

Neue "Neue" funktioniert analog zu Histo, schreibt aber den Ausführungszeitpunkt nicht weg. NEIN NEIN
bullet

/B
/B<ts>

Basis "Basis" speichert eine Abfrage und schreibt den Ausführungszeitpunkt weg, überträgt aber keine Daten. -- JA

Erläuterungen

bulletNur aktuelle - beachtet nur Sätze die noch gültig also nicht historisert abgeschlossen sind.
bulletMerken - bedeutet dass der Zeitpunkt der erfolgreichen Ausführung in der Tabelle RETRIEVE abgespeichert wird.
bulletHinweis *1) : Für diese Subcodes gibt es noch eine Variante mit Angabe eine Generationenangabe <n> wenn nicht auf dem letzten sondern einem früheren abgespeicherten Delta-Ausführungs-Timestamp aufgesetzt werden soll. Dabei bedeutet /x1 eine Generation, /x2 zwei Generationen vor dem letzten Delta.
bulletHinweis *2) : Bei verschiedenen Subcodes (siehe /) kann auch direkt ein Timestamp angegeben werden, der dann anstelle des in der RETRIEVE-Tabelle gespeicherten verwendet wird.

Interne Umsetzung

Zur Vereinfachung der Darstellung:

bulletwerden VON und BIS hier als DATE dargestellt. Intern handelt es sich um Timestamps!
bulletwird die Bedingung "VON <= aktueller Startzeitpunkt" zur Vermeidung von "dirty reads" und damit Doppelübertragung nicht dargestellt. Intern ist sie verwirklicht.

Folgende Beispiele sind im MS Excel Tabellenblatt "Deltatransfer von Daten.XLS" nachvollziehbar.

DELTA nur aktuelle

HITP-Aktion: RS/D oder RS/M

DELTA mit Historie

HITP-Aktion: RS/H oder RS/N

siehe AAA_1997

Nr

LOM

Wert

VON

BIS

aktuell

1

276000900000001

Wert-1

01.01.1997

31.12.2100

aktuell

2

276000900000002

Wert-2

01.01.1997

31.12.2100

aktuell

3

276000900000003

Wert-3

01.01.1997

31.12.2100

bereits storniert

4

276000900000004

Wert-4

01.01.1997

31.08.1997

siehe AAA_1997_Akt

Beliebiges VON und aktuelles BIS

SELECT *
FROM AAA_1997
WHERE VON > ''
AND BIS = '31.12.2100';

siehe AAA_1997_Inc

Beliebiges VON oder beliebiges geändertes BIS

SELECT *
FROM AAA_1997
WHERE VON > ''
OR ( BIS > '' AND BIS < '31.12.2100' );

siehe AAA_1998

Nr

LOM

Wert

VON

BIS

unverändert

1

276000900000001

Wert-1

01.01.1990

31.12.2100

geändert

2

276000900000002

Wert-2

01.01.1990

01.04.1998

2

276000900000002

Wert-2a

01.04.1998

31.12.2100

alten storniert

3

276000900000003

Wert-3

01.01.1990

01.05.1998

neu

5

276000900000005

Wert-5

04.04.1998

31.12.2100

neu & geändert

6

276000900000006

Wert-6

04.04.1998

01.06.1998

6

276000900000006

Wert-6a

01.06.1998

31.12.2100

neu & gelöscht

7

276000900000007

Wert-7

04.04.1998

31.08.1998

siehe AAA_1998_Akt

Geändertes VON und aktuelles BIS

SELECT *
FROM AAA_1998
WHERE VON > '01.01.1998'
AND BIS = '31.12.2100';

siehe AAA_1998_Inc

Geändertes VON oder geändertes BIS

SELECT *
FROM AAA_1998
WHERE VON > '01.01.1998'
OR ( BIS > '01.01.1998' AND BIS < '31.12.2100' );