Datendefinitionsmodell - Fortgeschrittene Elemente¶
Dieses Dokument behandelt fortgeschrittene Funktionen und Elemente in den Datendefinitionsmodellen von DATAMIMIC. Stelle sicher, dass Du mit den Kern-Elementen der Datendefinition vertraut bist, bevor Du in diese fortgeschrittenen Funktionen eintauchst.
Komplexe Datenstrukturen¶
<nestedKey>¶
Das <nestedKey>-Element definiert verschachtelte Schlüsselfelder und deren Generierungsmethoden innerhalb einer Datengenerierungsaufgabe. Es ermöglicht Dir, komplexe Daten in einem hierarchischen Format zu strukturieren, wie Wörterbücher (dict) oder Listen (list), und deren Inhalt dynamisch zu steuern.
Siehe die detaillierte nestedKey Referenz.
<reference>¶
Das <reference>-Element ermöglicht die Abbildung von Ziel-Feldern auf Werte aus einer Referenzquelle.
Nutze einen <reference>-Knoten sowohl für Single-Column- als auch für Composite-Beziehungen.
Bei der Modellerstellung in der Datenbankansicht bedeutet reference_source_mode=database, dass DB-Quellen genutzt werden, während
reference_source_mode=weighting_files synthetische Weighting-Dateien unter data/ verwendet.
Attribute¶
name: Name der Referenzanweisung.source: Source-Client-ID (Datenbankquelle) oder Pfad zu einer Weighting-Datei.sourceType: Quell-Entität/-Tabelle. Für datenbankgestützte Referenzen erforderlich, für Weighting-Dateien optional.sourceKey: Legacy-Shortcut nur für Single-Field-Mapping. Nicht mit<field>-Kindelementen kombinieren.unique: Erzwingt eindeutige Ziehungen innerhalb eines Sampling-Batches.weightColumn: Optionaler Name der Gewichtungsspalte für gewichtete Quellen.
Kindelemente¶
<field target="..." sourceKey="..."/>: Explizites Source-to-Target-Mapping. Für Multi-Column-Mappings mehrfach verwendbar.
Mapping-Priorität¶
- Explizite
<field>-Kindelemente. sourceKey-Shortcut (nur ein Ziel-Feld).- Auto-Mapping über
.wgt.ent.csv-Header, wenn wedersourceKeynoch<field>gesetzt ist.
Beispiel 1: Single-Column DB-Referenz (empfohlene <field>-Form)¶
1 2 3 4 5 | |
Beispiel 2: Composite DB-Referenz¶
1 2 3 4 5 6 | |
Beispiel 3: Single-Field Weighting-Quelle (.wgt.csv)¶
1 2 3 | |
Beispiel 4: Multi-Field Weighting-Quelle (.wgt.ent.csv) mit Header-Auto-Mapping¶
1 2 3 | |
Beispiel 5: Multi-Field Weighting-Quelle (.wgt.ent.csv) mit explizitem Mapping-Override¶
1 2 3 4 5 6 7 | |
Leitplanken¶
sourceKeyund<field>nicht innerhalb derselben<reference>kombinieren..wgt.csvunterstützt nur ein Ziel-Feld.- Für Fehlersemantik und Lösungen siehe Error Codes Reference.
<list>¶
Das <list>-Element definiert eine Sammlung von Datenelementen, wobei jedes Element seine eigenen Attribute, Schlüssel und Arrays enthalten kann. Listen sind nützlich, um strukturierte Daten darzustellen, wie Zeilen in einer Tabelle oder Sammlungen von Objekten mit gemeinsamen Attributen. Das <list> kann mehrere <item>-Elemente enthalten, die einzelne Einträge darstellen.
Siehe die detaillierte Listenelement-Referenz.
<item>¶
Siehe die detaillierte Item-Element-Referenz.
<array>¶
Das <array>-Element definiert Arrays von Datenelementen, die entweder statisch definiert oder dynamisch mit Skripten generiert werden können. Arrays sind unerlässlich, wenn Du mehrere Elemente desselben Datentyps generieren musst, wie Listen von Werten, und können mit anderen Elementen wie <list>, <key> und <nestedKey> kombiniert werden, um komplexe Datenstrukturen zu erstellen.
Siehe die detaillierte Array-Element-Referenz.
Steuerelemente¶
<condition>¶
Das <condition>-Element wird verwendet, um eine Reihe von untergeordneten Tags (<if>, <else-if> und <else>) basierend auf spezifischen logischen Bedingungen auszuführen. Es bietet eine Möglichkeit, den Datengenerierungsprozess zu steuern, indem Bedingungen angewendet werden, die bestimmen, welche Elemente in der Ausgabe enthalten sein werden.
Struktur¶
- Das
<if>-Tag ist immer das erste Kind eines<condition>-Elements und definiert die primäre Bedingung. - Null oder mehr
<else-if>-Tags können auf das<if>folgen, wobei jedes zusätzliche Bedingungen angibt, die ausgewertet werden, wenn die vorherigen Bedingungen nicht erfüllt sind. - Das
<else>-Tag ist optional und bietet eine Ausweichaktion, wenn keine der vorherigen Bedingungen erfüllt sind.
Regeln¶
- Ein
<condition>-Element muss ein<if>-Tag haben. - Es kann null oder mehr
<else-if>-Tags geben. - Nur ein
<else>-Tag ist erlaubt und es muss als letztes Kind des<condition>-Elements erscheinen.
Kindelemente¶
if: Definiert die primäre Bedingung zur Auswertung.else-if: Definiert zusätzliche Bedingungen zur Überprüfung, wenn die vorherigen Bedingungen falsch sind.else: Ausweichaktion, wenn keine der Bedingungen erfüllt ist.
Attribute¶
condition: Ein Python-ähnlicher Ausdruck, der zuTrueoderFalseausgewertet wird. Das Ergebnis bestimmt, ob der Inhalt innerhalb des entsprechenden Tags ausgeführt wird.
Beispiel 1: Einfache Bedingung mit If-Else-Logik¶
1 2 3 4 5 6 7 8 9 10 11 | |
In diesem Beispiel wird basierend auf dem Wert von category_id die entsprechende Nachricht gedruckt.
- Wenn
category_id'DRNK/ALCO'ist, wird der erste<if>-Block ausgeführt. - Wenn
category_id'FOOD/CONF'ist, wird der<else-if>-Block ausgeführt. - Wenn keine Bedingung erfüllt ist, wird der
<else>-Block ausgeführt.
Beispiel 2: Komplexe Bedingung mit verschachtelten Schlüsseln und Standardwerten¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
In diesem Beispiel werden zwei Variablen (ifVar und elseIfVar) mit einem Boolean-Generator generiert, und abhängig von ihren Werten wird eines der <key>-Elemente (if_true, else_if_true oder else_true) generiert.
- Wenn
ifVarTrueist, wirdif_truegeneriert. - Wenn
ifVarFalseundelseIfVarTrueist, wirdelse_if_truegeneriert. - Wenn beide Bedingungen
Falsesind, wirdelse_truegeneriert.
Beispiel 3: Bedingungen mit verschachtelten Strukturen¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
In diesem Beispiel:
- Der
condition_trueverschachtelte Schlüsselblock wird immer ausgeführt, weil seine BedingungTrueist. - Der bedingte Block innerhalb von
<condition>führt den<if>-Block aus, weil seine BedingungTrueist, während der<else-if>ignoriert wird, da erFalseauswertet.
Beispiel 4: Bedingungen mit Standardwerten¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Hier überprüft die bedingte Logik den Wert von id:
- Wenn
id1 ist, wird der Schlüsselif_truegeneriert. - Wenn
id3 oder 4 ist, wird der entsprechendeelse_if-Block ausgeführt. - Wenn keine Bedingungen übereinstimmen, wird der Schlüssel
else_truemit einem Fallback-Wert generiert.
Beispiel 5: Bedingte Entfernung von Elementen¶
1 2 3 4 5 | |
In diesem Fall wird der Schlüssel removeElement nicht generiert, weil die condition auf False gesetzt ist.
Beispiel 6: Verwendung von Standardwerten in bedingten NestedKeys¶
1 2 3 4 5 6 7 | |
- Da die
conditionFalseist, nimmt der verschachtelte Schlüsselcondition_falsedendefaultValuevonNone.
Best Practices für die Verwendung von <condition>¶
-
Verwende Bedingungen zur Steuerung der Ausgabe: Bedingungen sind eine hervorragende Möglichkeit, die Generierung von Datenelementen dynamisch auf der Grundlage des aktuellen Zustands von Variablen zu steuern.
-
Fallbacks mit Standardwerten: Verwende Standardwerte, wenn Du einen Fallback bereitstellen möchtest, falls eine Bedingung zu
Falseausgewertet wird. -
Kombiniere mit verschachtelten Strukturen: Du kannst Bedingungen mit verschachtelten Schlüsseln, Listen und Arrays verwenden, um komplexe, logikgesteuerte Datenmodelle zu erstellen.
-
Verwende
else-iffür mehrere Bedingungen: Um mehrere mögliche Zustände zu behandeln, verwende eine Kombination aus<if>,<else-if>und<else>, um alle Szenarien abzudecken.
<echo>¶
Das <echo>-Element gibt Text, Variablen oder Ausdrücke für Protokollierung, Debugging oder Überwachungszwecke aus. Dies kann hilfreich sein, um den Fortschritt der Datengenerierung zu verfolgen oder die Werte von Variablen während der Laufzeit zu inspizieren. Es akzeptiert dynamische Inhalte, einschließlich Variablen und Ausdrücke, die in {} eingeschlossen sind.
Attribute¶
- text: Der statische oder dynamische Inhalt, der gedruckt werden soll. Dynamische Werte sind in
{}eingefasst, was es Dir ermöglicht, Variablen, Ausdrücke oder Ergebnisse von Funktionen während der Ausführung auszugeben.
Verwendung¶
- Verwende
<echo>, um die Werte von Variablen auszudrucken oder den Ablauf des Setup-Prozesses zu verfolgen. - Es kann Text auf die Konsole oder in Logdateien ausgeben, abhängig vom Ziel, das im Setup definiert ist.
Beispiel 1: Grundlegende Verwendung für Debugging¶
1 2 3 4 5 6 7 8 9 10 11 | |
In diesem Beispiel:
- Das
<echo>-Tag druckt den aktuellen Wert der Variableuser, die einDotableDictist. - Es druckt auch die Variable
all_users, die eine Liste von Wörterbüchern ist, die aus der Datenbank abgerufen wurden.
Beispiel 2: Verwendung von Echo zum Debuggen von skriptgesteuerten Variablen¶
1 2 3 4 5 6 7 | |
In diesem Beispiel:
- Eine Zufallszahl wird generiert und zum Debuggen ausgegeben.
- Der Status wird dann basierend auf der Zufallszahl berechnet, und das Ergebnis wird mit
<echo>gedruckt.
Best Practices für die Verwendung von <echo>¶
- Debugge komplexe Logik: Verwende
<echo>, um Variablen und komplexe Ausdrücke zu debuggen, insbesondere wenn Du Skripte oder Datenbankquellen verwendest, um Daten dynamisch zu generieren. - Überwache die Datengenerierung: Verfolge den Fortschritt Deiner Datengenerierung, indem Du Werte an Schlüsselpunkten in Deinem Setup ausgibst.
- Kombiniere mit Variablen: Du kannst Variablen und Ausdrücke innerhalb des Textes von
<echo>verwenden, um dynamische Inhalte während des Generierungsprozesses auszugeben.
<generator>¶
Das <generator>-Element gibt benutzerdefinierte Generatoren für die Datengenerierung an.
Attribute¶
name: Gibt den Namen des Generators an.generator: Gibt Deinen benutzerdefinierten Generator an.
Beispiel¶
1 2 3 4 5 6 7 8 | |
<element>¶
Das <element>-Element gibt untergeordnete Elemente innerhalb eines XML-Knotens an, was es nützlich macht, um verschachtelte XML-Strukturen zu generieren. Der Name des <element>-Tags wird zu einem XML-Attribut, und der generierte Inhalt wird zum Wert des Attributs.
Attribute¶
name: Gibt den Namen des untergeordneten XML-Elements oder Attributs an. Dies ist obligatorisch.script: Gibt ein Skript an, um den Wert des Elements dynamisch zu generieren.constant: Ein konstanter Wert für das Element, falls keine dynamische Generierung erforderlich ist.values: Eine Liste möglicher Werte, aus denen zufällig ausgewählt werden kann, falls zutreffend.
Beispiel 1: Einfache XML-Generierung¶
1 2 3 4 5 6 7 8 9 10 | |
In diesem Beispiel:
- Der Schlüssel
authorerstellt einen XML-Knoten, und jedes<element>darin definiert Attribute (wiename,gender,birthdate), die mit den Werten derperson-Entität gefüllt werden.
Beispiel 2: NestedKey mit Elementen und Attributen¶
1 2 3 4 5 6 7 8 9 10 | |
Hier:
- Die
bookListe erzeugt mehrere XML-Elemente (title,language,pages,release_date), jedes mit Attributen für verschiedene Bücher. - Der Inhalt für jedes Element wird dynamisch basierend auf Werten oder Generatoren erzeugt.
Beispiel 3: Generierung von XML mit verschachtelten Listen und Wörterbüchern¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
In diesem Fall:
- Sowohl Bücher als auch Magazine werden als XML-Elemente mit dynamisch generierten Attributen wie
language,pagesundrelease_dateerzeugt.
Beispiel 4: Generierung von XML mit Arrays und Listen¶
1 2 3 4 5 6 | |
In diesem Beispiel:
- Zwei Arrays (
random_stringundrandom_number) werden als XML-Elemente generiert, wobei jedes Array 3 Elemente enthält. - Dies demonstriert, wie Arrays in den XML-Generierungsprozess integriert werden können.
Beispiel 5: Komplexes XML mit Listen und NestedKeys¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Dieses Beispiel zeigt, wie man eine Liste von Elementen generiert, wobei jedes Element zusätzliche verschachtelte Schlüssel und Unterelemente enthalten kann, was eine hierarchische Struktur in XML demonstriert.
Beispiel 6: Generierung von XML aus einer Vorlage¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
In diesem Fall:
- Die XML-Generierung basiert auf einer vordefinierten Vorlage (
data/user.template.xml), und die Struktur wird dynamisch erweitert mitnestedKey,keyundlistElementen. - Dies demonstriert, wie man bestehende XML-Strukturen mit neuen Elementen und Attributen erweitern kann.
Best Practices für die Verwendung von <element>¶
- Verwende
<element>, um strukturiertes XML zu erstellen: Das<element>-Tag ist eine flexible Möglichkeit, strukturierte XML-Dokumente zu bauen, bei denen jedes Element und seine Attribute dynamisch generiert oder statisch definiert werden können. - Kombiniere
<element>mit anderen Elementen: Verwende das<element>-Tag in Kombination mit<list>,<array>und<nestedKey>, um komplexe XML-Strukturen zu erstellen. - Nutze dynamische Skripte: Nutze das
script-Attribut, um Werte für die Elemente dynamisch zu generieren, basierend auf komplexer Logik oder externen Variablen. - Verwende
constantfür feste Werte: In Fällen, in denen der Wert eines Elements nicht ändern soll, verwende dasconstant-Attribut.
<sourceConstraints>¶
Das <sourceConstraints>-Element wird zusammen mit dem Kindelement <rule> verwendet. Es sorgt dafür, dass nur Datensätze aus der Eingabequelle verwendet werden, die bestimmten Regeln entsprechen. Korrekt angewandt verbessert es Genauigkeit, Qualität und Zuverlässigkeit der generierten Ausgabe.
Struktur¶
- Die
<rule>-Elemente sind Kinder von<sourceConstraints> <sourceConstraints>folgt der Syntax<rule if="Bedingung" then="Aktion">.
Regeln¶
<sourceConstraints>ist NUR als direktes Kindelement von<generate>oder<nestedKey>erlaubt.- Ein
<generate>- oder<nestedKey>-Element darf nur ein<sourceConstraints>-Element enthalten. - Ein
<sourceConstraints>kann viele<rule>-Elemente enthalten. <rule>muss die Attributeifundthenbesitzen.- Es ist gute Praxis, das
<sourceConstraints>-Element als erstes Unterelement von<generate>zu platzieren.
Kindelemente¶
rule: Definiert die Regel, um Quelldaten zu akzeptieren.
Attribute:¶
<sourceConstraints>besitzt keine Attribute.<rule>besitzt die Attributeifundthen.if: Ein Python-ähnlicher Ausdruck, der zuTrueoderFalseausgewertet wird. Das Ergebnis bestimmt, ob die Regelprüfung ausgeführt wird.then: Ein Python-ähnlicher Ausdruck, der zuTrueoderFalseausgewertet wird. Ist das ErgebnisTrue, werden die Daten behalten, andernfalls entfernt.
Beispiel 1: Einfache sourceConstraints für ein generate-Element¶
1 2 3 4 5 6 7 8 9 10 11 | |
Struktur der person_data-Datei:
1 2 3 4 5 6 7 8 | |
In diesem Beispiel:
- Die XML holt Daten aus der Quelle "script/person_data.json" zur Generierung.
<sourceConstraints>filtert diese Quelldaten vor der Generierung.- Die erste
<rule>greift, wenn das Feldcredit_scorein den Quelldaten kleiner als 600 ist. Ist das Feldrisk_profiledann "High", werden die Daten behalten, andernfalls entfernt. - Die zweite
<rule>greift, wenncredit_scorezwischen 600 und 750 liegt. Daten werden entfernt, wennrisk_profilenicht "Medium" ist. - Die dritte
<rule>greift, wenncredit_scoregrößer oder gleich 750 ist. Daten werden entfernt, wennrisk_profilenicht "Low" ist. - Am Ende erfüllen die Quelldaten alle in
sourceConstraintsdefinierten Regeln.
Beispiel 2: Constraints in Kaskadenstruktur¶
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
In diesem Fall:
- Die
sourceConstraintswirken sich nur auf das direkte Elternelement<generate>mit dem Namen "synthetic_customers" aus.
Beispiel 3: Constraints für ein nestedKey-Element¶
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
In diesem Fall:
- Die
sourceConstraintswirken sich nur auf das direkte Elternelement<nestedKey>mit dem Namen "cyclic_true" aus. - Diese Struktur ist nützlich, um Daten innerhalb tief verschachtelter Listen oder Strukturen zu filtern.
Best Practices für die Verwendung von <sourceConstraints>¶
- Unerwünschte Daten früh filtern: Verwende
<sourceConstraints>, um sicherzustellen, dass nur relevante oder gültige Daten aus der Quelldatei verwendet werden. Das hilft, Fehler zu reduzieren und die Datenqualität während der Generierung zu verbessern.
<targetConstraints>¶
Das <targetConstraints>-Element wird am Ende angewendet, um die Ausgabedaten zu validieren und zu finalisieren. Es prüft die final generierten Daten und kann zusätzliche Attribute basierend auf den generierten Werten hinzufügen.
Verwendung¶
Die Verwendung von <targetConstraints> ist ähnlich wie bei <sourceConstraints>, wirkt sich aber auf die generierten Ausgabedaten aus.
Beispiel 1: targetConstraints für ein generate-Element¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
In diesem Fall:
- Die Regeln von
<targetConstraints>wirken sich auf die generierten Daten aus, ändern Attribute oder fügen sie hinzu (falls nicht vorhanden), sodass die Ausgabe mitthenübereinstimmt. - Der Wert von
approval_statusist immerApproved, wenncredit_limit>= 25000 undinterest_rate<= 0.08. Entsprechend gilt das auch für die anderen Regeln.
<mapping>¶
Das <mapping>-Element wird während der Verarbeitung angewendet, um ausgewählte Datensätze zu transformieren.
Verwendung¶
- Die Verwendung von
<mapping>ist ähnlich wie bei<sourceConstraints>, wird aber verwendet, um den Datenwert zu ändern. - Wenn das Attribut die
if-Bedingung erfüllt, transformiert<mapping>das Attribut gemäßthen.
Beispiel 1: mapping für ein generate-Element¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
In diesem Fall:
- Wenn
risk_profile"High" ist, fügt<mapping>das neue Attributinterest_ratemit dem Wert0.15hinzu.
<ml-train>¶
Das <ml-train>-Element wird verwendet, um Machine-Learning-Modelle mit Eingabedaten zu trainieren. Diese trainierten Modelle können dann als Quellen in <generate>-Elementen für die Datengenerierung verwendet werden.
Attribute:¶
- name: Gibt den Namen des Modells nach dem Training an. Dies ist verpflichtend und wird zur Referenzierung in anderen Elementen verwendet.
- source: Gibt die Datenquelle an (z.B. data/active.ent.csv, mongo).
- type: Gibt den Typ der zu generierenden Daten an.
- mode: Gibt den Trainingsmodus an. Aktuell gibt es 'default' und 'persist'. 'default' entfernt das Modell nach Abschluss aller Aufgaben, 'persist' behält das Modell bei.
- maxTrainingTime: Gibt die maximale Trainingszeit in Minuten an (z.B. 1, 5, 10)
- separator: Gibt den Trenner der Quelldatei an (z.B. ',' für CSV-Dateien).
Beispiel 1: Einfaches Modelltraining¶
1 2 3 4 5 6 7 8 9 10 | |
In diesem Beispiel: - Das Modell "customer_csv_gen" wird mit Daten aus "data/customers.csv" trainiert. - Der Modus ist nicht explizit angegeben, daher wird das Modell nach Abschluss entfernt. - Die CSV-Datei verwendet Komma als Trenner. - "generate" verwendet das trainierte Modell als Quelle zur Datengenerierung.
Beispiel 2: Training mit Persistenzmodus¶
1 2 3 4 5 6 7 8 9 10 11 12 | |
In diesem Beispiel: - Der Modus ist auf "persist" gesetzt, das Modell bleibt nach Abschluss erhalten. - Es kann später ohne erneutes Training verwendet werden.
1 2 3 4 5 | |