Configuración del transcodificador

Para configurar el transcodificador de Mainframe Connector, agrega la configuración requerida en un archivo JSON. Este archivo se conoce como archivo de configuración del transcodificador. Debes definir la configuración como se especifica en la sección Configuración. Los comandos qsam encode y qsam decode usan el archivo de configuración del transcodificador para realizar la transcodificación de datos.

En esta página, se describen las diversas formas en que puedes configurar el transcodificador de Mainframe Connector.

Configuración

El objeto Configuration es la raíz de la configuración del transcodificador. Contiene todas las opciones de configuración del transcodificador.

Representación JSON
{
    "defaults": object (DefaultsSection),
    "field_suffixes": object (FieldSuffix),
    "field_overrides": object (FieldOverride),
    "transformations": object (Transformation),
    "schema_validation_mode": enum (SchemaValidationMode)
}
Campos
defaults

object (DefaultsSection)

Especifica modificadores de campo predeterminados para arquetipos de Cobol.

field_suffixes

object (FieldSuffix)

Especifica los sufijos de campo.

field_overrides

object (FieldOverride)

Especifica anulaciones de campo.

transformations

object (Transformation)

Especifica las transformaciones de campo.

schema_validation_mode

enum (SchemaValidationMode)

Especifica el modo de validación del esquema.

DefaultsSection

El objeto DefaultsSection se puede usar para especificar modificaciones predeterminadas por tipos de cobol. Se aplican antes de cualquier modificación de sufijo o anulación.

Representación 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)
}
Campos
alpha_numeric_display

object (FieldModifier)

Especifica los valores predeterminados para los campos alfanuméricos (PIC X).

numeric_display

object (FieldModifier)

Especifica los valores predeterminados para los campos de visualización numérica (decimal con zona).

binary

object (FieldModifier)

Especifica los valores predeterminados para los campos de número binario (COMP).

packed_decimal

object (FieldModifier)

Especifica los valores predeterminados para los campos decimales empaquetados (COMP-3).

national

object (FieldModifier)

Especifica los valores predeterminados para los campos nacionales (PIC N).

utf8

object (FieldModifier)

Especifica los valores predeterminados para los campos UTF-8 (PIC U).

dbcs

object (FieldModifier)

Es el valor predeterminado para los campos dbcs (DISPLAY-1).

hexadecimal_floating_point

object (FieldModifier)

Es el valor predeterminado para los campos de punto flotante hexadecimal (COMP-1 y COMP-2).

FieldSuffix

Los sufijos de campo se aplican a todos los campos que tienen un sufijo.

Los campos coinciden si terminan con un guion (-) o guion bajo (_) seguido del sufijo.

Los sufijos no distinguen mayúsculas de minúsculas.

El modificador FieldSuffix se aplica después del modificador FieldOverride.

Por ejemplo, el modificador definido para el sufijo NID se aplicará al campo llamado FLD-NID, pero no al campo FUNID.

Representación JSON
{
    "suffix": string,
    "is_inverse": boolean,
    "modifier": object (FieldModifier)
}
Campos
suffix

string

Se aplicará el modificador al campo con este sufijo.

is_inverse

boolean

Especifica si el modificador es un modificador de campo inverso o no. Un modificador de campo inverso aplica el modificador en otro campo que tiene el mismo nombre que el campo con el modificador sin el modificador. Por ejemplo, si los campos FLD-NID y FLD existen en el mismo registro, el modificador se aplicará a FLD.

Cuando se usa un modificador de campo inverso, el identificador especial $self se puede usar cada vez que un nombre de campo se puede usar de forma tradicional para hacer referencia al campo con el sufijo.

Por ejemplo, para crear un campo de indicador nulo, puedes usar el modificador de campo null_if con is_inverse establecido en true. Consulta NullIf para obtener más información.

modifier

object (FieldModifier)

Especifica el modificador que se aplicará a los campos coincidentes.

FieldOverride

Anula o modifica la cadena de decodificación y codificación del campo especificado.

Representación JSON
{
    "field": string,
    "modifier": object (FieldModifier)
}
Campos
field

string

Especifica el nombre del campo al que se aplicará el modificador.

modifier

object (FieldModifier)

Especifica el modificador que se aplicará al campo coincidente.

Transformación

Las transformaciones de vista se usan para modificar la relación entre la tabla y el archivo QSAM. Las transformaciones siempre se formulan desde el punto de vista de los datos. El concepto es similar a las tablas de vistas en BigQuery.

