DefaultFileSQLCron

Gruppe

Zeitgesteuerte eigene Klassen

Konfiguration

Wird konfiguriert im Business Connector (Eingangsagent Cron).

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.

Wichtiger Hinweis: Da es gerade das erste mal nicht ganz einfach ist die Konfigurationsdatei manuell zu erstellen, kann dies mit dem SQL-Konfigurations-Assistenten gemacht werden.

Hinweis: Die Quellstruktur für die Eingangsdatei kann im Menü der Quellstruktur erzeugt werden.

Beispiel-Datei


Wichtiger Hinweis: Nehmen wir an wir hätten eine String-Variable MSG_CALL_MYVAR mit Inhalt 'USA','UK'. Verwenden Sie nun in der unten gezeigten Konfigurationsdatei die Definition MSG_CALL_MYVAR=100 , dann würde die SQL-Abfrage SELECT id, name FROM supplier WHERE country IN (@100:s@) nicht funktionieren. Der Grund ist, dass dies nicht aufgelöst wird in SELECT id, name FROM supplier WHERE country IN ('USA','UK'), sondern in SELECT id, name FROM supplier WHERE country IN (''USA','UK''), da der Platzhalter ja einen String repräsentiert. Gelöst werden können solche Abfragen leider nur über die Dependencies, wie unten gezeigt. Der SQL-Konfigurations-Assistent wird Sie dabei unterstützen. Wichtiger Hinweis: Die Platzhalter-Nummer für Variablen darf nicht kleiner 100 sein. Hinweis: Es können permanente Profil-Werte (Syntax %perm:KEYNAME%) verwendet werden.


sample_sql_cron.properties
#
#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.0

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 Parameter skipTrimResultValues kann in der Konfigurationsdatei des Datenbank-Aliases dieses Verhalten geändert werden.