Transcoder-Konfiguration

Du kannst den Mainframe Connector-Transcoder konfigurieren, indem du die erforderliche Konfiguration in eine JSON-Datei einfügst. Diese Datei wird als Transcoder-Konfigurationsdatei bezeichnet. Sie müssen die Konfiguration wie im Abschnitt Konfiguration angegeben definieren. Die Befehle qsam encode und qsam decode verwenden die Transcoder-Konfigurationsdatei, um die Datentranscodierung durchzuführen.

Auf dieser Seite werden die verschiedenen Möglichkeiten zur Konfiguration des Mainframe Connector-Transcoders beschrieben.

Konfiguration

Das Configuration-Objekt ist die Wurzel der Transcoder-Konfiguration. Sie enthält alle Konfigurationsoptionen für den Transcoder.

JSON-Darstellung
{
    "defaults": object (DefaultsSection),
    "field_suffixes": object (FieldSuffix),
    "field_overrides": object (FieldOverride),
    "transformations": object (Transformation),
    "schema_validation_mode": enum (SchemaValidationMode)
}
Felder
defaults

object (DefaultsSection)

Geben Sie Standardfeldmodifikatoren für Cobol-Archetypen an.

field_suffixes

object (FieldSuffix)

Geben Sie Feldsuffixe an.

field_overrides

object (FieldOverride)

Geben Sie Feldüberschreibungen an.

transformations

object (Transformation)

Geben Sie Feldtransformationen an.

schema_validation_mode

enum (SchemaValidationMode)

Geben Sie den Modus für die Schemaüberprüfung an.

DefaultsSection

Mit dem DefaultsSection-Objekt können Standardänderungen nach Cobol-Typen angegeben werden. Sie werden vor allen Änderungen an Suffixen oder Überschreibungen angewendet.

JSON-Darstellung
{
    "alpha_numeric_display": object (FieldModifier),
    "numeric_display": object (FieldModifier),
    "binary": object (FieldModifier),
    "packed_decimal": object (FieldModifier),
    "national": object (FieldModifier),
    "utf8": object (FieldModifier),
    "dbcs": object (FieldModifier),
    "hexadecimal_floating_point": object (FieldModifier)
}
Felder
alpha_numeric_display

object (FieldModifier)

Geben Sie Standardwerte für alphanumerische Felder (PIC X) an.

numeric_display

object (FieldModifier)

Geben Sie Standardwerte für Felder mit numerischer Anzeige (Zonendezimalformat) an.

binary

object (FieldModifier)

Geben Sie Standardwerte für Felder mit Binärzahlen (COMP) an.

packed_decimal

object (FieldModifier)

Geben Sie Standardwerte für komprimierte Dezimalfelder (COMP-3) an.

national

object (FieldModifier)

Geben Sie Standardwerte für nationale Felder (PIC N) an.

utf8

object (FieldModifier)

Geben Sie Standardwerte für UTF-8-Felder (PIC U) an.

dbcs

object (FieldModifier)

Standard für dbcs-Felder (DISPLAY-1).

hexadecimal_floating_point

object (FieldModifier)

Standard für Hexadezimal-Fließkommafelder (COMP-1, COMP-2).

FieldSuffix

Feldsuffixe gelten für alle Felder mit einem Suffix.

Felder werden abgeglichen, wenn sie auf einen Bindestrich (-) oder Unterstrich (_) gefolgt vom Suffix enden.

Bei Suffixen wird die Groß- und Kleinschreibung nicht berücksichtigt.

Der FieldSuffix-Modifikator wird nach dem FieldOverride-Modifikator angewendet.

Der für das Suffix NID definierte Modifikator wird beispielsweise auf das Feld FLD-NID angewendet, aber nicht auf das Feld FUNID.

JSON-Darstellung
{
    "suffix": string,
    "is_inverse": boolean,
    "modifier": object (FieldModifier)
}
Felder
suffix

string

Der Modifikator wird auf das Feld mit diesem Suffix angewendet.

