Datendefinitionsmodell – Kernelemente¶
Datendefinitionsmodelle sind grundlegend für die Testdatengenerierungsfunktionen von DATAMIMIC. Dieses Dokument behandelt die wichtigsten Elemente – wenn Du neu bei DATAMIMIC bist, beginne hier. Für fortgeschrittene Funktionen siehe Fortgeschrittene Datendefinitionselemente.
Überblick¶
Datendefinitionsmodelle legen fest, wie Testdaten generiert, transformiert oder maskiert werden sollen. Die Kernelemente ermöglichen es Dir:
- Datengenerierungsaufgaben zu definieren
- Schlüsselfelder und deren Werte zu spezifizieren
- Variablen zu erstellen und zu verwenden
- Strukturierte Datensätze zu generieren
Ausdrucks-Syntax: {expr} vs {{ expr }}¶
DATAMIMIC unterstützt zwei Formen der Ausdruckssyntax mit unterschiedlichem Caching-Verhalten:
Syntax-Vergleich¶
| Syntax | Verhalten | Caching |
|---|---|---|
{expr} |
CACHED - Einmal pro Datensatziteration ausgewertet, dann gecacht | Schneller bei wiederholten Referenzen |
{{ expr }} |
DYNAMISCH - Wird jedes Mal neu ausgewertet | Frischer Wert bei jeder Referenz |
Wann welche Form verwenden¶
Verwende {expr} (gecacht) wenn:
- Das Ergebnis des Ausdrucks innerhalb eines Datensatzes konsistent sein soll
- Du denselben Ausdruck mehrfach referenzierst
- Performance bei komplexen Ausdrücken wichtig ist
Verwende {{ expr }} (dynamisch) wenn:
- Du jedes Mal frische Werte brauchst (z.B. Zeitstempel mit Präzision)
- Zufallswerte pro Verwendung eindeutig sein sollen
- Der Ausdruck Seiteneffekte hat
Beispiele¶
Zeitstempel-Verhalten¶
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Zufallswert-Verhalten¶
1 2 3 4 5 6 7 8 9 10 11 | |
Empfehlungstabelle¶
| Anwendungsfall | Empfohlen | Grund |
|---|---|---|
| Statische/deterministische Ausdrücke | {expr} |
Bessere Performance |
| Zeitkritisch (Zeitstempel) | {{ expr }} |
Wenn Präzision zwischen Feldern wichtig ist |
| Zufallswerte mit Eindeutigkeit | {{ expr }} |
Frischer Wert bei jeder Auswertung |
| Komplexe Ausdrücke mit mehrfacher Referenz | {expr} |
Konsistenz + Performance |
| Ausdrücke mit Seiteneffekten | {{ expr }} |
Seiteneffekte werden ausgeführt |
Hinweis zu targetEntity¶
Für targetEntity in Single-File-Exportern verhalten sich {expr} und {{ expr }} identisch, weil der Ausdrucks-Cache für jeden Datensatz zurückgesetzt wird und der Wert einmal pro Datensatz ausgewertet wird. Siehe Dynamische targetEntity für Details.
Basiselemente¶
<setup>¶
Das <setup>-Element ist das Wurzelelement für alle Datengenerierungsaufgaben. Es enthält ein oder mehrere <generate>-Elemente, die spezifische Datengenerierungsoperationen definieren. Mehr zur Verwendung findest Du unter Konfigurationsmodelle.
1 2 3 4 5 | |
<generate>¶
Das <generate>-Element ist das Herzstück der Datendefinitionsmodelle. Es definiert eine Datengenerierungsaufgabe und beinhaltet Attribute wie name, count und target. Mit diesem Element werden strukturierte Daten basierend auf den angegebenen Konfigurationen erstellt.
Note
Für verschachtelte <generate>-Blöcke ist die Variablenauflösung scope-sensitiv. Wenn eine Variable im aktuellen verschachtelten Generate deklariert ist, verwende bevorzugt this.variableName, statt Dich auf einen unqualifizierten Namen zu verlassen. Siehe Variablen-Scope in verschachtelten Generates.
Attribute¶
- name: Gibt den Namen der Generierungsaufgabe an.
- count: Gibt die Anzahl der zu generierenden Datensätze an.
- source: Gibt die Datenquelle an (z.B.
data/active.ent.csv,mongo). - target: Gibt das Ziel der Ausgabe an (z.B.
CSV,sqliteDB). - type: Gibt den Typ der zu generierenden Daten an.
- cyclic: Aktiviert oder deaktiviert zyklische Generierung. Standard ist
False. - selector: Gibt eine Datenbankabfrage für die Generierung an.
- separator: Gibt einen Trenner für die generierten Daten an. Standard ist
|. - sourceScripted: Aktiviert oder deaktiviert die skriptgesteuerte Auswertung der Quelle in der Quelldatei (z.B.
example.ent.csv,example.json). Standard istFalse. - pageSize: Gibt die Seitengröße für die Datengenerierung an.
- storageId: Gibt die ID des Objektspeicher-Clients an (definiert durch
<object-storage>). Gilt für Datei-Exporter (CSV/JSON/XML/Template) und ist nicht dasselbe wietargetClient. - sourceUri: Gibt die URI der Datenquelle im Objektspeicher an (z.B.
datasource/employees.csv). - exportUri: Gibt nur den Pfad/Prefix für den Export an (z.B.
export/). Der Dateiname kommt ausnameodertargetEntity, die Dateiendung aus dem jeweiligen Exporter. - container: Gibt den Containernamen für Azure Blob Storage an.
- bucket: Gibt den Bucket-Namen für AWS S3 an.
- distribution: Gibt die Verteilung der Datenquelleniteration an (z.B.
random,ordered). Standard istrandom. - converter: Gibt einen Konverter zur Wertetransformation an.
- variablePrefix: Konfigurierbares Attribut, das das Präfix für Variablensubstitution in dynamischen Strings definiert (Standard ist __).
- variableSuffix: Konfigurierbares Attribut, das das Suffix für Variablensubstitution in dynamischen Strings definiert (Standard ist __).
- numProcess: Definiert die Anzahl der Prozesse für Multiprocessing, kann vom Elternelement
<setup>übernommen werden. Standard ist 1. - mpPlatform: Definiert die Multiprocessing-Plattform. Zulässige Werte sind
multiprocessingundray. Standardwert istmultiprocessing.
Übersicht (Ziel vs Speicher vs Quelle)¶
| Zweck | Attribut(e) | Hinweis |
|---|---|---|
| Exporter-Typ wählen | target |
z.B. CSV, JSON, XML, Template, mongodb |
| DB/Kafka/Warehouse-Client wählen | targetClient |
Nur für client-basierte Exporter, nicht für Objektspeicher |
| Objektspeicher-Client wählen | storageId |
Referenziert <object-storage id="..."> |
| Export-Pfad/Prefix setzen | exportUri |
Pfad/Prefix; Dateiname aus name/targetEntity, Endung aus Exporter |
| Aus Objektspeicher lesen | source + sourceUri |
source = Client-ID, sourceUri = Objektpfad |
| Bucket/Container wählen | bucket / container |
Optional; Standard aus Client-Konfiguration |
Kindelemente¶
<key>: Gibt Schlüsselfelder innerhalb der Datengenerierungsaufgabe an.<variable>: Definiert Variablen, die bei der Datengenerierung verwendet werden.<reference>: Definiert Referenzen auf andere generierte Daten.<nestedKey>: Gibt verschachtelte Schlüsselfelder und deren Generierungsmethoden an.<list>: Definiert Listen von Datenelementen.<condition>: Definiert eine Bedingung, um Daten nur dann einzufügen, wenn diese erfüllt ist.<array>: Definiert Arrays von Datenelementen.<echo>: Gibt Text oder Variablen zur Protokollierung oder zum Debugging aus.
Beispiel 1: Verwendung von Objektspeicher für die Datengenerierung¶
1 2 3 4 5 6 7 8 9 10 11 | |
Objektspeicher lesen (source + sourceUri)¶
1 2 3 4 5 6 7 | |
Beispiel 2: Verwendung von selector mit einer Datenbank¶
1 2 3 4 | |
In diesem Beispiel:
- Der
selectorwird verwendet, um die MongoDB-Datenbank abzufragen und alle Kunden unter 30 Jahren zu finden. - Die Daten werden an den
ConsoleExporterausgegeben.
Beispiel 3: Datengenerierung mit MongoDB und Aggregation¶
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | |
Beispiel 4: Datengenerierung mit Kafka¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Beispiel 5: Verwendung von Daten aus einer CSV-Datei¶
1 2 3 4 | |
In diesem Beispiel:
- Zwei
generate-Aufgaben werden erstellt, die Daten aus CSV-Dateien beziehen und an denConsoleExporterausgeben.
Beispiel 6: Verwendung von cyclic mit Daten aus dem Speicher¶
1 2 3 4 5 6 7 8 9 10 11 12 | |
Beispiel 7: Verwendung von 'sourceScripted' mit JSON-Template¶
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Ergebnis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
In diesem Beispiel:
- Das Attribut
sourceScripted="True"wird verwendet, um das JSON-Template mit eingebetteten Variablen auszuwerten. - Das JSON-Template enthält Platzhalter für Variablen wie
random_age,street_nameundaddress_number. - Wenn der gesamte JSON-Feldwert eine Variable ist, sollte sie in geschweifte Klammern
{}eingeschlossen werden (z.B."age": "{random_age}"). Der zurückgegebene Wert kann ein String, Integer oder ein anderer Typ sein. - Wenn eine Variable in einen String eingebettet ist, sollte sie in doppelte Unterstriche
__eingeschlossen werden (z.B."address": "__address_number__, __street_name__ St"). Der zurückgegebene Wert ist ein String. Du kannst das Präfix und Suffix für die Variablensubstitution auch mit den AttributenvariablePrefix,variableSuffix,defaultVariablePrefixunddefaultVariableSuffixanpassen. Zum Beispiel: 1 2 3 4 5 6 7 8 9 10
<setup defaultVariablePrefix="-%" defaultVariableSuffix="%-"> <generate name="json_data" source="script/data.json" sourceScripted="True" target=""> <variable name="random_age" generator="IntegerGenerator(min=18, max=65)"/> </generate> </setup> <setup> <generate name="json_data" source="script/data.json" sourceScripted="True" target="" variablePrefix="-%" variableSuffix="%-"> <variable name="random_age" generator="IntegerGenerator(min=18, max=65)"/> </generate> </setup>
Beispiel 8: Verwendung der Multiprocessing-Plattform ray¶
1 2 3 4 5 6 7 | |
Das <generate>-Element definiert eine Datengenerierungsaufgabe. Im einfachsten Fall benötigt es:
- name: Identifiziert die Generierungsaufgabe
- count: Gibt an, wie viele Datensätze generiert werden sollen
- target: (Optional) Gibt das Ausgabeformat an (z.B. CSV, JSON)
Einfaches Beispiel¶
1 2 3 4 5 6 7 | |
Wesentliche Attribute¶
- name: Aufgabenbezeichner
- count: Anzahl der zu generierenden Datensätze
- target: Ausgabeformat (z.B.
CSV,JSON,ConsoleExporter) - source: (Optional) Eingabedatenquelle
<key>¶
Das <key>-Element definiert Schlüsselfelder innerhalb einer Datengenerierungsaufgabe und legt deren Generierungsmethoden fest. Diese Felder sind entscheidend für die Erstellung eindeutiger Kennungen oder strukturierter Elemente in den generierten Daten. Das <key>-Element ermöglicht dynamische, konstante oder bedingte Datengenerierung und bietet verschiedene Attribute zur Anpassung des Verhaltens.
Attribute¶
- name: Gibt den Namen des Schlüssels an. Dies ist verpflichtend und wird als Feldname in den generierten Daten verwendet.
- type: Definiert den Datentyp des Schlüssels (z.B.
string,int,bool). Dies ist optional, wennscriptodergeneratorverwendet wird. - source: Gibt die Datenquelle für den Schlüssel an (z.B. eine Datenbank, eine Datei).
- separator: Gibt einen Trenner für CSV-Quellen an.
- values: Stellt eine Liste statischer Werte bereit, aus denen der Schlüssel ausgewählt werden kann.
- script: Definiert ein Skript zur dynamischen Generierung des Schlüsselwerts.
- generator: Gibt einen Generator zur automatischen Wertgenerierung an (z.B.
RandomNumberGenerator,IncrementGenerator). - constant: Definiert einen konstanten Wert für den Schlüssel.
- condition: Gibt eine Bedingung an, die bestimmt, ob der Schlüssel generiert wird.
- converter: Gibt einen Konverter zur Wertetransformation an (z.B. Datumsumwandlung, Formatänderungen).
- pattern: Definiert ein Regex-Muster zur Validierung des Schlüsselwerts.
- inDateFormat / outDateFormat: Gibt Eingabe- und Ausgabeformate fuer Datumsumwandlungen an. Nach
outDateFormatsehen spaetere Ausdruecke einen String und keinen rohen Datetime-Wert mehr. - defaultValue: Gibt einen Standardwert an, falls der Wert des Schlüssels null ist oder nicht generiert wird.
- nullQuota: Definiert die Wahrscheinlichkeit, dass der Schlüssel einen Nullwert erhält. Standard ist
0(niemals null). - database: Gibt die Datenbank an, die zur Wertgenerierung verwendet wird (z.B.
SequenceTableGenerator). - string: Attribut zur Generierung komplexer Strings durch Einbetten von Variablen mit anpassbaren Trennzeichen (siehe Variablen-Abschnitt).
- variablePrefix: Konfigurierbares Attribut, das das Präfix für Variablensubstitution in dynamischen Strings definiert (Standard ist
__). - variableSuffix: Konfigurierbares Attribut, das das Suffix für Variablensubstitution in dynamischen Strings definiert (Standard ist
__).
Beispiel 1: Generierung von konstanten und geskripteten Schlüsseln¶
1 2 3 4 5 6 | |
In diesem Beispiel:
static_keyerhält für jeden Datensatz den konstanten Wert "fixed_value".dynamic_keygeneriert für jeden Datensatz mit einem Skript eine Zufallszahl zwischen 1 und 100.
Beispiel 2: Umgang mit nullQuota für optionale Felder¶
1 2 3 4 5 6 7 | |
In diesem Beispiel:
key_always_nullhat immer einen Nullwert (nullQuota="1").key_never_nullhat nie einen Nullwert (nullQuota="0").key_sometimes_nullhat in 50% der Fälle einen Nullwert (nullQuota="0.5").
Beispiel 3: Verwendung von defaultValue als Fallback¶
1 2 3 4 5 6 7 | |
Hier:
- Die ersten beiden Schlüssel greifen auf ihren
defaultValuezurück, wenn das Skript einen leeren oderNone-Wert erzeugt. - Der dritte Schlüssel wird nicht generiert, da seine Bedingung
Falseist.
Beispiel 4: Bedingte Schlüsselerzeugung¶
1 2 3 4 5 6 | |
In diesem Beispiel:
conditional_keywird nur generiert, wenn eine Zufallszahl größer als 50 ist.constant_keywird immer generiert, da die BedingungTrueist.
Beispiel 5: Verwendung von pattern zur Validierung¶
1 2 3 4 5 6 | |
In diesem Beispiel:
- Der Wert des Schlüssels
emailmuss dem Regex-Muster für eine gültige E-Mail-Adresse entsprechen. - Der Wert des Schlüssels
phone_numbermuss dem Regex-Muster für eine gültige Telefonnummer entsprechen (123-456-7890).
Beispiel 6: Datumsumwandlung mit inDateFormat und outDateFormat¶
1 2 3 4 5 | |
In diesem Beispiel:
- Der Schlüssel
date_of_birthverwendet das Eingabeformat (inDateFormat="%Y-%m-%d"), um das Datum zu parsen, und wandelt es in das angegebene Ausgabeformat (outDateFormat="%d-%m-%Y") um.
Beispiel 7: Rohes Datetime Fuer Arithmetik Beibehalten¶
1 2 3 4 5 6 7 | |
In diesem Beispiel:
issue_at_rawbleibt ein roher Datetime-Wert fuer spaetere Arithmetik.issue_datewird nur fuer die Ausgabe formatiert.due_datenutzt erst den rohen Wert und formatiert erst am Ende.
Beispiel 8: Schluesselerzeugung mit SequenceTableGenerator¶
1 2 3 4 5 6 | |
Hier:
- Der Schlüssel
user_idwird mit einemSequenceTableGeneratoraus einer PostgreSQL-Datenbank generiert. - Dieser Generator stellt sicher, dass eindeutige, fortlaufende Werte aus der Datenbank gezogen werden.
Best Practices für die Verwendung von <key>¶
- Nutze
scriptfür dynamische Werte: Verwende Skripte, um komplexe und dynamische Werte zu generieren, z.B. Zufallszahlen, Daten oder berechnete Werte. - Setze
nullQuotafür realistische Daten ein: Simuliere reale Szenarien, in denen manche Schlüssel Nullwerte haben. - Fallback mit
defaultValue: Stelle sicher, dass Schlüssel immer einen Wert haben, falls ein Skript fehlschlägt oderNoneliefert. - Musterabgleich zur Validierung: Nutze das Attribut
pattern, um bestimmte Formate zu erzwingen, z.B. E-Mail-Adressen oder Telefonnummern. - Steuere die Schluesselerzeugung mit
condition: Bestimme dynamisch, ob ein Schluessel generiert werden soll, um komplexe Szenarien abzubilden. - Rohes Datetime Von Formatierter Ausgabe Trennen: Wenn spaeter Datetime-Arithmetik noetig ist, halte einen rohen Variablenwert vor und formatiere erst im finalen Key.
<variable>¶
Das Element <variable> definiert Variablen, die in Datengenerierungs‑Tasks verwendet werden. Variablen können aus Datenbanken, Datensätzen (z.B. CSV/JSON) stammen oder dynamisch per Skript erzeugt werden. Sie schaffen Flexibilität, indem sie steuern, wie Daten bezogen oder iteriert werden. Neu in dieser Version ist das Attribut storage für explizite Steuerung bei voller Rückwärtskompatibilität.
Attribute¶
- name: Name der Variable.
- type: Datentyp der Variable (optional). Bei DB/File‑Quellen i.d.R. Tabellen‑/Collection‑/Entity‑Name.
- source: Datenquelle (z.B. eine Datenbank oder ein Dateipfad).
- selector: Abfrage, um Daten einmalig für die Variable aus einer Datenbank zu laden (wird einmal ausgeführt).
- iterationSelector: Abfrage, die in jeder Iteration ausgeführt wird, um dynamische Daten zu laden.
-
storage: Legt fest, wie die Variable Daten speichert/ausliefert. Optionen:
-
value– ein einzelner statischer Wert (Standard für Generatoren/Konstanten; bei Query: erste Zeile) data– komplette Datenliste im Speicher (Random‑Access)iterator– Cursor/Iterator über Zeilen; respektiertcyclic- separator: Feldtrennzeichen (z.B. bei CSV‑Quellen).
- cyclic: Aktiviert/deaktiviert zyklische Iteration der Quelle (relevant für
storage="iterator"). - entity: Entity für die Datengenerierung (z.B. ein vordefiniertes Modell/Objekt).
- script: Skript zur dynamischen Erzeugung des Variablenwerts.
- weightColumn: Spalte zur gewichteten Auswahl (typisch bei CSV/DB‑Quellen).
- sourceScripted: Aktiviert die pro‑Zeile‑Template‑Auswertung für dateibasierte Quellen (CSV/JSON, gewichtete Quellen).
- generator: Generator für die Variable (z.B.
RandomNumberGenerator,IncrementGenerator). - dataset: Datensatz für die Variable (meist ein Dateipfad).
- locale: Locale für die Datenerzeugung.
- inDateFormat / outDateFormat: Datumsformat-Konvertierung Ein-/Ausgabe. Nach
outDateFormatsehen spaetere Ausdruecke einen String und keinen rohen Datetime-Wert mehr. - converter: Konverter zur Transformation des Variablenwerts.
- constant: Konstanter Festwert für die Variable.
- values: Liste möglicher Werte, aus denen ausgewählt wird.
- defaultValue: Standardwert, falls keine Daten verfügbar sind.
- pattern: Regex‑Muster zur Validierung des Inhalts.
- distribution: Steuerung der Auswahlverteilung (
random,ordered). - database: Konkrete Datenbank für die Generierung (falls mehrere konfiguriert sind).
- string: Attribut für komplexe Strings mit eingebetteten Variablen via konfigurierbarer Delimiter (siehe Beispiele bei
<key>). - variablePrefix / variableSuffix: Konfigurierbare Präfix/Suffix‑Delimiter für Variablensubstitution in dynamischen Strings (Standard
__). Global auf<setup>viadefaultVariablePrefix/defaultVariableSuffixsetzbar und pro Element überschreibbar.
Speichermodi¶
Verwende storage für ein explizites, vorhersagbares Verhalten:
value: einzelner statischer Wert. Ideal für Konfigurationswerte, skalareselector‑Abfragen, Konstanten, Generatoren.data: vollständige Liste im Speicher. Nützlich für Analysen, Random‑Access oder Join‑Logik in Skripten. Speicherbedarf beachten.iterator: effiziente Zeileniteration. Respektiertcyclic. Geeignet für große Tabellen/Dateien.
Automatisches Legacy‑Verhalten (rückwärtskompatibel)¶
Wenn storage weggelassen wird, wendet DATAMIMIC die bisherigen Regeln an:
- Selector‑Variablen → verhalten sich als statischer Einzelwert.
- Tabellen/Collection‑Variablen → iterieren zyklisch über Zeilen (Iterator‑Semantik).
- Generator/Konstante → Einzelwert.
Kontextebenen¶
- Root‑Variablen (direkt unter
<setup>deklariert): einmal geladen, im gesamten Lauf geteilt, stabil im Multiprocessing. - Verschachtelte Variablen (innerhalb von
<generate>): pro Generierungskontext erzeugt; können beicyclic="False"erschöpfen.
Hinweise zu Multiprocessing¶
storage="data": jeder Worker erhält die gleiche Snapshot‑Liste.storage="iterator": jeder Worker bewegt seinen eigenen Cursor. Für globale, geteilte Traversierung lieber upstream partitionieren (z.B. per ID‑Ranges).
Beispiel 1: generator für fortlaufende Werte¶
1 2 3 4 5 6 | |
In diesem Beispiel:
idnutzt denIncrementGeneratorund erzeugt fortlaufende Zahlen.- Die generierte ID wird je Datensatz auf
generated_idgemappt.
Beispiel 2: CSV‑Quelle mit separator¶
1 2 3 4 5 6 7 8 | |
In diesem Beispiel:
personwird aus einer CSV geladen; Felder sind durch Komma getrennt.distribution="ordered"stellt die Quellreihenfolge sicher.
Beispiel 3: constant definieren¶
1 2 3 4 5 6 | |
Hier:
countryist als Konstante "Germany" definiert und wird für alle Datensätze verwendet.
Beispiel 4: Dynamische Variablen per script¶
1 2 3 4 5 6 7 8 | |
In diesem Beispiel:
random_numbererzeugt eine Zufallszahl 1..100 per Skript.full_namenutzt diefake‑Bibliothek für zufällige Namen.
Beispiel 5: cyclic mit CSV‑Quelle¶
1 2 3 4 5 6 7 | |
In diesem Beispiel:
cyclic="True"sorgt dafür, dass nach dem Ende wieder von vorn begonnen wird.
Beispiel 6: distribution für zufällige Auswahl¶
1 2 3 4 5 6 7 | |
Hier:
distribution="random"sorgt für zufällige Auswahl aus der CSV.
Beispiel 7: Iteration mit iterationSelector¶
1 2 3 4 5 6 7 8 9 | |
In diesem Beispiel:
iterationSelectorwird pro Iteration mit dem aktuelleniteration_countausgeführt und lädt dynamisch Benutzer‑Daten.
Beispiel 8: Gewichtete Auswahl mit weightColumn¶
1 2 3 4 5 6 7 | |
Hier:
weightColumn="weight"steuert die Auswahlhäufigkeit pro Zeile (höheres Gewicht ⇒ höhere Wahrscheinlichkeit).
Beispiel 9: Kombination mit verschachtelten Keys¶
1 2 3 4 5 6 7 8 9 10 11 12 | |
In diesem Fall:
customerundnotificationkommen aus CSV‑Dateien.nestedKeyerzeugt pro Kunde zwei Benachrichtigungen.
Beispiel 10: Entities und lokalisierten Daten¶
1 2 3 4 5 6 7 | |
In diesem Beispiel:
personwird über die EntityPersonmit Localede_DEgeneriert (z.B. Namen, Adressen).
Beispiel 11: string für dynamische/komplexe Strings¶
1 2 3 4 5 6 | |
In diesem Beispiel:
- Das
string‑Attribut erlaubt die dynamische Einbettung voncollectionin den String. - Die benutzerdefinierten
%%‑Delimiter ersetzen den Standard__.
Beispiel 12: Standard‑variablePrefix/variableSuffix¶
1 2 3 4 5 6 | |
Hier:
- Es werden die Standard‑Delimiter
__für die Variablensubstitution verwendet.
Beispiel 13: Expliziter Iterator mit cyclic¶
1 2 3 4 5 6 | |
Beispiel 14: Vollständigen Datensatz im Speicher halten¶
1 2 3 4 5 6 7 | |
Beispiel 15: Einzelwert‑Verhalten erzwingen¶
1 2 3 4 5 6 | |
Bewährte Vorgehensweisen für <variable>¶
- Dynamische Datenerzeugung: Skripte für Zufallszahlen, Namen, Adressen etc. nutzen (
random,fake). - Zyklisch vs. nicht‑zyklisch:
cyclicaktivieren, wenn Wiederholung gewünscht ist; sonst erschöpft die Quelle nach einem Durchlauf. - Gewichtung & Randomisierung:
weightColumnfür Bias,distribution="random"für Zufallsauswahl. - Mit verschachtelten Keys kombinieren: Für strukturierte/hierarchische Ausgaben
nestedKeyverwenden. - Passenden
storagewählen:valuefür Skalare/Konfig,iteratorfür große Quellen,datafür kleine Listen mit Indexzugriff. - Explizites
typebei DB‑Quellen: Keine implizite Ableitung aus dem Variablennamen. - Multiprocessing beachten:
dataist ein geteilter Snapshot; Iteratoren laufen pro Worker separat weiter.
Zusammenfassung der Speichermodi¶
| Variablenmuster | Storage‑Modus | Verhalten | Use Case |
|---|---|---|---|
selector="..." |
auto → value | Einzelwert | Config, Max‑Werte, Konstanten |
type="table_name" |
auto → iterator | Zyklische Iteration | Beziehungen/Entitäten |
storage="value" |
explizit | Einzelwert | Statisches Verhalten erzwingen |
storage="data" |
explizit | Komplette Liste | Berechnungen, Random‑Access |
storage="iterator" |
explizit | Zyklus/Erschöpfung per cyclic |
Kontrollierte Iteration |
<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 verwendet werden, um Originaldaten anzureichern.
Das <ml-train>-Element ist ein Kindelement von <setup>.
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 | |
Für den Lifecycle Datenbankansicht -> ML-Generator-Ansicht und den projektbezogenen Wiederverwendungsfluss (inklusive source="ml://...") siehe ML-Generator aus Datenbank-Metadaten und ML-Generator-Ansicht.
Komplettes Basisbeispiel¶
Hier ein vollständiges Beispiel, das die Kernelemente kombiniert:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Dies generiert 100 Benutzerdatensätze mit konsistenten, strukturierten Daten inklusive IDs, Namen, Alter und einem Statusfeld.
Nächste Schritte¶
Sobald Du mit diesen Kernelementen vertraut bist, schaue Dir die Fortgeschrittenen Datendefinitionselemente für komplexere Funktionen an, wie:
- Verschachtelte Datenstrukturen
- Bedingte Generierung
- Komplexe Datenmuster
- Arrays und Listen
- Erweiterte Variablenverwendung