Configurazione del transcoder

Puoi configurare il transcoder del connettore mainframe aggiungendo la configurazione richiesta in un file JSON. Questo file è chiamato file di configurazione del transcoder. Devi definire la configurazione come specificato nella sezione Configurazione. I comandi qsam encode e qsam decode utilizzano il file di configurazione del transcoder per eseguire la transcodifica dei dati.

Questa pagina descrive i vari modi in cui puoi configurare il transcoder Mainframe Connector.

Configurazione

L'oggetto Configuration è la radice della configurazione del transcoder. Contiene tutte le opzioni di configurazione per il transcoder.

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

object (DefaultsSection)

Specifica i modificatori di campo predefiniti per gli archetipi Cobol.

field_suffixes

object (FieldSuffix)

Specifica i suffissi dei campi.

field_overrides

object (FieldOverride)

Specifica gli override dei campi.

transformations

object (Transformation)

Specifica le trasformazioni dei campi.

schema_validation_mode

enum (SchemaValidationMode)

Specifica la modalità di convalida dello schema.

DefaultsSection

L'oggetto DefaultsSection può essere utilizzato per specificare le modifiche predefinite in base ai tipi di COBOL. Vengono applicati prima di eventuali modifiche ai suffissi o alle sostituzioni.

Rappresentazione JSON
{
    "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)
}
Campi
alpha_numeric_display

object (FieldModifier)

Specifica i valori predefiniti per i campi alfanumerici (PIC X).

numeric_display

object (FieldModifier)

Specifica i valori predefiniti per la visualizzazione numerica (decimale con zona) dei campi.

binary

object (FieldModifier)

Specifica i valori predefiniti per i campi di numeri binari (COMP).

packed_decimal

object (FieldModifier)

Specifica i valori predefiniti per i campi decimali compressi (COMP-3).

national

object (FieldModifier)

Specifica i valori predefiniti per i campi nazionali (PIC N).

utf8

object (FieldModifier)

Specifica i valori predefiniti per i campi UTF-8 (PIC U).

dbcs

object (FieldModifier)

Valore predefinito per i campi dbcs (DISPLAY-1).

hexadecimal_floating_point

object (FieldModifier)

Valore predefinito per i campi con virgola mobile esadecimale (COMP-1, COMP-2).

FieldSuffix

I suffissi dei campi si applicano a tutti i campi che hanno un suffisso.

I campi vengono abbinati se terminano con un trattino (-) o un trattino basso (_) seguito dal suffisso.

I suffissi non fanno distinzione tra maiuscole e minuscole.

Il modificatore FieldSuffix viene applicato dopo il modificatore FieldOverride.

Ad esempio, il modificatore definito per il suffisso NID verrà applicato al campo FLD-NID, ma non al campo FUNID.

Rappresentazione JSON
{
    "suffix": string,
    "is_inverse": boolean,
    "modifier": object (FieldModifier)
}
Campi
suffix

string

Al campo con questo suffisso verrà applicato il modificatore.

is_inverse

boolean

Specifica se il modificatore è un modificatore di campo inverso. Un modificatore di campo inverso applica il modificatore a un altro campo che ha lo stesso nome del campo con il modificatore senza il modificatore. Ad esempio, se nello stesso record esistono entrambi i campi FLD-NID e FLD, il modificatore verrà applicato a FLD.

Quando si utilizza un modificatore di campo inverso, l'identificatore speciale $self può essere utilizzato ogni volta che un nome di campo può essere utilizzato tradizionalmente per fare riferimento al campo con il suffisso.

Ad esempio, per creare un campo indicatore di valore nullo, puoi utilizzare il modificatore di campo null_if con is_inverse impostato su true. Per ulteriori informazioni, consulta NullIf.

modifier

object (FieldModifier)

Specifica il modificatore da applicare ai campi corrispondenti.

FieldOverride

Sostituisci o modifica la catena di decodifica e codifica per il campo specificato.

Rappresentazione JSON
{
    "field": string,
    "modifier": object (FieldModifier)
}
Campi
field

string

Specifica il nome del campo a cui applicare il modificatore.

modifier

object (FieldModifier)

Specifica il modificatore da applicare al campo corrispondente.

Trasformazione

