Beschreibung
Die Klasse DefaultFileSQLCron arbeitet analog zur Klasse DefaultSQLCron mit folgenden Unterschieden.
Die Ergebnismenge kann nicht mittels Dump in eine CSV-Datei geschrieben werden.
Die Ergebnismenge wird mittels Cursor aus der Datenbank gelesen.
Die Ergebnismenge wird in temporären CSV-Dateien gehalten. Erst wenn der letzte Datensatz (bei Splitting letzter Datensatz pro Job) eingelesen wurde, wird mit der Verarbeitung begonnen.
Dies ermöglicht die Verarbeitung von sehr großen Ergebnismengen.
Konfiguration
Die Konfiguration erfolgt im Business Connector (Eingangsagent Cron). Erstellen Sie die Konfigurationsdatei mit dem SQL-Konfigurations-Assistenten. Die Quellstruktur für die Eingangsdatei erzeugen Sie im Quellstruktur-Menü
Beispiel
Die Konfigurationsdatei unterstützt Systemkonstanten (Syntax %CONSTANT%) sowie permanente Profil-Werte (Syntax %perm:KEYNAME%).
#
#sample config file for DefaultSQLCron
#
#which db connection to use
db_alias=hub
#you can define multiple pre- and post-statements here (separated by ";"), like:
#pre.statement=lock table table_a in exclusive mode;lock table_b in exclusive mode
#post.statement=
#create csv file for debugging - uncomment if needed
#save_as_csv=/tmp/sqldump.csv
#for each row of select.0 create a new request (job) within datawizard if param is set to true
result.split=false
#if blob columns are selected, you may want to encode the content by Base64
#encode_blob=true
#
#here are the statements... must start with 0, step size is 1!
#
select.0=select 'A',id,sender,receiver,version from mp_header where date_at > @0:d@
select.1=select 'B',cp,de,co,ac from mp_data where id = @1:i@
select.2=select 'C',cp from mp_data_sub1 where id = @1:i@
#
#select.1 needs value (column at position 2) from statement 0 (select.0) for execution (join); multiple columns are separated by ','
#select.2 needs value (column at position 2) from statement 0 (select.0) for execution (join); multiple columns are separated by ','
#Offset is always 1 for counting column positions. First dependency references to @1:xxx@, etc.
#Noted: to use the time of the last run when Cron job was executed, use tag @0:d@ or @0:t@ for date or timestamp
#
dependencies.1=0:2
dependencies.2=0:2
#
#(Passed) variables can be used as well
MSG_CALL_VAR_MY_VARIABLE=100
#This will replace filler @100:i@ in any SQL select statement by the integer value of the named variable
#
#
#use limit.xxx to limit the result set, e.g.
#limit.0=500 will limit select.0 up to 500 rows. If not set, no limit is given
#
#if an SQL statement finds no values, you can define a dummy record instead
#define a valid CSV line where delimiter is ;
#example for 'dummy' record for select.0
#empty.0=A;0;Nothing;No one;1.0Variablen und Platzhalter im Beispiel
Variablen werden in der Konfigurationsdatei als Platzhalter referenziert. Die Platzhalter-Nummer für Variablen muss mindestens 100 sein, um Konflikte mit den automatisch vergebenen Platzhaltern der SQL-Abfragen zu vermeiden.
String-Variablen mit mehreren Werten, zum Beispiel MSG_CALL_MYVAR mit dem Inhalt 'USA','UK', lassen sich nicht direkt als Platzhalter in einem IN-Ausdruck verwenden.
Die Definition MSG_CALL_MYVAR=100 in Kombination mit der Abfrage SELECT id, name FROM supplier WHERE country IN (@100:s@) erzeugt kein gültiges SQL:
Der Platzhalter repräsentiert einen String und wird zu IN (''USA','UK'') aufgelöst, nicht zu IN ('USA','UK').
Wichtiger Hinweis: Verwenden Sie für solche Abfragen die Dependencies, wie im Beispiel oben gezeigt. Der SQL-Konfigurations-Assistent unterstützt Sie dabei.
Anweisung | Beschreibung |
|---|---|
select.0 | Liest den übergeordneten Datensatz aus mp_header. |
select.1 | Wird gegen mp_data ausgeführt und verwendet den Wert an Spaltenposition 2 (id) aus select.0. |
select.2 | Wird gegen mp_data_sub1 ausgeführt und verwendet den Wert an Spaltenposition 2 (id) aus select.0. |
dependencies.1 | 0:2 — Weist Lobster an, Spalte 2 aus select.0 zu entnehmen und als Platzhalter @1:i@ an select.1 zu übergeben. |
dependencies.2 | 0:2 — Weist Lobster an, Spalte 2 aus select.0 zu entnehmen und als Platzhalter @1:i@ an select.2 zu übergeben. |
Die drei SELECT-Anweisungen rekonstruieren eine Parent-Child-Subchild-Beziehung über die Tabellen mp_header, mp_data und mp_data_sub1 ohne direkten SQL-JOIN. Die Dependency-Definitionen steuern, welcher Spaltenwert als Join-Bedingung zwischen den Anweisungen übergeben wird. Die Platzhalter-Nummerierung für Dependencies beginnt immer bei 1.
Leerzeichen im Abfrage-Ergebnis (MSSQL/Informix)
Bei MSSQL- und Informix-Datenbanken werden die Ergebniswerte von SQL-Aufrufen per Default um voranstehende und nachfolgende Leerzeichen bereinigt (trimmed). Mit dem Database-Parameter skipTrimResultValue kann dieses Verhalten in der Konfigurationsdatei des Datenbank-Aliases geändert werden.