HowTo

Tipps und Tricks

Starte einen Ad-Hoc Batch per Webservice

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.

Zeitumstellung und nächtliche Batches

Es kann erforderlich sein, nächtliche Batches während der Zeitumstellung zu deaktivieren. Diesen Vorgang kann man mit datasqill mit diesen Schritten automatisieren:

  1. Eine neue Funktion is_dst_change_today im H2 Repository anlegen.
  2. Eine Verbindung zum datasqill Repository in datasqill anlegen.
  3. Die Zugangsdaten für diese Verbindung im Keyfile hinterlegen.
  4. Ein Sheet "Reschedule" und darin eine Action mit Quelle und Ziel anlegen und alles befüllen.
  5. Einen neuen Batch "Reschedule" anlegen, der jeden Tag einmal läuft.

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:

dstReschedule1

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:

dstReschedule2

Die Objekte für Quelle und Ziel ist

  • Typ: Table or View
  • Verbindung: datasqill Repository
  • Schema: DATASQILL_REPOSITORY
  • Tabelle: datasqill_batch_next_run

dstReschedule3

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

dstReschedule4

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:

dstReschedule5

Jdbc Treiber verwalten

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:

jdbcManager1

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

jdbcManager1

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

jdbcManager1

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

jdbcManager1

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

jdbcManager1

So kann man sukzessive weitere Treiber installieren.

jdbcManager1

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