Le trasformazioni delle visualizzazioni vengono utilizzate per modificare la relazione tra la tabella e il file QSAM. Le trasformazioni vengono sempre formulate dal punto di vista dei dati. Il concetto è simile alle tabelle delle visualizzazioni in BigQuery.

Rappresentazione JSON
{
    "exclude": object (Exclude),
    "unnest": object (Unnest),
    "move": object (Move),
    "rename": object (Rename)
}
Campi
exclude

object (Exclude)

unnest

object (Unnest)

move

object (Move)

rename

object (Rename)

FieldModifier

Un modificatore di campo ti consente di modificare la codifica o la decodifica di un campo specifico. Tieni presente che non tutti i modificatori possono essere applicati a tutti i campi. Per ulteriori informazioni, consulta la documentazione relativa ai modificatori specifici.

Rappresentazione JSON
{
    "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),
    "decode_as_null": object (DecodeAsNull),
    "encode_null_as": object (EncodeNullAs)
}
Campi
filler

object (Filler)

Esclude il campo dall'elaborazione e dall'output.

null_if

object (NullIf)

Imposta il campo su null in base al valore di un altro campo.

format_date

object (FormatDate)

Formatta un campo di stringhe come data.

chain

object (ModifierChain)

Consente di concatenare più modificatori da applicare in sequenza.

zoned_decimal

object (ZonedDecimal)

Sostituisce la configurazione predefinita per i campi decimali con zona.

binary

object (Binary)

Sostituisce la configurazione predefinita per i campi numerici binari.

packed_decimal

object (PackedDecimal)

Sostituisce la configurazione predefinita per i campi decimali compressi.

null_if_invalid

object (NullIfInvalid)

Imposta il campo su null se si verifica un errore di transcodifica, impedendo lo spillover dei record.

bytes

object (Bytes)

Tratta il campo come una sequenza non elaborata di byte, ignorando le informazioni sul tipo precedenti.

varlen

object (VarLen)

Imposta il record come campo di lunghezza variabile.

string

object (String)

Sostituisce la configurazione predefinita per i campi di stringa.

null_if_empty

object (NullIfEmpty)

Imposta il campo su null se i relativi contenuti sono considerati vuoti.

format_timestamp

object (FormatTimestamp)

Formatta un campo di stringhe come timestamp.

hfp

object (HFP)

Interpreta il campo come numero esadecimale con virgola mobile.

decode_as_null

object (DecodeAsNull)

Definisce la modalità di decodifica dei valori null.

encode_null_as

object (EncodeNullAs)

Definisce la modalità di codifica dei valori null.

Escludi

Escludere un campo dalla tabella risultante, ma sottoporlo comunque a decodifica o codifica. Questo è utile quando il campo non deve essere trasferito alla tabella, ma è necessario per la transcodifica. Ad esempio, i campi indicatore di valore nullo o di lunghezza possono essere omessi dalla tabella.

Per bypassare del tutto la transcodifica, applica il modificatore di riempimento.

Rappresentazione JSON
{
    "field": string
}
Campi
field

string

Specifica il campo da escludere.

Unnest

Rimuovi la nidificazione del campo.

Rappresentazione JSON
{
    "field": string,
    "format": string
}
Campi
field

string

Specifica il campo da annullare l'annidamento

format

string

Specifica il nuovo formato del campo.

${parent} verrà rilasciato con il nome del campo non nidificato.

Per le strutture non nidificate, ${field} viene sostituito con il nome del campo delle strutture.

Per gli array e gli elenchi non nidificati, ${index} viene sostituito con gli indici dell'array.

Sposta

Sposta un campo nel record.

Rappresentazione JSON
{
    "field": string,
    "offset": int
}
Campi
field

string

Specifica il campo da spostare.

offset

int

Specifica il numero di posizioni, in avanti o indietro, in cui deve essere spostato il campo.

Rinomina

Rinomina uno o più campi in base a una corrispondenza con un'espressione regolare.

Ad esempio, per sostituire tutti i trattini con trattini bassi, utilizza il seguente formato JSON: {"find": "\\-", "replace":"_"}.

Rappresentazione JSON
{
    "find": string,
    "replace": string
}
Campi
find

string

Specifica un pattern di espressione regolare Java per identificare i campi da rinominare.

Il pattern viene confrontato con il nome completo del campo. Se il pattern corrisponde a qualsiasi parte del nome del campo, il campo è considerato una corrispondenza.

