Module Gate

DsModGate dient zum Stagen aus einer Produktion. Ziel ist die Entlastung von Quellsystemen: dieselben Daten sollen nicht mehrfach für Umgebungen wie DEV, TEST oder QA importiert werden. Das Modul ist eine Weiche, die datasqill zwischen den Quellimport schaltet. Bei entsprechender Konfiguration lädt sie die Daten aus der produktiven DWH-Datenbank statt erneut aus der Quelle (SAP, Web Service, Fremddatenbank).

In der GUI wählt man DsModGate nicht aus. runJavaModule.sh startet es als Java-Einstieg und übergibt das eigentliche Importmodul mit -DmoduleClass. Beim Validate geht die Anfrage unverändert an dieses Modul. Beim Run kann die Weiche den Original-Load durch einen Load aus der produktiven DWH-Tabelle ersetzen (stageFromDB bzw. Snowflake-cloneFromDB). Ist der Ersatz nicht möglich, läuft der Originalimport.

Name Bedeutung
Modul (in der GUI nicht wählbar)
Modulklasse DsModGate
Typ Java
Zweck Weiche für Quellimporte: Daten aus dem produktiven DWH stagen statt die Quelle mehrfach zu belasten
Transformationscode vom delegierten Modul
Quellen / Ziele vom delegierten Modul

Wann das Gate greift

Alle folgenden Bedingungen müssen erfüllt sein. Sonst läuft das Originalmodul.

  1. Kommando ist Run (nicht Validate).
  2. -DmoduleClass ist gesetzt (bei jedem Start Pflicht; sonst Fehler -101).
  3. Ein Quell-Objekttyp ist bekannt: JVM-Property -DsourceObjectTypeId oder ein eingebautes Mapping zur Modulklasse.
  4. Die Action hat genau ein Tabellen-Ziel.
  5. Die Quellen dieses Objekttyps gehören zu einer Quelldatenbank (die Zieldatenbank darf zusätzlich als Quelle vorkommen).
  6. Die Quell-Connection definiert stageFromDB und/oder cloneFromDB.
  7. Die Struktur der Zieltabelle hat sich nicht geändert: Spaltennamen und Datentypen in der produktiven Kopie und im Ziel stimmen überein. Sonst greift das Gate nicht und der Originalimport läuft.

Eingebaute Quell-Objekttypen:

Modulklasse Objekttyp-ID Typische Quelle
DsModRemote 1 Datenbanktabelle
DsModSAP 10 SAP-Tabelle
DsModWebServiceClient 8 Web Service

Andere Module (Insert, Check, Call procedure, Send E-Mail, …) gehen immer an moduleClass. Sie werden nicht umgeschrieben.

Connection-Parameter

Diese Parameter stehen an der Quell-Connection (SQTS_DB_<id>), nicht am Ziel.

Name Bedeutung
stageFromDB datasqill-Connection-ID einer Alternativdatenbank, in der die Zieltabelle bereits liegt (gleiches Schema und gleicher Tabellenname).
cloneFromDB Name einer Snowflake-Datenbank, aus der die Zieltabelle per CLONE erzeugt werden kann. Nur wenn das Ziel Snowflake ist. Sind beide gesetzt, gilt auf Snowflake cloneFromDB, stageFromDB wird ignoriert.

stageFromDB

Das Gate öffnet Staging- und Ziel-Connection und vergleicht die Metadaten von <schema>.<table> (das Ziel). Die Staging-Kopie wird nur verwendet, wenn:

  • die Staging-Connection geöffnet werden kann und keine Dummy-Connection ist
  • die Tabelle in Staging existiert und nicht leer ist
  • Spaltennamen und -typen zum Ziel passen (Spalten SQDV_* und bei Tabelle SAP_CE10058 zusätzlich ZEITSTEMPEL fehlen im generierten SELECT)

Dann läuft nicht das Originalmodul. Stattdessen baut das Gate eine Action Load from Database (DsModRemote), die aus der Staging-Tabelle liest und ins echte Ziel schreibt:

  • Truncate Before = N, wenn der Zielname mit VV_ beginnt, sonst Y
  • Quelle = Staging-Connection / gleiches Schema und gleicher Tabellenname wie das Ziel
  • SQL = SELECT <passende Spalten> FROM <schema>.<table>

Im Run-Log steht stageFromDB <id> will be used oder der Grund, warum Staging nicht genutzt wurde (Dummy-Connection, leere Tabelle, Schema-Abweichung, …).

Anonymisierung

Mit JVM-Property -DdoAnonymize=Y kann jede selektierte Spalte durch einen Ausdruck aus dws_konfig.vv_anonymisierung ersetzt werden (schema_name, tabellen_name, spalten_name → ausdruck). Default ist N. Anonymisierung gilt nur für stageFromDB, nicht für Snowflake-Clone.

cloneFromDB (Snowflake)

Ist die Zieldatenbank Snowflake und cloneFromDB gesetzt, droppt das Gate die Zieltabelle und legt sie neu an mit:

CREATE TABLE <schema>.<table> CLONE <cloneFromDB>.<schema>.<table>

Schlägt der Clone fehl, versucht es UNDROP TABLE, um die vorherige Tabelle wiederherzustellen. rows_processed ist die Zeilenzahl der geklonten Tabelle. Clone und Anonymisierung schließen sich aus.

JVM-Properties

Diese setzt der Module-Runner, nicht die GUI.

Name Bedeutung
-DmoduleClass Java-Klasse des echten Moduls (Pflicht), z. B. DsModRemote.
-DsourceObjectTypeId Überschreibt den eingebauten Objekttyp der Quelle für die Suche nach stageFromDB / cloneFromDB.
-DdoAnonymize Y oder N (Default N). Spaltenausdrücke aus dws_konfig.vv_anonymisierung bei stageFromDB.

runJavaModule.sh startet:

java ... -DmoduleClass=${MODULE_CLASS} ... DsModGate

Fallback

Fehlt die produktive Kopie, ist die Tabelle leer oder das Schema abweichend, fällt datasqill auf den Originalimport zurück, ohne dass das Gate selbst fehlschlägt.