is_inverse

boolean

Geben Sie an, ob es sich um einen inversen Feldmodifikator handelt. Mit einem umgekehrten Feldmodifikator wird der Modifikator auf ein anderes Feld angewendet, das denselben Namen wie das Feld mit dem Modifikator hat, ohne den Modifikator. Wenn beispielsweise sowohl das Feld FLD-NID als auch das Feld FLD im selben Datensatz vorhanden sind, wird der Modifikator auf FLD angewendet.

Wenn Sie einen umgekehrten Feldmodifikator verwenden, kann die spezielle Kennung $self verwendet werden, wenn ein Feldname normalerweise für den Verweis auf das Feld mit dem Suffix verwendet werden kann.

Wenn Sie beispielsweise ein Feld für Null-Indikatoren erstellen möchten, können Sie den Feldmodifikator null_if mit is_inverse = true verwenden. Weitere Informationen finden Sie unter NullIf.

modifier

object (FieldModifier)

Geben Sie den Modifikator an, der auf übereinstimmende Felder angewendet werden soll.

FieldOverride

Überschreiben oder ändern Sie die Dekodierungs- und Codierungskette für das angegebene Feld.

JSON-Darstellung
{
    "field": string,
    "modifier": object (FieldModifier)
}
Felder
field

string

Geben Sie den Namen des Felds an, auf das der Modifikator angewendet werden soll.

modifier

object (FieldModifier)

Geben Sie den Modifikator an, der auf das Abgleichfeld angewendet werden soll.

Transformation

Mit Ansichtstransformationen wird die Beziehung zwischen der Tabelle und der QSAM-Datei geändert. Transformationen werden immer aus der Sicht der Daten formuliert. Das Konzept ähnelt dem von Ansichtstabellen in BigQuery.

JSON-Darstellung
{
    "exclude": object (Exclude),
    "unnest": object (Unnest),
    "move": object (Move),
    "rename": object (Rename)
}
Felder
exclude

object (Exclude)

unnest

object (Unnest)

move

object (Move)

rename

object (Rename)

FieldModifier

Mit einem Feldmodifikator können Sie die Codierung oder Dekodierung eines bestimmten Felds ändern. Hinweis: Nicht alle Modifikatoren können auf alle Felder angewendet werden. Weitere Informationen zu den einzelnen Modifikatoren finden Sie in der Dokumentation.

JSON-Darstellung
{
    "filler": object (Filler),
    "null_if": object (NullIf),
    "format_date": object (FormatDate),
    "chain": object (ModifierChain),
    "zoned_decimal": object (ZonedDecimal),
    "binary": object (Binary),
    "packed_decimal": object (PackedDecimal),
    "null_if_invalid": object (NullIfInvalid),
    "bytes": object (Bytes),
    "varlen": object (VarLen),
    "string": object (String),
    "null_if_empty": object (NullIfEmpty),
    "format_timestamp": object (FormatTimestamp),
    "hfp": object (HFP)
}
Felder
filler

object (Filler)

Ignorieren und ausschließen Sie das Feld.

null_if

object (NullIf)

Legen Sie den Wert des zugrunde liegenden Felds bei einer Bedingung auf „null“ fest.

format_date

object (FormatDate)

Formatieren Sie ein Stringfeld als Datum.

chain

object (ModifierChain)

Mehrere Modifikatoren verketten

zoned_decimal

object (ZonedDecimal)

Dezimalformat für Zonenfelder überschreiben

binary

object (Binary)

Konfiguration des Binärfelds überschreiben.

packed_decimal

object (PackedDecimal)

Konfiguration des komprimierten Dezimalfelds überschreiben.

null_if_invalid

object (NullIfInvalid)

Setzen Sie das Feld auf „null“, anstatt die Zeile bei einem Fehler zu überspringen.

bytes

object (Bytes)

Feld „Bytes“ überschreiben.

varlen

object (VarLen)

Legen Sie den Datensatz als Feld mit variabler Länge fest.