Representación JSON
{
    "exclude": object (Exclude),
    "unnest": object (Unnest),
    "move": object (Move),
    "rename": object (Rename)
}
Campos
exclude

object (Exclude)

unnest

object (Unnest)

move

object (Move)

rename

object (Rename)

FieldModifier

Un modificador de campo te permite modificar la codificación o decodificación de un campo específico. Ten en cuenta que no todos los modificadores se pueden aplicar a todos los campos. Consulta la documentación de los modificadores específicos para obtener más información.

Representación 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)
}
Campos
filler

object (Filler)

Ignora y excluye el campo.

null_if

object (NullIf)

Establece el valor del campo subyacente en nulo en una condición.

format_date

object (FormatDate)

Dale formato a un campo de cadena como fecha.

chain

object (ModifierChain)

Encadena varios modificadores.

zoned_decimal

object (ZonedDecimal)

Anula la configuración decimal del campo con zona.

binary

object (Binary)

Anula la configuración del campo binario.

packed_decimal

object (PackedDecimal)

Anula la configuración del campo decimal empaquetado.

null_if_invalid

object (NullIfInvalid)

Establece el campo como nulo en lugar de volcar la línea en caso de error.

bytes

object (Bytes)

Anula el campo de bytes.

varlen

object (VarLen)

Establece el registro como un campo de longitud variable.

string

object (String)

Anula la configuración del campo de cadena.

null_if_empty

object (NullIfEmpty)

Establece el valor del campo subyacente como nulo si está vacío.

format_timestamp

object (FormatTimestamp)

Dale formato a un campo de cadena como marca de tiempo.

hfp

object (HFP)

Establece este campo en un número de punto flotante hexadecimal.

Excluir

Excluye un campo de la tabla resultante, pero sigue realizando la decodificación o codificación. Esto es útil cuando el campo no necesita transferirse a la tabla, pero es obligatorio para la transcodificación. Por ejemplo, se pueden omitir los campos de indicador nulo o de longitud de la tabla.

Para omitir la transcodificación por completo, aplica el modificador de relleno.

Representación JSON
{
    "field": string
}
Campos
field

string

Especifica el campo que quieres excluir.

Desanidar

Desanidar el campo

Representación JSON
{
    "field": string,
    "format": string
}
Campos
field

string

Especifica el campo que deseas desenlazar.

format

string

Especifica el formato del campo nuevo.

Se liberará el ${parent} con el nombre del campo que se desanida.

En el caso de las estructuras no anidadas, ${field} se reemplaza por el nombre del campo de estructuras.

En el caso de los arrays y las listas no anidados, ${index} se reemplaza por los índices del array.

Mover

Mover un campo en el registro

Representación JSON
{
    "field": string,
    "offset": int
}
Campos
field

string

Especifica el campo que quieres mover.

offset

int

Especifica la cantidad de posiciones hacia adelante o hacia atrás a las que se debe mover el campo.

Cambiar nombre

Cambia el nombre de uno o más campos en función de una coincidencia de expresión regular.

Por ejemplo, para reemplazar todos los guiones por guiones bajos, usa el siguiente formato JSON: {"find": "\\-", "replace":"_"}.

Representación JSON
{
    "find": string,
    "replace": string
}
Campos
find

string

Especifica un patrón de expresión regular de Java para identificar los campos a los que se les cambiará el nombre.

El patrón se compara con el nombre completo del campo. Si el patrón coincide con cualquier parte del nombre del campo, este se considera una coincidencia.

Ejemplos:

  • "\\-" (coincide con cualquier campo que contenga un guion)
  • "^field_name$" (hace coincidir los campos con el nombre exacto field_name)
  • "^field_(.*)$" (coincide con cualquier campo que comience con field_ y captura el resto)
  • "part_of_name" (coincide con cualquier campo que contenga part_of_name)

replace

string

Especifica el nombre nuevo para los campos que coinciden.

Los grupos de captura de la expresión regular find se pueden usar en la cadena replace con referencias inversas como $1, $2. Esto permite realizar transformaciones más complejas basadas en partes del nombre del campo original.

Ejemplos:

  • "new_field_name" (reemplaza el campo por un nombre fijo)
  • "new_$1" (usa el primer grupo de captura de find)
  • "${1}_new" (sintaxis alternativa para grupos de captura)
  • "prefix_$1_suffix" (usa un grupo de captura y agrega prefijos o sufijos)

Relleno

