Zum Inhalt

Benerator zu DATAMIMIC Migrationsleitfaden

Dieser Leitfaden bietet detaillierte Anweisungen und Beispiele, um Dir bei der Migration von Benerator zu DATAMIMIC zu helfen. Er enthält einen umfassenden Vergleich von unterstützten Elementen, Attributen, Generatoren und Konvertern, zusammen mit Vorschlägen für manuelle Migration und Python-Scripting-Alternativen.

Benerator und DATAMIMIC Vergleich

Unten findest Du eine detaillierte Analyse und einen Vergleich des Benerator-Modells mit dem DATAMIMIC-Modell.

Von DATAMIMIC unterstützte Elemente und Attribute

Entfernte Elemente:

  • <bean/>
  • <setting/> -> ersetze durch variable
  • <property/> -> ersetze durch variable
  • <pre-parse-generate/>
  • <domtree/>
  • <run-task/>
  • <defaultComponents/>
  • <comment/> -> ersetze durch echo
  • <error/>
  • <beep/>
  • <dbsanity/>
  • <iterate/> -> ersetze durch generate
  • <attribute/> -> ersetze durch key
  • <part/> -> ersetze durch nestedKey
  • <id/> -> ersetze durch key
  • <consumer/>
  • <evaluate/>
  • <import/>
  • <execute/>

Entfernte Attribute:

  • consumer="Preview" - das passiert automatisch
  • consumer="Result"
  • consumer="NoConsumer" - entferne einfach das Ziel und es wird nicht exportiert
  • consumer -> ersetze durch target
  • type in generate and iterate -> ersetze durch name
  • subSelector -> kann durch selector ersetzt werden
  • acceptUnknownTypes
  • defaultScript
  • defaultErrorHandler
  • defaultImports
  • generatorFactory
  • maxCount
  • defaultNull
  • defaultTimeZone -> keine sofortige Notwendigkeit
  • defaultPageSize
  • defaultOneToOne
  • defaultSourceScripted

Benutzerdefinierte Jars:

  • Noch nicht unterstützt. Wir arbeiten an einem Prototyp mit GraalPy und GraalVM, um dies in Zukunft zu ermöglichen.

JDBC-Metadatenanalyse:

  • Entfernt, wir verwenden SQL Alchemy für Datenbankverbindungen. Zusätzlich werden wir mehr datenbankbezogene Komfortfunktionen in unserer DATAMIMIC UI bereitstellen.

Skriptunterstützung

  • JS / BEN Skriptunterstützung entfernt.
  • dynamicSource -> Source (nur) und es gibt ein boolesches Attribut sourceScripted, das so in variable, key und nestedKey verwendet werden kann:
    1
    <variable name="people" source="data/people.wgt.ent.csv" sourceScripted="True" cyclic="True"/>
    
    Skriptgesteuerte Daten müssen von geschweiften Klammern umgeben sein, wie hier 1,Steve,{48+11},15.
  • Endzustand von <variable/> im globalen Kontext -> Speicherung dynamischer Werte muss durch Datenbankabfragen/Dateicaches/usw. gehandhabt werden.

Zugriff auf Komponenten und Variablen

  • Zugriff auf Root-Ebene: Wenn Du Schlüssel oder Variablen auf der Root-Ebene innerhalb eines Skriptattributs ansprichst, muss der erste Generate-Knoten nicht erwähnt werden. Zum Beispiel, um eine Variable oder einen Schlüssel direkt auf der Root-Ebene zu erreichen:

    1
    <generate script="variableOrKeyInRootLvl"/>
    

  • Zugriff auf verschachtelte Ebene: Wenn die Variable oder der Schlüssel innerhalb einer verschachtelten Struktur liegt, wie zum Beispiel einem anderen Generate-Knoten oder einem NestedKey-Knoten auf Ebene 2, muss der Name des verschachtelten Knotens vorangestellt werden. Zum Beispiel, um auf eine Variable oder einen Schlüssel in der zweiten Ebene zuzugreifen:

    1
    <generate script="nestedKeyOrGenerateName.variableOrKeyInNestedLvl2"/>
    