string

object (String)

Konfiguration des Stringfelds überschreiben

null_if_empty

object (NullIfEmpty)

Legen Sie den Wert des zugrunde liegenden Felds auf „null“ fest, wenn das Feld leer ist.

format_timestamp

object (FormatTimestamp)

Formatieren Sie ein Stringfeld als Zeitstempel.

hfp

object (HFP)

Legen Sie für dieses Feld einen Hexadezimal-Float-Wert fest.

Ausschließen

Ein Feld aus der resultierenden Tabelle ausschließen, aber trotzdem decodieren oder codieren. Das ist nützlich, wenn das Feld nicht in die Tabelle übertragen werden muss, aber für die Transcodierung erforderlich ist. So können beispielsweise Null- oder Längenfelder aus der Tabelle weggelassen werden.

Wenn du die Transcodierung vollständig umgehen möchtest, kannst du den Filler-Modifikator anwenden.

JSON-Darstellung
{
    "field": string
}
Felder
field

string

Geben Sie das Feld an, das ausgeschlossen werden soll.

Unnest

Entfernen Sie das Nesting des Felds.

JSON-Darstellung
{
    "field": string,
    "format": string
}
Felder
field

string

Geben Sie das Feld an, das entschachtelt werden soll.

format

string

Geben Sie das neue Feldformat an.

Die ${parent} wird mit dem Namen des Felds veröffentlicht, das entschachtelt wird.

Bei nicht verschachtelten Strukturen wird ${field} durch den Namen des STRUCT-Felds ersetzt.

Bei nicht verschachtelten Arrays und Listen wird ${index} durch die Indizes des Arrays ersetzt.

Verschieben

Ein Feld im Datensatz verschieben

JSON-Darstellung
{
    "field": string,
    "offset": int
}
Felder
field

string

Geben Sie das Feld an, das Sie verschieben möchten.

offset

int

Geben Sie die Anzahl der Stellen an, um die das Feld nach vorne oder hinten verschoben werden soll.

Umbenennen

Benennen Sie ein oder mehrere Felder basierend auf einer Übereinstimmung mit einem regulären Ausdruck um.

Wenn Sie beispielsweise alle Bindestrichen durch Unterstriche ersetzen möchten, verwenden Sie das folgende JSON-Format: {"find": "\\-", "replace":"_"}.

JSON-Darstellung
{
    "find": string,
    "replace": string
}
Felder
find

string

Gibt ein Muster für reguläre Ausdrücke in Java an, um die zu umzubenennenden Felder zu identifizieren.

Das Muster wird mit dem vollständigen Feldnamen abgeglichen. Wenn das Muster mit einem Teil des Feldnamens übereinstimmt, wird das Feld als Übereinstimmung betrachtet.

Beispiele:

  • "\\-" (stimmt mit jedem Feld überein, das einen Bindestrich enthält)
  • "^field_name$" (stimmt mit Feldern mit dem genauen Namen field_name überein)
  • "^field_(.*)$" (stimmt mit allen Feldern überein, die mit field_ beginnen, und erfasst den Rest)
  • "part_of_name" (stimmt mit jedem Feld überein, das part_of_name enthält)

replace

string

Gibt den neuen Namen für die übereinstimmenden Felder an.

Erfassungsgruppen aus dem regulären Ausdruck find können mit Rückverweisen wie $1 und $2 im String replace verwendet werden. So sind komplexere Transformationen möglich, die auf Teilen des ursprünglichen Feldnamens basieren.

Beispiele:

  • "new_field_name" (ersetzt das Feld durch einen festen Namen)
  • "new_$1" (verwendet die erste Aufnahmegruppe von find)
  • "${1}_new" (alternative Syntax für Erfassungsgruppen)
  • "prefix_$1_suffix" (verwendet eine Erfassungsgruppe und fügt Präfixe/Suffixe hinzu)

Füllstoff