Esempi:

  • "\\-" (corrisponde a qualsiasi campo contenente un trattino)
  • "^field_name$" (corrisponde ai campi con il nome esatto field_name)
  • "^field_(.*)$" (corrisponde a qualsiasi campo che inizia con field_ e acquisisce il resto)
  • "part_of_name" (corrisponde a qualsiasi campo contenente part_of_name)

replace

string

Specifica il nuovo nome per i campi corrispondenti.

I gruppi di cattura dell'espressione regolare find possono essere utilizzati nella stringa replace utilizzando i riferimenti a ritroso come $1, $2. In questo modo, è possibile eseguire trasformazioni più complesse in base a parti del nome del campo originale.

Esempi:

  • "new_field_name" (sostituisce il campo con un nome fisso)
  • "new_$1" (utilizza il primo gruppo di acquisizione da find)
  • "${1}_new" (sintassi alternativa per i gruppi di cattura)
  • "prefix_$1_suffix" (utilizza un gruppo di cattura e aggiunge prefissi/suffissi)

Riempitivo

Specifica che un campo verrà ignorato durante l'elaborazione. Il campo non verrà decodificato dall'input o codificato per l'output e verrà escluso dallo schema e dalla tabella di dati risultanti durante la decodifica. Puoi applicare questo modificatore a qualsiasi campo con una dimensione nota e statica.

Fornisci un oggetto JSON vuoto come segue:

Rappresentazione JSON
{
}

NullIf

Imposta un campo su null se una condizione è soddisfatta. Devi specificare null_value o non_null_value o entrambi.

Per creare un campo indicatore di valori null, puoi utilizzare un FieldSuffix con un modificatore di campo null_if e impostare is_inverse su true, come mostrato negli esempi seguenti:

Esempio: indicatoreNull

Per creare un campo indicatore di valori null, possiamo utilizzare il modificatore di campo null_if come segue.

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

In questo modo, tutti i campi con il suffisso NID possono essere indicatori nulli, come mostrato nel seguente snippet del modello di copia:

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

Esempio: indicatore di valore nullo binario

Per creare un campo binary indicatore di valore nullo, possiamo utilizzare i modificatori di campo binary e null_if come segue.

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

In questo modo, tutti i campi con il suffisso NID possono essere indicatori di valori nulli binary utilizzando lo stesso modello di copia dell'esempio precedente.

Esempio: indicatore di valori nulli in byte

Per creare un campo di indicatore di valori null bytes, possiamo utilizzare i modificatori di campo bytes e null_if come segue. I valori per null e non null sono espressi come HEX.

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

In questo modo, tutti i campi con il suffisso NID possono essere effettivamente un indicatore di valore nullo bytes utilizzando lo stesso copybook dell'esempio precedente.

Rappresentazione JSON
{
    "target_field": string,
    "null_value": string,
    "null_values": string,
    "non_null_value": string,
    "non_null_values": string
}
Campi
target_field

string

Specifica il campo di cui vuoi controllare il valore. Il campo deve essere nell'ambito.

null_value

string

Se specificato, se target_field è uguale a questo valore, il campo non viene decodificato o codificato e il valore viene impostato su null.

null_values

string

Se specificato, se target_field è uguale a uno di questi valori, il campo non viene decodificato o codificato e il valore viene impostato su null.

non_null_value

string

Se specificato, se target_field non è uguale a questo valore, il campo non viene decodificato o codificato e il valore viene impostato su null.

non_null_values

string

Se specificato, se target_field non è uguale a nessuno di questi valori, il campo non viene decodificato o codificato e il valore viene impostato su null.

FormatDate

Formatta una stringa in una data utilizzando uno dei formati supportati. Puoi applicare questo modificatore solo ai campi con dimensioni. Durante il processo di decodifica, i formati vengono testati in ordine finché uno di questi non corrisponde alla stringa. Durante il processo di codifica, viene utilizzato il primo formato e gli altri vengono ignorati.

Rappresentazione JSON
{
    "formats": object (DateTimeFormat)
}
Campi
formats

object (DateTimeFormat)

Elenco dei formati di data.

ModifierChain

Specifica una catena di modificatori per applicare più modificatori in serie. I modificatori vengono applicati nell'ordine in cui sono specificati.

Rappresentazione JSON
{
    "modifiers": object (FieldModifier)
}
Campi
modifiers