Beispiele mit bereitgestelltem Modell

Angenommen, das folgende Modell liegt vor:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<setup>
    <generate name="persons" count="5">
        <key name="name" type="string" values="'Alice','Bob','Charlie'"/>
        <nestedKey name="notes" type="list" count="1">
            <key name="pet" type="string" constant="Dog"/>
            <key name="hobby" type="string" values="'Skiing','Sailing'"/>
            <key name="friend" type="string" constant="Nemo"/>
            <key name="work" type="string" values="'Google','Microsoft','Tesla'"/>
        </nestedKey>
        <nestedKey name="cars" type="list" minCount="0" maxCount="3">
            <key name="model" type="string" values="'Audi Q4 e-tron','Tesla','VW Passat','BMW iX'" />
            <key name="color" type="string" generator="DataFakerGenerator('color_name')" />
            <nestedKey name="accidents" type="list" source="data/accidents.ent.csv" maxCount="3">
              <key name="repair_required" source="data/active.wgt.csv"/>
            </nestedKey>
        </nestedKey>
    </generate>
</setup>

Und Entity und Gewichtungsdaten als:

data/accidents.ent.csv
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
date;description;damage_cost
03-12;Pedestrian impact;2500
03-13;Animal collision;800
03-14;Weather-related incident;600
03-15;Hit and run;2000
03-16;Pedestrian impact;2500
03-17;Rear-end collision;1500
03-18;Head-on collision;3000
03-19;Rear-end collision;1500
03-20;Weather-related incident;600
03-21;Parking lot scrape;300
data/active.wgt.csv
1
2
3
True;80
False;10
;10
  • Beispiel für Zugriff auf Root-Ebene: Um auf den Schlüssel name auf der Root-Ebene zuzugreifen:

    1
    <generate script="name"/>
    

  • Beispiele für Zugriff auf verschachtelte Ebene:

  • Um auf den Schlüssel car innerhalb des notes nestedKey zuzugreifen:
    1
    <generate script="notes.pet"/>
    
  • Um auf den Schlüssel color innerhalb des cars nestedKey zuzugreifen:
    1
    <generate script="cars.color"/>
    
  • Um auf den Schlüssel repair_required innerhalb des accidents nestedKey innerhalb von cars zuzugreifen:
    1
    <generate script="cars.accidents.repair_required"/>
    
  • Um auf den Schlüssel name innerhalb des family nestedKey zuzugreifen:
    1
    <generate script="family.name"/>
    

Vorteile im Vergleich zu Benerator

  • Klarer Zugriff auf Komponenten: Die Struktur des DATAMIMIC-Modells bietet eine klare und konsistente Möglichkeit, auf Komponenten und Variablen zuzugreifen. Bei Benerator kann der Zugriff auf Komponenten, insbesondere bei kaskadierenden Generate- und Iterate-Knoten, verwirrend und fehleranfällig sein. DATAMIMIC vereinfacht dies durch eine einfache Namenskonvention für verschachtelte Ebenen, was die Lesbarkeit und Wartbarkeit verbessert.

  • Strukturierte Navigation: Mit DATAMIMIC ist die Struktur intuitiver. Komponenten auf der Root-Ebene werden direkt angesprochen, während verschachtelte Komponenten durch Voranstellen der Namen ihrer Elternknoten angesprochen werden. Dies beseitigt die Mehrdeutigkeit, die bei Benerator beim Umgang mit komplexen verschachtelten Strukturen auftritt.

  • Verbesserte Lesbarkeit: Die explizite Benennung von verschachtelten Ebenen in DATAMIMIC-Skripten macht den Code leichter lesbar und verständlich. Dies reduziert die kognitive Belastung für Entwickler und minimiert die Wahrscheinlichkeit von Fehlern beim Zugriff auf tief verschachtelte Variablen.

  • Konsistenz: DATAMIMIC erzwingt eine konsistente Methode zum Zugriff auf Variablen und Schlüssel, unabhängig davon, ob sie sich auf der Root-Ebene befinden oder innerhalb mehr