Especifica que un campo no se decodificará ni codificará. Además, también se excluirá de la tabla resultante durante el proceso de decodificación. Puedes aplicar este modificador a cualquier campo con un tamaño conocido.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

NullIf

Establece un campo como nulo si se cumple una condición. Debes especificar null_value o non_null_value, o ambos.

Para crear un campo de indicador nulo, puedes usar un FieldSuffix con un modificador de campo null_if y establecer is_inverse en true, como se muestra en los siguientes ejemplos:

Ejemplo: Null-indicator

Para crear un campo de indicador nulo, podemos usar el modificador de campo null_if de la siguiente manera.

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

Esto permite que todos los campos con el sufijo NID sean indicadores nulos, como se muestra en el siguiente fragmento de libro de copia:

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

Ejemplo: Indicador nulo binario

Para crear un campo de indicador nulo binary, podemos usar los modificadores de campo binary y null_if de la siguiente manera.

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

Esto permite que todos los campos con el sufijo NID sean indicadores nulos binary de manera efectiva con el mismo libro de copia del ejemplo anterior.

Ejemplo: Indicador nulo de bytes

Para crear un campo de indicador nulo bytes, podemos usar los modificadores de campo bytes y null_if de la siguiente manera. Los valores para nulo y no nulo se expresan como HEX.

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

Esto permite que todos los campos con el sufijo NID sean, de manera efectiva, un indicador nulo bytes con el mismo libro de copia del ejemplo anterior.

Representación JSON
{
    "target_field": string,
    "null_value": string,
    "non_null_value": string
}
Campos
target_field

string

Especifica el campo cuyo valor deseas verificar. El campo debe estar dentro del alcance.

null_value

string

Cuando se especifica, si target_field es igual a este valor, el campo no se decodifica ni se codifica, y el valor se establece en nulo.

non_null_value

string

Cuando se especifica, si target_field no es igual a este valor, el campo no se decodifica ni se codifica, y el valor se establece en nulo.

FormatDate

Convierte una cadena en una fecha con uno de los formatos admitidos. Solo puedes aplicar este modificador a campos de tamaño. Durante el proceso de decodificación, los formatos se prueban en orden hasta que uno de ellos coincide con la cadena. Durante el proceso de codificación, se usa el primer formato y se ignora el resto.

Representación JSON
{
    "formats": object (DateTimeFormat)
}
Campos
formats

object (DateTimeFormat)

Es una lista de formatos de fecha.

ModifierChain

Especifica una cadena de modificadores para aplicar varios modificadores en serie. Los modificadores se aplican en el orden en que se especifican.

Representación JSON
{
    "modifiers": object (FieldModifier)
}
Campos
modifiers

object (FieldModifier)

Especifica la lista de modificadores que se aplicarán.

ZonedDecimal

Establece varias opciones relacionadas con la codificación y decodificación de decimales con zona. Solo puedes aplicar este modificador en un campo decimal.

Representación JSON
{
    "logical_type": enum (DecimalLogicalType),
    "encoding": enum (ZonedDecimalEncoding)
}
Campos
logical_type

enum (DecimalLogicalType)

Especifica el tipo lógico que se usará cuando se decodifique o codifique el campo.

encoding

enum (ZonedDecimalEncoding)

Es la codificación con la que se codifica el campo.

Objeto binario

Ignora los modificadores anteriores y trata este campo como un número binario.

Representación JSON
{
    "signedness": enum (BinarySignedness)
}
Campos
signedness

enum (BinarySignedness)

El signo del número.

PackedDecimal

Establece este campo en un PackedDecimal.

Representación JSON
{
    "logical_type": enum (DecimalLogicalType)
}
Campos
logical_type

enum (DecimalLogicalType)

Anula el tipo lógico. De forma predeterminada, el conector de Mainframe usa el tipo lógico óptimo según la precisión y el escalamiento.

NullIfInvalid

Trata el valor como nulo si la transcodificación falla. Solo puedes aplicar este modificador a campos de tamaño. El error se ignora y no se registra en el conjunto de datos de desbordamiento. Durante el proceso de decodificación, el valor de este campo será nulo para este registro. Durante el proceso de codificación, si no se pueden escribir los datos, todo el campo se completará con bytes nulos.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

Bytes

Ignora la cadena de modificadores y trata los datos como bytes sin procesar. Puedes aplicar este modificador a cualquier campo de tamaño.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

VarLen

Representa un campo de longitud variable.