object (FieldModifier)

Specifica l'elenco dei modificatori da applicare.

ZonedDecimal

Imposta varie opzioni relative alla codifica e alla decodifica dei decimali con zona. Puoi applicare questo modificatore solo a un campo decimale.

Rappresentazione JSON
{
    "logical_type": enum (DecimalLogicalType),
    "encoding": enum (ZonedDecimalEncoding)
}
Campi
logical_type

enum (DecimalLogicalType)

Specifica il tipo logico da utilizzare per decodificare o codificare il campo.

encoding

enum (ZonedDecimalEncoding)

La codifica con cui è codificato il campo.

Binario

Ignora eventuali modificatori precedenti e tratta questo campo come un numero binario.

Rappresentazione JSON
{
    "signedness": enum (BinarySignedness)
}
Campi
signedness

enum (BinarySignedness)

Il segno del numero.

PackedDecimal

Imposta questo campo su PackedDecimal.

Rappresentazione JSON
{
    "logical_type": enum (DecimalLogicalType)
}
Campi
logical_type

enum (DecimalLogicalType)

Sostituisci il tipo logico. Per impostazione predefinita, Mainframe Connector utilizza il tipo logico ottimale in base alla precisione e alla scala.

NullIfInvalid

Tratta il valore come null se la transcodifica non va a buon fine. Puoi applicare questo modificatore solo ai campi con dimensioni. L'errore viene ignorato e non viene registrato nel set di dati di overflow. Durante il processo di decodifica, il valore di questo campo sarà null per questo record. Durante il processo di codifica, se non è possibile scrivere i dati, l'intero campo verrà riempito con byte null.

Fornisci un oggetto JSON vuoto come segue:

Rappresentazione JSON
{
}

Byte

Tratta il campo come una sequenza non elaborata di byte. Questo modificatore sostituisce qualsiasi informazione precedente sul tipo, facendo sì che i dati in byte non elaborati del campo vengano conservati così come sono senza codifica di caratteri o interpretazione numerica specifica. Puoi applicare questo modificatore a qualsiasi campo, indipendentemente dal tipo o dalle dimensioni originali.

Fornisci un oggetto JSON vuoto come segue:

Rappresentazione JSON
{
}

VarLen

Rappresenta un campo di lunghezza variabile.

Un campo di lunghezza variabile contiene tre parti:

  1. Un elemento di gruppo contenente due sottocampi.
  2. Un campo all'interno dell'elemento del gruppo che contiene la lunghezza dei dati della transazione.
  3. Un campo all'interno dell'elemento del gruppo che contiene i dati.

Il nome del campo di lunghezza variabile sarà il nome del gruppo.

Fornisci un oggetto JSON vuoto come segue:

Rappresentazione JSON
{
}

Stringa

Imposta le varie opzioni relative alla decodifica e alla codifica delle stringhe. Può essere applicato solo a un campo di stringa.

Rappresentazione JSON
{
    "encoding": string,
    "trim_suffix": boolean,
    "pad_char": string
}
Campi
encoding

string

La codifica con cui è codificato il campo.

trim_suffix

boolean

Se impostato su true, gli spazi vuoti alla fine della stringa verranno tagliati. Il parametro trim_suffix influisce solo sulla decodifica, mentre la codifica ignora questo parametro. Tieni presente che le stringhe costituite solo da spazi diventeranno stringhe vuote.

pad_char

string

Quando imposti le stringhe di esportazione del riempimento con pad_char. Se impostato, la lunghezza di pad_char deve essere 1. Il carattere di riempimento influisce solo sulla codifica, mentre la decodifica lo ignora.

NullIfEmpty

Il campo deve essere impostato su null se tutti i byte del campo sono pari a 0.

Fornisci un oggetto JSON vuoto come segue:

Rappresentazione JSON
{
}

FormatTimestamp

Formatta una stringa in un timestamp utilizzando uno dei formati forniti. Questo può essere applicato solo ai campi con dimensioni. Durante la decodifica, i formati vengono testati in ordine finché uno di questi non corrisponde alla stringa. Durante la codifica, verrà utilizzato il primo formato e gli altri verranno ignorati.

Rappresentazione JSON
{
    "formats": object (DateTimeFormat)
}
Campi
formats

object (DateTimeFormat)

Elenco dei formati dei timestamp.

HFP