Gibt an, dass ein Feld nicht decodiert oder codiert wird. Außerdem wird es während des Dekodierungsprozesses aus der resultierenden Tabelle ausgeschlossen. Sie können diesen Modifikator auf jedes Feld mit einer bekannten Größe anwenden.

Gib ein leeres JSON-Objekt an:

JSON-Darstellung
{
}

NullIf

Setzen Sie ein Feld auf „null“, wenn eine Bedingung erfüllt ist. Sie müssen entweder null_value oder non_null_value oder beides angeben.

Wenn Sie ein Feld mit Null-Indikator erstellen möchten, können Sie ein FieldSuffix mit einem null_if-Feldmodifikator verwenden und is_inverse auf true setzen, wie in den folgenden Beispielen gezeigt:

Beispiel: Null-Indikator

Um ein Feld mit Null-Indikator zu erstellen, können wir den Feldmodifikator null_if so verwenden.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "?",
       "target_field": "$self"
     }
    }
   }
  ]
 }

So können alle Felder mit dem Suffix NID als Null-Indikatoren verwendet werden, wie im folgenden Copybook-Snippet dargestellt:

 01 REC.
   02 FIELD     PIC X(10).
   02 FIELD-NID PIC X(1).

Beispiel: Binärer Null-Indikator

Um ein binary-Nullindikatorfeld zu erstellen, können wir die Feldmodifikatoren binary und null_if so verwenden.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "modifier": {
       "binary": {}
     }
   },
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "15",
       "target_field": "$self"
     }
    }
   }
  ]
 }

So können alle Felder mit dem Suffix NID im selben Copybook aus dem vorherigen Beispiel als binary-Nullereignisse verwendet werden.

Beispiel: Null-Indikator für Bytes

Um ein bytes-Null-Indikatorfeld zu erstellen, können wir die Feldmodifikatoren bytes und null_if so verwenden. Die Werte für „Null“ und „Nicht null“ werden als HEX ausgedrückt.

 {
  "field_suffixes": [
   {
     "suffix": "NID",
     "modifier": {
       "bytes": {}
     }
   },
   {
     "suffix": "NID",
     "is_inverse": true,
     "modifier": {
     "null_if": {
       "null_value": "FF",
       "target_field": "$self"
     }
    }
   }
  ]
 }

So können alle Felder mit dem Suffix NID mit demselben Copybook aus dem vorherigen Beispiel als bytes-Nullindikator verwendet werden.

JSON-Darstellung
{
    "target_field": string,
    "null_value": string,
    "non_null_value": string
}
Felder
target_field

string

Geben Sie das Feld an, dessen Wert Sie prüfen möchten. Das Feld muss in den Geltungsbereich fallen.

null_value

string

Wenn target_field diesem Wert entspricht, wird das Feld nicht decodiert oder codiert und der Wert wird auf „null“ gesetzt.

non_null_value

string

Wenn target_field nicht mit diesem Wert übereinstimmt, wird das Feld nicht decodiert oder codiert und der Wert wird auf „null“ gesetzt.

FormatDate

Formatieren Sie einen String in ein Datum mit einem der unterstützten Formate. Sie können diesen Modifikator nur auf Felder mit Größenangabe anwenden. Während der Dekodierung werden die Formate der Reihe nach getestet, bis eines der Formate mit dem String übereinstimmt. Bei der Codierung wird das erste Format verwendet und die restlichen werden ignoriert.

JSON-Darstellung
{
    "formats": object (DateTimeFormat)
}
Felder
formats

object (DateTimeFormat)

Liste der Datumsformate.

ModifierChain

Geben Sie eine Modifikatorkette an, um mehrere Modifikatoren nacheinander anzuwenden. Die Modifikatoren werden in der Reihenfolge angewendet, in der sie angegeben sind.

JSON-Darstellung
{
    "modifiers": object (FieldModifier)
}
Felder
modifiers

object (FieldModifier)

Geben Sie die Liste der anzuwendenden Modifikatoren an.

ZonedDecimal

