Zielsetztung: einzelne / mehrere Actions / Sheets / Folder direkt ausführen ohne Verwendung der datasqill GUI
Angenommen es soll das Sheet mit der ID 45 und die Action mit der ID 73 ausgeführt werden. Dazu legt man folgende Datei run.json an:
{
"command":"RunElements",
"variableList":[{"variableName":"environment", "variableType":"String", "variableValue":"DEV"}],
"payload":{
"batchExecution":{
"batchName":"Test run",
"user":"ich",
"elementList":[
{
"elementType":"S",
"elementId":47
},
{
"elementType":"A",
"elementId":73
}
]
}
}
}
Auf dem datasqill Host führt man folgenden Befahl aus:
curl -d @run.json -H "Content-Type:application/json" http://localhost:17491/datasqill-server/service
wobei man den Port 17491 gegebenfalls ändern muss. Als Antwort erhält man ein Json mit der batchInstanceId. Diese kann man nun monitoren, um zu sehen, wann der Batch beendet ist (bzw. auf Fehler gelaufen ist):
{"requestId":4297280,"payload":{"batchInstanceId":4812038}}
Die Sektion vaiableList ist optional. In diesem Beispiel wird die Variable environment auf den Wert "DEV" gesetzt. Sie kann in den Transformationen verwendet werden.
Es kann erforderlich sein, nächtliche Batches während der Zeitumstellung zu deaktivieren. Diesen Vorgang kann man mit datasqill mit diesen Schritten automatisieren:
is_dst_change_tonight
Zunächst einmal wird mit Hilfe von Java eine Funktion is_dst_change_tonight in der H2 definiert. Diese Funktion ermittelt, ob in der kommenden Nacht eine Zeitumstellung stattfindet:
CREATE ALIAS IF NOT EXISTS is_dst_change_tonight AS $$
boolean isDstChangeTonight() {
java.time.ZoneId zone = java.time.ZoneId.of("Europe/Berlin");
java.time.ZonedDateTime now = java.time.ZonedDateTime.now(zone);
java.time.ZonedDateTime nightEnd = now.plusDays(1).withHour(6).withMinute(0).withSecond(0).withNano(0);
java.time.zone.ZoneRules rules = zone.getRules();
java.time.Instant nowInstant = now.toInstant();
java.time.zone.ZoneOffsetTransition nextTransition = rules.nextTransition(nowInstant);
if (nextTransition != null) {
java.time.ZonedDateTime transitionTime = nextTransition.getDateTimeBefore().atZone(zone);
return !transitionTime.isBefore(now) && !transitionTime.isAfter(nightEnd);
}
return false;
}
$$;
Verbindung anlegen
Danach wird in datasqill eine Verbindung zum datasqill Repository angelegt. Die Verbindungen findet man unter Connections, links im Baum unter Settings:

Mit Add werden eine neue Verbindung "datasqill Repository" und ein Schema "DATASQILL_REPOSITORY" hinzugefügt.
Zugangsdaten hinterlegen
Für die neue Verbindung müssen Zugangsdaten im Keyfile hinterlegt werden. Am einfachsten lässt sich das erreichen, indem man den vorhandenen Eintrag SQTS_DB_0 kopiert und daraus den für die neue Verbindungsnummer macht.
Sheet ud Action mit Quelle und Ziel anlegen
Auf einem neuen Sheet werden dann eine Action mit Quelle und Ziel angelegt:

Die Objekte für Quelle und Ziel ist

Die Action bekommt einen Namen, den Typ Upsert und als SQL diese Query:
SELECT batch_id
, start_dt + interval '1' DAY AS start_dt
FROM datasqill_batch_next_run
WHERE batch_id IN (6790)
AND is_dst_change_tonight()
AND start_dt <= CURRENT_TIMESTAMP + interval '14' hour

Damit setzt die Action das Startdatum für die Batches um einen Tag weiter, die in der Liste (IN-Klausel) enthalten sind. Im Beispiel ist dies der Batch mit der Id 6790.
Weiterhin wird die Bedingung geprüft, dass in der nächsten Nacht tatsächlich eine Zeitumstellung stattfindet.
Und schließlich werden nur Batches berücksichtigt, die innerhalb der nächsten 14 Stunden laufen. Das sorgt dafür, dass bei einer mehrfache Ausführung dieser Action die geplante Ausführungszeit nur einmal verschoben wird.
Batch "Reschedule" anlegen
Abschließend wird ein neuer Batch "Reschedule" angelegt, der das Sheet täglich ausführt. Dabei sollte die Ausführungszeit vor allen anderen Batches liegen, die dieser Batch bei Zeitumstellung verschieben soll.
Im Beispiel läuft der Batch 6790 jede Nacht um 22:00 Uhr, der Reschedule Batch wurde deshalb für 19:00 Uhr geplant:

Zur Vereinfachung der Verwaltung der installierten Jdbc Treiber kann das Programm jdbcManager verwendet werden. Es liegt ab Version 4.1.4 im Verzeichnis "$HOME/bin" bei den übrigen datasqill Skripten.
Nach dem Start zeigt das Programm jdbcManager die installierten Jdbc Treiber. Mit ADD können neue Treiber hinzugefügt werden, mit DELETE vorhandene Treiber entfernt werden:

Beim ersten Start werden keine Jdbc Treiber angezeigt. Mit ADD können Treiber hinzugefügt werden.

Dann erscheint eine Auswahl von Jdbc Treibern, von denen man einen zum Download und zur Installation auswählen kann.

Es erscheint ein Fortschrittsbalken und nach Abschluss des Downloads ein Bestätigungsdialog.

Danach ist der Treiber in datasqill installiert und erscheint in der Liste im Hauptmenü.

So kann man sukzessive weitere Treiber installieren.

Die verfügbaren Treiber und ihre Download-Urls werden über die Konfigurationsdatei "jdbcList" verwaltet, die im selben Verzeichnis wie das Skript selbst liegt. Sie sieht prinzipiell so aus:
# JDBC Driver Configuration
# Format: <name>:<description>:<maven-repo-url>
# datasqill CSV JDBC Driver
DATASQILL-CSV:datasqill CSV Driver:https://download.softquadrat.de/master/jdbc/csvjdbc.jar
# datasqill Excel JDBC Driver
DATASQILL-EXCEL:datasqill Excel Driver:https://download.softquadrat.de/master/jdbc/exceljdbc.jar
# datasqill Json JDBC Driver
DATASQILL-JSON:datasqill Json Driver:https://download.softquadrat.de/master/jdbc/jsonjdbc.jar
# datasqill Salesforce JDBC Driver
DATASQILL-SALESFORCE:datasqill Salesforce Driver:https://download.softquadrat.de/master/jdbc/sfjdbc.jar
...
Bei Bedarf können einfach weitere Treiber mit ihrem Namen und der Download-Url hinzugefügt werden.
Zulässige Urls beginnen mit "http:", "https:" oder "file:". Letzteres Format erlaubt die Installation von Dateien, die bereits auf dem Server liegen, zum Beispiel in einem gemounteten Fileshare.
# my jdbc driver
MY-DRIVER:My Jdbc Driver:file:///home/myuser/mydriver.jar