Imposta questo campo come virgola mobile esadecimale.

Fornisci un oggetto JSON vuoto come segue:

Rappresentazione JSON
{
}

DecodeAsNull

Definisce la modalità di interpretazione dei valori null durante il processo di decodifica. Poiché il COBOL non supporta in modo nativo i valori null, questo parametro specifica quali valori devono essere considerati null.

Rappresentazione JSON
{
    "values": string,
    "hex_bytes": string
}
Campi
values

string

Un elenco di rappresentazioni di stringhe. Dopo la decodifica iniziale del campo nella forma di stringa, se i contenuti del campo corrispondono a uno di questi valori, verranno considerati null.

hex_bytes

string

Un elenco di rappresentazioni esadecimali di un singolo byte. Quando un campo contiene ripetizioni di uno di questi byte, viene considerato nullo. Ad esempio, utilizza FF per tutti i valori massimi e 00 per tutti i valori minimi (vuoto).

EncodeNullAs

Definisce la modalità di rappresentazione dei valori null durante il processo di codifica.

Rappresentazione JSON
{
    "value": string,
    "hex_byte": string
}
Campi
value

string

Codifica questo valore specifico quando il valore di origine è null. Verifica che la stringa sia valida per il tipo di campo.

hex_byte

string

Codifica questa sequenza di byte specifica (rappresentata come stringa esadecimale) quando il valore di origine è null. Ad esempio, FF per un campo di due byte con valori elevati. Puoi applicarlo a qualsiasi campo con una dimensione nota. I byte vengono ripetuti in modo da corrispondere alle dimensioni del campo sottostante.

DateTimeFormat

Dimensioni e pattern da utilizzare per convertire il campo in una data.

Rappresentazione JSON
{
    "size": int,
    "pattern": string
}
Campi
size

int

Specifica le dimensioni del campo a cui si applica questo pattern.

pattern

string

Specifica il pattern del formato della data. Per ulteriori informazioni sui pattern di formattazione validi, consulta la classe DateTimeFormatter.

BinarySignedness

Tipo logico da utilizzare per un campo decimale.

Enum
UNSPECIFIED Utilizza il tipo più ottimale in base alla scala e alla precisione.
SIGNED Utilizza 64 bit per memorizzare il valore. Questo modificatore funziona solo per i numeri la cui precisione è inferiore o uguale a 18 e la scala è 0.
UNSIGNED Utilizza 64 bit per memorizzare il valore. Questo modificatore funziona solo per i numeri la cui precisione è minore o uguale a 18.

SchemaValidationMode

Specifica la modalità di convalida dello schema da utilizzare durante la compilazione del modello. Questa modalità verifica la compatibilità con un formato di dati di destinazione specifico.

Enum
DEFAULT Modalità di convalida dello schema predefinita. Questa modalità verifica che i nomi dei campi univoci siano presenti nel modello.
BIG_QUERY Modalità di convalida dello schema per la compatibilità con BigQuery. Questa modalità estende la convalida predefinita per verificare che lo schema del copybook sia compatibile con i tipi di dati di BigQuery.

ZonedDecimalEncoding

Specifica la codifica da utilizzare per decodificare o codificare un campo decimale a zone.

Enum
UNSPECIFIED Mantieni la codifica specificata nella catena di modificatori. Se non viene specificato alcun modificatore, viene utilizzato EBCDIC.
EBCDIC Utilizza la codifica EBCDIC.
ASCII Utilizza la codifica ASCII.

DecimalLogicalType

Tipo logico da utilizzare per un campo decimale.

Enum
AUTO Utilizza il tipo più ottimale in base alla scala e alla precisione.
LONG Utilizza 64 bit per memorizzare il valore. Questo modificatore funziona solo per i numeri la cui precisione è inferiore o uguale a 18 e la scala è 0.
DECIMAL64 Utilizza 64 bit per memorizzare il valore. Questo modificatore funziona solo per i numeri la cui precisione è minore o uguale a 18.
BIG_DECIMAL Memorizza il valore come valore decimale illimitato. Questa è l'opzione più lenta, ma supporta qualsiasi numero decimale di qualsiasi precisione a qualsiasi scala.
BIG_INTEGER Memorizza il valore come valore intero illimitato. Questa è l'opzione più lenta, ma supporta qualsiasi numero intero di qualsiasi precisione.