Hier werden verschiedene Optionen für die Codierung und Dekodierung von Zonen-Dezimalzahlen festgelegt. Dieser Modifikator kann nur auf ein Dezimalfeld angewendet werden.

JSON-Darstellung
{
    "logical_type": enum (DecimalLogicalType),
    "encoding": enum (ZonedDecimalEncoding)
}
Felder
logical_type

enum (DecimalLogicalType)

Geben Sie den logischen Typ an, der beim Entschlüsseln oder Codieren des Felds verwendet werden soll.

encoding

enum (ZonedDecimalEncoding)

Die Codierung, mit der das Feld codiert ist.

Binär

Ignorieren Sie alle vorherigen Modifikatoren und behandeln Sie dieses Feld als Binärzahl.

JSON-Darstellung
{
    "signedness": enum (BinarySignedness)
}
Felder
signedness

enum (BinarySignedness)

Das Vorzeichen der Zahl.

PackedDecimal

Legen Sie für dieses Feld den Wert „PackedDecimal“ fest.

JSON-Darstellung
{
    "logical_type": enum (DecimalLogicalType)
}
Felder
logical_type

enum (DecimalLogicalType)

Logischen Typ überschreiben Standardmäßig verwendet der Mainframe-Connector den optimalen logischen Typ basierend auf der Genauigkeit und Skalierung.

NullIfInvalid

Wenn das Transcodieren fehlschlägt, wird der Wert als „null“ behandelt. Sie können diesen Modifikator nur auf Felder mit Größenangabe anwenden. Der Fehler wird ignoriert und nicht im Dataset für den Überlauf protokolliert. Während der Dekodierung ist der Wert dieses Felds für diesen Datensatz null. Wenn die Daten während der Codierung nicht geschrieben werden können, wird das gesamte Feld mit Null-Byten gefüllt.

Gib ein leeres JSON-Objekt wie unten angegeben an:

JSON-Darstellung
{
}

Byte

Ignoriere die Modifikatorkette und behandle die Daten als Rohbytes. Sie können diesen Modifikator auf Felder beliebiger Größe anwenden.

Gib ein leeres JSON-Objekt an:

JSON-Darstellung
{
}

VarLen

Stellt ein Feld mit variabler Länge dar.

Ein Feld mit variabler Länge besteht aus drei Teilen:

  1. Ein Gruppenelement mit zwei untergeordneten Feldern.
  2. Ein Feld innerhalb des Gruppenelements, das die Länge der Transaktionsdaten enthält.
  3. Ein Feld innerhalb des Gruppenelements, das die Daten enthält.

Der Name des Felds mit variabler Länge ist der Gruppenname.

Gib ein leeres JSON-Objekt an:

JSON-Darstellung
{
}

String

Hier werden die verschiedenen Optionen für die String-Dekodierung und -Codierung festgelegt. Kann nur auf ein Stringfeld angewendet werden.

JSON-Darstellung
{
    "encoding": string,
    "trim_suffix": boolean,
    "pad_char": string
}
Felder
encoding

string

Die Codierung, mit der das Feld codiert ist.

trim_suffix

boolean

Wenn dieser Wert auf „wahr“ gesetzt ist, werden alle Leerzeichen am Ende des Strings entfernt. „trim_suffix“ wirkt sich nur auf die Dekodierung aus. Bei der Codierung wird „trim_suffix“ ignoriert. Strings, die nur aus Leerzeichen bestehen, werden zu leeren Strings.

pad_char

string

Wenn Sie Exportstrings mit pad_char ausfüllen Wenn dieser Wert festgelegt wird, muss die Länge von pad_char 1 betragen. „pad_char“ wirkt sich nur auf die Codierung aus. Bei der Dekodierung wird „pad_char“ ignoriert.

NullIfEmpty

Das Feld sollte auf „null“ gesetzt werden, wenn alle Bytes in diesem Feld „0“ sind.

Gib ein leeres JSON-Objekt an:

JSON-Darstellung
{
}

FormatTimestamp

