HashMergePreparser
|
Gruppe |
|
|
Funktion |
Der HashMergePreparser gleicht Datensätze einer CSV-Datei, oder Datenbank-Abfrage mit einer separaten Datenbank-Tabelle ab und prüft, ob Datensätze neu sind, oder sich seit dem letzten Lauf verändert haben. |
|
Konfigurationsdatei |
sample_HashMergePreparser.properties und evtl. sql_input_sample.properties (eingelesen mit Cron Job → Datei, falls mode=sql). |
Beschreibung
Der HashMergePreparser gleicht Datensätze einer CSV-Datei, oder Datenbank-Abfrage mit einer separaten Datenbank-Tabelle ab und prüft, ob Datensätze neu sind, oder sich seit dem letzten Lauf verändert haben. Dazu wird zu einem angegebenen Key eine Art Prüfsumme (Hashwert) über den ganzen Satz erzeugt und mit bestehenden Einträgen in der Tabelle verglichen. Existiert der Key noch nicht, wird der Satz als neu gekennzeichnet. Ist für den Key bereits ein Hashwert vorhanden, wird der Wert verglichen und so geprüft, ob sich im Satz etwas geändert hat. Falls ja, wird der Satz als geändert gekennzeichnet, falls nicht, wird der Satz nicht an das Mapping weiter gegeben und aus der Datei (bzw. dem Resultset des Selects) entfernt.
Parameter
Folgende Parameter stehen zur Konfiguration zur Verfügung.
|
Parameter |
Beschreibung |
|
debug |
(optional) Falls true, wird ein ausführliches Log geschrieben. Default: false |
|
delimiter |
(optional) gibt das Trennzeichen der CSV-Datei an. Default: , |
|
encoding |
(optional) gibt den Zeichensatz an, mit der die Datei gelesen und geschrieben wird. Default: utf8 |
|
excludeColumnsForHash |
(optional) Es können Spalten angegeben werden, die ignoriert werden bei der Erzeugung des Hashwerts (Index beginnend bei 0). Beispiel: excludeColumnsForHash=3,5,7 |
|
hashAlias |
Der Datenbank-Alias (wie in database.xml definiert) für die Hash-Tabelle. |
|
hasHeadLine |
(optional) Gibt an, ob CSV-Datei eine Kopfzeile hat. Default: true |
|
hashInsertStatement |
Das Insert-Statement, um neue Hashwerte hinzuzufügen. |
|
hashMethod |
(optional) gibt die Hash-Berechnungsmethode an (z. B. MD5, SHA1, etc). Default: MD5 |
|
hashSelectQuery |
Das SQL-Select Statement (siehe unten). |
|
hashSelectQueryBatchSize |
Anzahl der Sätze, die in ein Datenblatt geschrieben werden. |
|
hashUpdateStatement |
Das Update-Statement, um vorhandene Hashwerte zu ändern. |
|
idColumnIndex |
(wichtig für mode=csv, beginnend bei 0) gibt an, in welcher Spalte der CSV-Datei der Key steht. Bei mode=sql wird das Property sourceIdColumn in der Datei sql_input_sample.properties dafür verwendet. |
|
includeNew |
(optional) Falls true, werden neue Einträge an das Mapping übergeben. Default: true |
|
includeOriginal |
(optional) Falls true, werden auch Einträge an das Mapping übergeben, die sich nicht geändert haben. Default: true |
|
includeUpdated |
(optional) Falls true, werden geänderte Einträge an das Mapping übergeben. Default: true |
|
mode |
Mögliche Werte sind csv und sql (siehe unten). |
|
quote |
(optional) gibt das Quote-Zeichen an. Default: " |
|
splitHeaderToken |
(optional) Diese Trennzeile wird eingefügt, falls useFileSplitter den Wert true hat. Default: header! |
|
useFileSplitter |
(optional) Falls true, wird nach einer bestimmten Anzahl von Sätzen (Parameter hashSelectQueryBatchSize) eine Trennzeile (Parameter splitHeaderToken) eingefügt, um die Datei auf mehrere Datenblätter aufteilen zu können. Default: true |
|
writeHeadLine |
(optional) gibt an, ob die Überschrift (falls vorhanden) in die erzeugte Datei geschrieben wird. Default: true |
Beispiel
hashSelectQuery
Das SQL-Select-Statement, um die gespeicherten Hashwerte zu überprüfen.
Wichtiger Hinweis: Hierbei muss die Abfrage mit dem IN-Operator aufgebaut werden (siehe Beispiel-Datei unten).
CSV/SQL Mode
Gibt an, ob die Daten anhand einer SQL-Abfrage, oder als CSV-Datei eingelesen werden. Ist mode=csv, muss im Parameter idColumnIndex angegeben werden, welche Spalte den Schlüsselwert (Id/Key) enthält. Bei mode=sql wird das Property sourceIdColumn in der Datei sql_input_sample.properties dafür verwendet. Wird mode=sql verwendet, muss die dort ausgelesene Tabelle (hier shipmentstatus) natürlich schon vorhanden sein und gegebenenfalls auch mit Daten gefüllt sein.
Hinweis: Wird die zeitgesteuerte eigene Klasse DefaultFileSQLCron verwendet, muss mode=csv eingetragen werden.
sql_input_sample.properties
Diese Datei konfigurieren, wenn Datensätze aus einer bestehenden Datenbank auf Veränderungen geprüft werden sollen (mode=sql). In diesem Fall bitte bedenken, dass die Datei sql_input_sample.properties (zusätzlich zur Konfigurationsdatei sample_HashMergePreparser.properties) über Cron Job → Datei angegeben werden muss.
Ergebnis des Preparsers
Als Ergebnis werden den Eingangsdaten, also den Daten aus der CSV-Datei, oder dem SQL-Select (hier aus Tabelle shipmentstatus), zwei zusätzliche Spalten action (N=new,U=updated) und hash vorangestellt. Diese müssen in der Quellstruktur hinzugefügt werden. Über die Parameter includeNew=false und includeUpdated=false kann ein Voranstellen auch unterbunden werden.
Tabelle für Hashwerte erstellen
CREATE TABLE shipmentstatus_hashwert ( sendungsid VARCHAR(20) NOT NULL, hashvalue VARCHAR(100) NOT NULL, PRIMARY KEY (sendungsid))COLLATE='utf8_general_ci'ENGINE=InnoDBROW_FORMAT=DEFAULTHinweis: Für MySQL.
Beispiele für die Konfigurationsdateien
#################################################### hash calculation method like MD5, SHA1, etc.# default: MD5hashMethod=MD5################################################### #################################################### identfies if head line should be written, if available# # default=truewriteHeadLine=true################################################### ####################################################include N lines in output csvincludeNew=true#include U lines in output csvincludeUpdated=true#exclude O lines from output csv includeOriginal=false################################################### #################################################### io encoding# default: utf8encoding=utf8################################################### #################################################### log debug messages# default=falsedebug=false################################################### #################################################### fetch mode: csv|sql|auto## csv mode:# Input is a CSV File which will be parsed# sql mode:# Input is a Properties File with sql config# auto mode:# tries sql mode first, then csv mode# required mode=sql################################################### #################################################### csv i/o configuration## Delimiter character# default=,delimiter=,## Quote character# default="# quote=## useFileSplitter# insert splitHeaderToken before each 100 lines (hashSelectQueryBatchSize)# default=trueuseFileSplitter=true## splitHeaderToken# default=header!splitHeaderToken=header!################################################### #################################################### Hash storage settings#################################################### Datawizard database alias# requiredhashAlias=test##################################################### SQL select query to fetch the stored hash# value by given id# required, has to return a single columnhashSelectQueryBatchSize=100hashSelectQuery=SELECT sendungsid, hashvalue FROM shipmentstatus_hashwert WHERE sendungsid in ( @0:s@ )######################################################################################################## insert hash sql statement with 2 parameters# not requiredhashInsertStatement=INSERT INTO shipmentstatus_hashwert ( sendungsid, hashvalue ) VALUES ( @0:s@, @1:s@ )######################################################################################################## update hash sql statement with 2 parameters# not requiredhashUpdateStatement=UPDATE shipmentstatus_hashwert SET hashValue = @1:s@ WHERE sendungsid = @0:s@################################################### #################################################### index of the id Column in csv mode# required in csv input modeidColumnIndex=1#################################################### identifies if csv source has a head line# default=truehasHeadLine=true####################################################################################################### sql mode configuration file################################################### #################################################### Specifies the count of rows in memory# while fetching data# default=100pageSize=100################################################### #################################################### Datawizard database alias# requiredsourceAlias=test################################################### #################################################### result id column namesourceIdColumn=sendungsid################################################### #################################################### the sql query to fetch input data# requiredsourceQuery=SELECT * FROM shipmentstatus###################################################