Un campo de longitud variable contiene tres partes:

  1. Es un elemento de grupo que contiene dos subcampos.
  2. Es un campo dentro del elemento del grupo que contiene la longitud de los datos de la transacción.
  3. Es un campo dentro del elemento del grupo que contiene los datos.

El nombre del campo de longitud variable será el nombre del grupo.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

String

Establece las diversas opciones relacionadas con la decodificación y codificación de cadenas. Solo se puede aplicar en un campo de cadena.

Representación JSON
{
    "encoding": string,
    "trim_suffix": boolean,
    "pad_char": string
}
Campos
encoding

string

Es la codificación con la que se codifica el campo.

trim_suffix

boolean

Cuando se establece como verdadero, se recortan los espacios en blanco al final de la cadena. trim_suffix solo afecta a la decodificación, la codificación ignora trim_suffix. Ten en cuenta que las cadenas que solo consisten en espacios en blanco se convertirán en cadenas vacías.

pad_char

string

Cuando se establecen cadenas de exportación de padding con pad_char. Si se establece, la longitud de pad_char debe ser 1. pad_char solo afecta la codificación, la decodificación ignora pad_char.

NullIfEmpty

El campo debe establecerse como nulo si todos los bytes de ese campo son 0.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

FormatTimestamp

Convierte una cadena en una marca de tiempo con uno de los formatos proporcionados. Esto solo se puede aplicar a campos de tamaño. Durante la decodificación, los formatos se prueban en orden hasta que uno de ellos coincide con la cadena. Durante la codificación, se usará el primer formato y se ignorará el resto.

Representación JSON
{
    "formats": object (DateTimeFormat)
}
Campos
formats

object (DateTimeFormat)

Es una lista de formatos de marca de tiempo.

HFP

Establece este campo como Número de punto flotante hexadecimal.

Proporciona un objeto JSON vacío de la siguiente manera:

Representación JSON
{
}

DateTimeFormat

Es el tamaño y el patrón que se usarán cuando se convierta el campo en una fecha.

Representación JSON
{
    "size": int,
    "pattern": string
}
Campos
size

int

Especifica el tamaño del campo al que se aplica este patrón.

pattern

string

Es el patrón del formato de fecha. Para obtener más información sobre los patrones de formato válidos, consulta Clase DateTimeFormatter.

BinarySignedness

Es el tipo lógico que se usará para un campo decimal.

Enums
UNSPECIFIED Usa el tipo más óptimo según la escala y la precisión.
SIGNED Usa 64 bits para almacenar el valor. Este modificador solo funciona para números cuya precisión sea menor o igual a 18 y la escala sea 0.
UNSIGNED Usa 64 bits para almacenar el valor. Este modificador solo funciona para números cuya precisión sea inferior o igual a 18.

DecimalLogicalType

Es el tipo lógico que se usará para un campo decimal.

Enums
AUTO Usa el tipo más óptimo según la escala y la precisión.
LONG Usa 64 bits para almacenar el valor. Este modificador solo funciona para números cuya precisión sea menor o igual a 18 y la escala sea 0.
DECIMAL64 Usa 64 bits para almacenar el valor. Este modificador solo funciona para números cuya precisión sea inferior o igual a 18.
BIG_DECIMAL Almacena el valor como un valor decimal ilimitado. Esta es la opción más lenta, pero admite cualquier decimal de cualquier precisión a cualquier escala.
BIG_INTEGER Almacena el valor como un número entero sin límites. Esta es la opción más lenta, pero admite cualquier número entero de cualquier precisión.

ZonedDecimalEncoding

Especifica la codificación que se usará cuando se decodifique o codifique un campo decimal con zona.

Enums
UNSPECIFIED Mantén la codificación que se especificó en la cadena de modificadores. Si no se especifica ningún modificador, se usa EBCDIC.
EBCDIC Usa la codificación EBCDIC.
ASCII Usa la codificación ASCII.

SchemaValidationMode

Es el modo de validación de esquemas que se usa durante la compilación del libro de copia. Este modo garantiza la compatibilidad con un formato de datos de destino específico.

Enums
DEFAULT Es el modo de validación de esquemas predeterminado. Este modo garantiza que los nombres de los campos sean únicos dentro del libro de copia.
BIG_QUERY Modo de validación de esquemas para la compatibilidad con BigQuery. Este modo extiende la validación predeterminada para garantizar que el esquema del libro de copia sea compatible con los tipos de datos de BigQuery.