Puedes configurar el transcodificador de Mainframe Connector agregando 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 distintas 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 ( |
| Campos | |
|---|---|
defaults |
Especifica modificadores de campo predeterminados para arquetipos de Cobol. |
field_overrides |
Especifica anulaciones de campos. |
field_suffixes |
Especifica los sufijos de los campos. |
header_records_to_skip |
Especifica la cantidad de primeros registros que se omitirán. |
record_filter_condition |
Especifica una condición de filtro para los registros. El filtro se basa en un subconjunto de Common Expression Language (CEL) y admite lo siguiente:
Ejemplo:
|
schema_validation_mode |
Especifica el modo de validación del esquema. |
transformations |
Especifica las transformaciones de campo. |
DefaultsSection
El objeto DefaultsSection se puede usar para especificar modificaciones predeterminadas por tipos de Cobol.
Estos se aplican antes de cualquier modificación de sufijo o anulación.
| Representación JSON |
|---|
{ "alpha_numeric_display": object ( |
| Campos | |
|---|---|
alpha_numeric_display |
Especifica valores predeterminados para los campos alfanuméricos (PIC X). |
binary |
Especifica valores predeterminados para los campos de número binario (COMP). |
dbcs |
Es el valor predeterminado para los campos de DBCS (DISPLAY-1). |
hexadecimal_floating_point |
Es el valor predeterminado para los campos de punto flotante hexadecimal (COMP-1, COMP-2). |
national |
Especifica valores predeterminados para los campos nacionales (PIC N). |
numeric_display |
Especifica los valores predeterminados para los campos de visualización numérica (decimales zonificados). |
packed_decimal |
Especifica valores predeterminados para los campos decimales empaquetados (COMP-3). |
utf8 |
Especifica valores predeterminados para los campos UTF-8 (PIC U). |
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 |
|---|
{ "binary": object ( |
| Campos | |
|---|---|
binary |
Anula la configuración predeterminada para los campos numéricos binarios. |
bytes |
Trata el campo como una secuencia sin procesar de bytes, ignorando la información del tipo anterior. |
chain |
Encadena varios modificadores para que se apliquen de forma secuencial. |
decode_as_null |
Define cómo se deben decodificar los valores nulos. |
encode_null_as |
Define cómo se deben codificar los valores nulos. |
filler |
Excluye el campo del procesamiento y el resultado. |
format_date |
Da formato a un campo de cadena como una fecha. |
format_timestamp |
Da formato a un campo de cadena como una marca de tiempo. |
hfp |
Interpreta el campo como un número hexadecimal de punto flotante (HFP). |
null_if |
Establece el campo como nulo de forma condicional según el valor de otro campo. |
null_if_empty |
Establece el campo como nulo si su contenido se considera vacío. |
null_if_invalid |
Establece el campo como nulo si se produce un error de transcodificación, lo que evita el desbordamiento de registros. |
packed_decimal |
Anula la configuración predeterminada para los campos decimales empaquetados. |
string |
Anula la configuración predeterminada para los campos de cadena. |
varlen |
Establece el registro como un campo de longitud variable. |
zoned_decimal |
Anula la configuración predeterminada para los campos decimales zonificados. |
Objeto binario
Ignora los modificadores anteriores y trata este campo como un número binario.
| Representación JSON |
|---|
{ "signedness": enum ( |
| Campos | |
|---|---|
signedness |
Indica si el número es con signo o sin signo. |
Bytes
Trata el campo como una secuencia de bytes sin procesar. Este modificador anula cualquier información de tipo anterior, lo que hace que los datos de bytes sin procesar del campo se conserven tal como están, sin una codificación de caracteres específica ni una interpretación numérica. Puedes aplicar este modificador a cualquier campo, independientemente de su tipo o tamaño original.
Proporciona un objeto JSON vacío de la siguiente manera:
| Representación JSON |
|---|
{ |
DecodeAsNull
Define cómo se interpretan los valores nulos durante el proceso de decodificación. Como COBOL no admite valores nulos de forma nativa, este parámetro especifica qué valores se deben tratar como nulos.
| Representación JSON |
|---|
{ "hex_bytes": string, "values": string |
| Campos | |
|---|---|
hex_bytes |
Es una lista de representaciones hexadecimales de un solo byte.
Cuando un campo contiene repeticiones de cualquiera de estos bytes, se trata como nulo.
Por ejemplo, usa |
values |
Es una lista de representaciones de cadenas. Después de la decodificación inicial del campo a su forma de cadena, si el contenido del campo coincide con alguno de estos valores, se tratará como nulo. |
EncodeNullAs
Define cómo se representan los valores nulos durante el proceso de codificación.
| Representación JSON |
|---|
{ "hex_byte": string, "value": string |
| Campos | |
|---|---|
hex_byte |
Codifica esta secuencia de bytes específica (representada como una cadena hexadecimal) cuando el valor de origen es nulo. Por ejemplo, |
value |
Codifica este valor específico cuando el valor de origen sea nulo. Verifica que la cadena sea válida para el tipo de campo. |
Relleno
Especifica que un campo se ignorará durante el procesamiento. El campo no se decodificará desde la entrada ni se codificará hacia la salida, y se excluirá del esquema y la tabla de datos resultantes durante la decodificación. Puedes aplicar este modificador a cualquier campo que tenga un tamaño conocido estático.
Proporciona un objeto JSON vacío de la siguiente manera:
| Representación JSON |
|---|
{ |
FormatDate
Aplica formato a un campo de cadena o numérico como fecha con uno de los formatos admitidos. Solo puedes aplicar este modificador a los campos con tamaño. En el caso de los campos numéricos, se convierten de forma dinámica a su representación de cadena (sin incluir ningún marcador de signo) antes del formato. Se supone que los valores de fecha son positivos; no se admiten las fechas numéricas negativas y no se podrán analizar. 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 ignoran los demás.
| Representación JSON |
|---|
{ "formats": object ( |
| Campos | |
|---|---|
formats |
Es la lista de formatos de fecha. |
DateTimeFormat
Tamaño y patrón que se usarán cuando se convierta el campo en una fecha.
| Representación JSON |
|---|
{ "pattern": string, "size": int |
| Campos | |
|---|---|
pattern |
Especifica el patrón del formateador de fechas. Para obtener más información sobre los patrones de formato válidos, consulta Clase DateTimeFormatter. |
size |
Especifica el tamaño del campo al que se aplica este patrón. |
FormatTimestamp
Da formato a una cadena como marca de tiempo con uno de los formatos proporcionados. Solo se puede aplicar a campos con 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án los demás.
| Representación JSON |
|---|
{ "formats": object ( |
| Campos | |
|---|---|
formats |
Es una lista de formatos de marcas de tiempo. |
HFP
Establece este campo como punto flotante hexadecimal.
Proporciona un objeto JSON vacío de la siguiente manera:
| Representación JSON |
|---|
{ |
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 ( |
| Campos | |
|---|---|
modifiers |
Especifica la lista de modificadores que se aplicarán. |
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 indicador de nulos, 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: Indicador nulo
Para crear un campo indicador de nulos, podemos usar el modificador de camponull_if de la siguiente manera.
{
"field_suffixes": [
{
"suffix": "NID",
"is_inverse": true,
"modifier": {
"null_if": {
"null_value": "?",
"target_field": "$self"
}
}
}
]
}
NID sean indicadores nulos de manera efectiva, como se muestra en el siguiente fragmento de copybook:
01 REC. 02 FIELD PIC X(10). 02 FIELD-NID PIC X(1).
Ejemplo: Indicador nulo binario
Para crear un campo indicador de nulosbinary, 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"
}
}
}
]
}
NID sean indicadores de nulos binary de manera efectiva con el mismo libro de copias del ejemplo anterior.
Ejemplo: Indicador de nulos de bytes
Para crear un campo indicador de nulosbytes, 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"
}
}
}
]
}
NID sean efectivamente un indicador de nulo bytes con el mismo libro de copias del ejemplo anterior.
| Representación JSON |
|---|
{ "non_null_value": string, "non_null_values": string, "null_value": string, "null_values": string, "target_field": string |
| Campos | |
|---|---|
non_null_value |
Cuando se especifica, si |
non_null_values |
Cuando se especifica, si |
null_value |
Cuando se especifica, si |
null_values |
Cuando se especifica, si |
target_field |
Especifica el campo cuyo valor deseas verificar. El campo debe estar dentro del alcance. Para acceder a los campos anidados, puedes usar la notación de puntos (p.ej., "GROUP.FIELD"). |
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 |
|---|
{ |
NullIfInvalid
Trata el valor como nulo si falla la transcodificación.
Solo puedes aplicar este modificador a los campos con tamaño.
De forma predeterminada, cuando un campo no se puede decodificar, todo el registro se mueve al conjunto de datos de desbordamiento (error) y se excluye de la salida, mientras que el resto de la carga se completa con los registros válidos.
Cuando configuras el modificador null_if_invalid, Mainframe Connector conserva el registro no válido y establece este campo como nulo.
Úsalo solo cuando quieras conservar esas filas con un valor nulo, no solo para que se realice la carga correctamente, ya que el valor predeterminado ya omite los registros incorrectos.
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 |
|---|
{ |
PackedDecimal
Establece este campo en un PackedDecimal.
| Representación JSON |
|---|
{ "logical_type": enum ( |
| Campos | |
|---|---|
logical_type |
Anula el tipo lógico. De forma predeterminada, Mainframe Connector usa el tipo lógico óptimo según la precisión y la escala. |
negative_sign_nibble |
Especifica el cuarteto que se usará para los signos negativos. Si bien x"B" y x"D" son signos negativos válidos, algunos sistemas o aplicaciones de mainframe pueden tener una convención que requiera uno sobre el otro. |
String
Establece las distintas opciones relacionadas con la decodificación y codificación de cadenas. Solo se puede aplicar a un campo de cadena.
| Representación JSON |
|---|
{ "encoding": string, "pad_char": string, "trim_suffix": boolean |
| Campos | |
|---|---|
encoding |
Es la codificación con la que se codifica el campo. |
pad_char |
Cuando se establecen cadenas de exportación de padding con |
trim_suffix |
Cuando se establece como verdadero, se quita cualquier espacio en blanco al final de la cadena. trim_suffix solo afecta la decodificación, la codificación ignora trim_suffix. Ten en cuenta que las cadenas que constan solo de espacios en blanco se convertirán en cadenas vacías. |
VarLen
Representa un campo de longitud variable.
Un campo de longitud variable contiene tres partes:
- Es un elemento de grupo que contiene dos subcampos.
- Es un campo dentro del elemento del grupo que contiene la longitud de los datos de la transacción.
- 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 |
|---|
{ |
ZonedDecimal
Establece varias opciones relacionadas con la codificación y decodificación de decimales zonificados. Solo puedes aplicar este modificador en un campo decimal.
| Representación JSON |
|---|
{ "encoding": enum ( |
| Campos | |
|---|---|
encoding |
Es la codificación con la que se codifica el campo. |
logical_type |
Especifica el tipo lógico que se usará cuando se decodifique o codifique el campo. |
FieldOverride
Anula o modifica la cadena de codificación y decodificación para el campo especificado.
| Representación JSON |
|---|
{ "field": string, "modifier": object ( |
| Campos | |
|---|---|
field |
Especifica el nombre del campo al que se aplicará el modificador. |
modifier |
Especifica el modificador que se aplicará al campo coincidente. |
FieldSuffix
Los sufijos de campo se aplican a todos los campos que tienen un sufijo.
Los campos coinciden si terminan con un guion (-) o un 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 |
|---|
{ "is_inverse": boolean, "modifier": object ( |
| Campos | |
|---|---|
is_inverse |
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, pero sin el modificador. Por ejemplo, si los campos Cuando se usa un modificador de campo inverso, se puede usar el identificador especial Por ejemplo, para crear un campo indicador de nulos, puedes usar el modificador de campo |
modifier |
Especifica el modificador que se aplicará a los campos coincidentes. |
suffix |
El campo con este sufijo tendrá el modificador aplicado. |
Transformación
Las transformaciones de vista se usan para modificar la relación entre la tabla y el archivo QSAM. Las transformaciones siempre se expresan desde el punto de vista de los datos. El concepto es similar al de las tablas de vistas en BigQuery.
| Representación JSON |
|---|
{ "exclude": object ( |
| Campos | |
|---|---|
exclude |
|
move |
|
rename |
|
split |
|
target_table |
Es opcional. Especifica el nombre de la tabla (vista) de destino a la que se aplicará la transformación. De forma predeterminada, las transformaciones se aplican a la tabla principal ( Nota: Las transformaciones de división no se pueden segmentar y generarán un error si se establece |
unnest |
|
Excluir
Excluye un campo de la tabla resultante, pero aún se somete a 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, los indicadores de nulos o los campos de longitud se pueden omitir de la tabla.
Para omitir la transcodificación por completo, aplica el modificador de relleno.
| Representación JSON |
|---|
{ "field": string |
| Campos | |
|---|---|
field |
Especifica el campo que se excluirá. |
Mover
Mueve un campo en el registro.
| Representación JSON |
|---|
{ "field": string, "offset": int |
| Campos | |
|---|---|
field |
Especifica el campo que se moverá. |
offset |
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 según 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 |
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 coincide con el nombre completo del campo. Si el patrón coincide con alguna parte del nombre del campo, se considera que el campo coincide. Ejemplos:
|
replace |
Especifica el nuevo nombre para los campos coincidentes. Los grupos de captura de la expresión regular Ejemplos:
|
Dividir
| Representación JSON |
|---|
{ "field": string, "foreign_key": string, "primary_key": string |
| Campos | |
|---|---|
field |
Especifica el campo que deseas dividir. |
foreign_key |
Especifica el nombre del campo que se agregará al esquema nuevo en el que se almacenará el valor de la clave principal. Si no se especifica, se usa el nombre de la clave principal. |
primary_key |
Especifica el nombre del campo que se usará como clave primaria. |
Unnest
Desanida el campo.
| Representación JSON |
|---|
{ "field": string, "format": string |
| Campos | |
|---|---|
field |
Especifica el campo que se desanidará |
format |
Especifica el nuevo formato del campo. El En el caso de los structs no anidados, En el caso de los arrays y las listas no anidados, |
Enums
BinarySignedness
| Enums | |
|---|---|
SIGNED |
El número binario está firmado. |
UNSIGNED |
El número binario no tiene signo. |
UNSPECIFIED |
Intenta deducir el signo a partir de la cadena de salida. |
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. |
BIG_DECIMAL |
Almacena el valor como un valor decimal sin límites. Esta es la opción más lenta, pero admite cualquier decimal de cualquier precisión en cualquier escala. |
BIG_INTEGER |
Almacena el valor como un valor entero sin límites. Esta es la opción más lenta, pero admite cualquier número entero de cualquier precisión. |
DECIMAL64 |
Usa 64 bits para almacenar el valor. Este modificador solo funciona para números cuya precisión sea menor o igual a 18. |
LONG |
Usa 64 bits para almacenar el valor. Este modificador solo funciona para números cuya precisión es menor o igual a 18 y la escala es 0. |
PackedDecimalNegativeNibble
| Enums | |
|---|---|
NIBBLE_B |
El valor predeterminado es x'B'. |
NIBBLE_D |
Usa x"D" para el nibble del signo negativo. |
SchemaValidationMode
Especifica el modo de validación del esquema que se usará durante la compilación del copybook. Este modo verifica la compatibilidad con un formato de datos de destino específico.
| Enums | |
|---|---|
BIG_QUERY |
Modo de validación de esquemas para la compatibilidad con BigQuery. Este modo extiende la validación predeterminada para verificar que el esquema del copybook sea compatible con los tipos de datos de BigQuery. |
DEFAULT |
Es el modo de validación de esquema predeterminado. Este modo verifica que los nombres de los campos únicos estén en el copybook. |
MYSQL |
Modo de validación de esquemas para la compatibilidad con MySQL. Este modo extiende la validación predeterminada para verificar que el esquema del copybook sea compatible con los tipos de datos de MySQL. |
POSTGRES |
Modo de validación de esquemas para la compatibilidad con PostgreSQL. Este modo extiende la validación predeterminada para verificar que el esquema del copybook sea compatible con los tipos de datos de PostgreSQL. |
ZonedDecimalEncoding
Especifica la codificación que se usará cuando se decodifique o codifique un campo decimal zonificado.
| Enums | |
|---|---|
ASCII |
Usa la codificación ASCII. |
EBCDIC |
Usa la codificación EBCDIC. |
UNSPECIFIED |
Conserva la codificación especificada en la cadena de modificadores.
Si no se especifica ningún modificador, se usa EBCDIC. |