Formatieren Sie einen String mit einem der bereitgestellten Formate in einen Zeitstempel. Dies kann nur auf Felder mit Größe angewendet werden. Beim Dekodieren werden die Formate der Reihe nach getestet, bis eines der Formate mit dem String übereinstimmt. Beim Codieren wird das erste Format verwendet und der Rest ignoriert.

JSON-Darstellung
{
    "formats": object (DateTimeFormat)
}
Felder
formats

object (DateTimeFormat)

Liste der Zeitstempelformate.

HFP

Legen Sie für dieses Feld „Hexadezimaler Gleitkommawert“ fest.

Gib ein leeres JSON-Objekt an:

JSON-Darstellung
{
}

DateTimeFormat

Größe und Muster, die beim Konvertieren des Felds in ein Datum verwendet werden sollen.

JSON-Darstellung
{
    "size": int,
    "pattern": string
}
Felder
size

int

Geben Sie die Größe des Felds an, auf das dieses Muster angewendet werden soll.

pattern

string

Muster für die Datumsformatierung. Weitere Informationen zu gültigen Formatierungsmustern finden Sie unter Klasse DateTimeFormatter.

BinarySignedness

Logischer Typ für ein Dezimalfeld.

Enums
UNSPECIFIED Verwenden Sie den optimalen Typ basierend auf Skalierung und Genauigkeit.
SIGNED Verwenden Sie 64 Bit, um den Wert zu speichern. Dieser Modifikator funktioniert nur für Zahlen mit einer Genauigkeit von maximal 18 Stellen und einer Skala von 0.
UNSIGNED Verwenden Sie 64 Bit, um den Wert zu speichern. Dieser Modifikator funktioniert nur für Zahlen mit einer Genauigkeit von maximal 18.

DecimalLogicalType

Logischer Typ für ein Dezimalfeld.

Enums
AUTO Verwenden Sie den optimalen Typ basierend auf Skalierung und Genauigkeit.
LONG Verwenden Sie 64 Bit, um den Wert zu speichern. Dieser Modifikator funktioniert nur für Zahlen mit einer Genauigkeit von maximal 18 Stellen und einer Skala von 0.
DECIMAL64 Verwenden Sie 64 Bit, um den Wert zu speichern. Dieser Modifikator funktioniert nur für Zahlen mit einer Genauigkeit von maximal 18.
BIG_DECIMAL Speichern Sie den Wert als Dezimalwert mit unbegrenzter Nachkommastelle. Dies ist die langsamste Option, unterstützt aber beliebige Dezimalstellen mit beliebiger Genauigkeit in beliebigem Maßstab.
BIG_INTEGER Speichern Sie den Wert als unbegrenzte Ganzzahl. Dies ist die langsamste Option, unterstützt aber beliebige Ganzzahlen mit beliebiger Genauigkeit.

ZonedDecimalEncoding

Geben Sie die Codierung an, die beim Decodieren oder Codieren eines dezimalen Felds mit Zeitzone verwendet werden soll.

Enums
UNSPECIFIED Behalten Sie die in der Modifikatorkette angegebene Codierung bei. Wenn kein Modifikator angegeben wurde, wird EBCDIC verwendet.
EBCDIC Verwenden Sie die EBCDIC-Codierung.
ASCII Verwenden Sie die ASCII-Codierung.

SchemaValidationMode

Der Schemavalidierungsmodus, der bei der Zusammenstellung des Copybooks verwendet wird. Dieser Modus sorgt für Kompatibilität mit einem bestimmten Zieldatenformat.

Enums
DEFAULT Standardmodus für die Schemaüberprüfung. In diesem Modus sind die Feldnamen innerhalb des Copybooks eindeutig.
BIG_QUERY Schemavalidierungsmodus für die BigQuery-Kompatibilität. In diesem Modus wird die Standardvalidierung erweitert, um sicherzustellen, dass das Schema des Kopiebuchs mit den Datentypen von BigQuery kompatibel ist.