Mainframe Connector transcodifica archivos planos de método de acceso secuencial en cola (QSAM) a Google Cloud formatos compatibles y viceversa mediante los comandos qsam
. Los comandos qsam
realizan las siguientes operaciones de transcodificación:
- El comando
qsam decode
decodifica los datos de mainframe en Google Cloud - El comando
qsam encode
codifica Google Cloud datos en el mainframe.
Estas operaciones realizan transformaciones simétricas, es decir, mueven los mismos datos hacia y desde Google Cloud. Puedes definir la estructura de un archivo QSAM en un archivo de libro de copias mediante la definición de estructura de datos de COBOL. También puedes definir transformaciones avanzadas con el archivo de configuración del transcodificador de Mainframe Connector. En los siguientes diagramas se describen estas operaciones en detalle.


En esta página se ofrece una descripción general del proceso de transcodificación mediante los comandos qsam decode
y qsam encode
, los tipos físicos y lógicos de datos de mainframe, y las asignaciones de tipos de Optimized Row Columnar (ORC) y BigQuery.
Tipos físicos
Los tipos físicos definen cómo se organizan los datos de los campos en un disco. Los tipos físicos se convierten en tipos lógicos de Mainframe Connector, que se pueden asignar a tipos de bases de datos (ORC o BigQuery).
Campos alfanuméricos
Los campos alfanuméricos se usan para procesar cadenas alfanuméricas. Los datos se tratan como una serie de caracteres y se almacenan como cadenas con una codificación específica, por ejemplo, el código de intercambio decimal codificado en binario extendido (EBCDIC).
El proceso de transcodificación no finaliza si se produce algún error durante la codificación o decodificación de campos alfanuméricos. En su lugar, se coloca un carácter SUB
para la codificación en la ubicación donde se ha producido el error
y el proceso de transcodificación continúa.
Símbolos de imágenes | Atributos de imagen | Tipo lógico |
---|---|---|
A, B, G, N, U, X, 9 | DISPLAY, DISPLAY-1, NATIONAL, UTF-8 | Cadena |
Ejemplo
01 REC 02 STR PIC X(10) 02 NATIONAL PIC N(10) 02 UTF8 PIC U(1) USAGE UTF-8
Formato de codificación
Los campos alfanuméricos se codifican de la siguiente manera:
- Los campos X tienen la codificación EBCDIC de forma predeterminada
- Los campos nacionales (N) tienen como valor predeterminado la codificación Unicode Transformation Format de 16 bits (UTF-16 BE).
- Los campos UTF8 tienen como valor predeterminado la codificación Unicode Transformation Format-8 (UTF-8).
Mainframe Connector admite la mayoría de las codificaciones de conjuntos de caracteres de un solo byte (SBCS) y de doble byte (DBCS). También puedes definir tu propia codificación SBCS personalizada, si es necesario.
Campos binarios (COMPUTACIONAL)
Los campos binarios se almacenan como números enteros big-endian con o sin signo. Mainframe Connector siempre almacena los campos binarios de forma lógica como enteros de 64 bits con signo. Por lo tanto, las entradas unsigned long solo deben usar los 63 bits inferiores. De lo contrario, el proceso de transcodificación fallará.
Símbolos de imágenes | Atributos de imagen | Tipo lógico |
---|---|---|
S, 9 | COMP, COMPUTATIONAL | Largo (entero con signo de 64 bits) |
Ejemplo
01 REC 02 INT PIC S9(8) COMP
Campos de punto flotante hexadecimal (COMP-1, COMP-2)
Los campos de punto flotante hexadecimal (HFP) se admiten completamente. Mainframe Connector usa formatos de precisión simple y doble para los campos HFP.
Símbolos de imágenes | Atributos de imagen | Tipo lógico |
---|---|---|
COMP-1, COMP-2 | Doble (punto flotante con signo de 64 bits) |
Ejemplo
01 REC 03 HFP-SINGLE COMP-1. 03 HFP-DOUBLE COMP-2.
Campos decimales empaquetados (COMP-3)
Los campos decimales empaquetados son totalmente compatibles. Durante el proceso de transcodificación, Mainframe Connector selecciona el tipo lógico con mejor rendimiento en función de la precisión y la escala especificadas.
Símbolos de imágenes | Atributos de imagen | Tipo lógico |
---|---|---|
S, 9 y V | COMP-3 | Largo (entero de 64 bits con signo), BigInteger, Decimal64 y BigDecimal |
Ejemplo
01 REC 02 DEC PIC S9(2)V9(8) COMP-3
Campo decimal zonificado (DISPLAY)
Los campos decimales zonificados son totalmente compatibles. Durante el proceso de transcodificación, Mainframe Connector selecciona el tipo lógico con mejor rendimiento en función de la precisión y la escala especificadas.
Símbolos de imágenes | Atributos de imagen | Tipo lógico |
---|---|---|
S, 9 y V | DISPLAY | Largo (entero de 64 bits con signo), BigInteger, Decimal64 y BigDecimal |
Ejemplo
01 REC 02 DEC PIC S9(2)V9(8) DISPLAY
Listas (OCCURS)
Las listas son colecciones ordenadas de elementos del mismo tipo. Mainframe Connector admite los siguientes tipos de listas:
Listas fijas
Las listas fijas se usan cuando se conoce de antemano el número exacto de elementos que formarán parte de la lista y este número siempre es el mismo. Los elementos de una lista fija pueden tener un tamaño variable.
Las listas fijas se definen de la siguiente manera en un copybook:
01 REC.
02 LIST OCCURS 5 TIMES PIC X(1).
02 FLD PIC X(5).
En la siguiente imagen se muestra el diseño de una lista fija con un recuento de elementos de 5.

Listas dinámicas
Las listas dinámicas se usan cuando se conoce de antemano el número máximo de elementos que formarán parte de la lista. Sin embargo, el recuento de elementos real se desconoce y depende de otro campo. Los elementos de una lista dinámica pueden tener un tamaño variable.
Las propiedades de las listas dinámicas son las siguientes:
- El campo de longitud se puede convertir en un número entero sin perder precisión.
- El campo de longitud debe estar en scope.
- No se aplica un número mínimo de elementos durante el proceso de transcodificación.
Las listas dinámicas se definen de la siguiente manera en un copybook:
01 REC.
02 LEN PIC S9(2) BINARY.
02 LIST OCCURS 1 TO 5 TIMES
DEPENDING ON LEN PIC X(1).
02 FLD PIC X(5).
En la siguiente imagen se muestra el diseño de una lista dinámica con un máximo de cinco elementos.

Listas dinámicas empaquetadas
Las listas dinámicas empaquetadas se usan cuando el número máximo de elementos que formarán parte de la lista depende de otro campo y los elementos están empaquetados.
Las propiedades de las listas dinámicas empaquetadas son las siguientes:
- El campo de longitud se puede convertir en un número entero sin perder precisión.
- El campo de longitud debe estar en scope.
- No se aplica un número mínimo de elementos durante el proceso de transcodificación.
Las listas dinámicas empaquetadas se definen de la siguiente manera en un copybook:
01 REC.
02 LEN PIC S9(2) BINARY.
02 LIST OCCURS UNBOUNDED
DEPENDING ON LEN PIC X(1).
02 FLD PIC X(5).
En la siguiente imagen se muestra el diseño de una lista dinámica empaquetada.

Redefiniciones (REDEFINES)
Redefiniciones es una función de COBOL que permite que los mismos datos tengan varias posibilidades de decodificación. Durante el proceso de decodificación, las redefiniciones aparecen como columnas adicionales en la tabla resultante y los datos se decodifican varias veces.
Las propiedades de las redefiniciones son las siguientes:
- Las redefiniciones de los mismos datos subyacentes no son campos del mismo nivel y, por lo tanto, no están en el ámbito entre sí.
- Los campos redefinidos se decodifican cuando se decodifica el campo subyacente, no cuando se declaran. El campo subyacente también determina el ámbito de los campos redefinidos.
- Todos los campos redefinidos deben tener el mismo tamaño y un tamaño fijo. Esto significa que no puedes usar campos de texto de longitud variable ni listas dinámicas empaquetadas en campos redefinidos.
Las redefiniciones se definen de la siguiente manera en un copybook:
01 Rec.
05 Field-1 PIC X(100).
05 Group-1 REDEFINES Field-1.
10 Field-2 PIC 9(5) comp-3.
10 Field-3 PIC X(96).
05 Group-2 REDEFINES Field-1.
10 Field-4 PIC 9(4) comp-4.
10 Field-5 PIC X(50).
10 Field-6 PIC X(46).
En la siguiente imagen se muestra el diseño de un campo redefinido.

Puedes usar las redefiniciones de muchas formas, entre las que se incluyen las siguientes, que son las más habituales:
Ver los mismos datos de dos formas diferentes: esta es la forma más habitual de usar las redefiniciones. Durante el proceso de codificación, el orden en el que se rellenan los datos no está definido, por lo que debe asegurarse de que los datos de BigQuery conserven su integridad al exportarse.
Ejemplo
01 REC. 02 FULL-NAME PIC X(12). 02 NAME REDEFINES FULL-NAME. 05 FIRST-NAME PIC X(6). 05 LAST-NAME PIC X(6).
Usar uniones etiquetadas: las uniones etiquetadas son una forma habitual de usar redefines cuando solo necesitas una de las interpretaciones de los datos de cualquier registro, en función de un campo. Puedes usar indicadores nulos para marcar las interpretaciones innecesarias como nulas. Esto también evitará que se analicen debido a que los indicadores nulos tienen evaluaciones diferidas. Las propiedades de las uniones etiquetadas son las siguientes:
- El proceso de codificación falla si se define más de una redefinición.
- Solo se implementan comprobaciones de igualdad y desigualdad.
Ejemplo
01 REC. 05 TYPE PIC X(5). 05 DATA PIC X(100). 05 VARIANT-1 REDEFINES DATA. 10 Field-2 PIC 9(4) comp-3. 10 Field-3 PIC X(96). 05 VARIANT-2 REDEFINES DATA. 10 Field-4 PIC 9(4) comp-5. 10 Field-5 PIC X(50). 10 Field-6 PIC X(46).
Puedes usar el siguiente ejemplo para implementar una unión etiquetada:
{ "field_override": [ { "field": "VARIANT-1", "modifier": { "null_if": { "target_field": "TYPE", "non_null_value": "VAR1" } } }, { "field": "VARIANT-2", "modifier": { "null_if": { "target_field": "TYPE", "non_null_value": "VAR2" } } } ], "transformations": [ { "field": "DATA", "transformation": { "exclude": {}} } ] }
Tipos lógicos
Para transcodificar datos a varios formatos y desde ellos, Mainframe Connector convierte todos los datos a una representación intermedia (RI) basada en tipos lógicos. Los formatos de entrada y salida definen cómo se convierten los datos a y desde cualquier tipo lógico. En la siguiente tabla se enumeran todos los tipos lógicos admitidos por Mainframe Connector.
Tipo lógico | Descripción |
---|---|
BigDecimal | Representa números decimales de cualquier escala y precisión. |
BigInteger | Representa números enteros de cualquier tamaño. |
Bytes | Representa una matriz de bytes de tamaño variable. |
Fecha | Representa una fecha independiente de una zona horaria específica. |
Decimal64 | Representa un decimal con un intervalo que puede caber en un entero de 64 bits con signo de cualquier escala. |
Doble | Representa un número de punto flotante de doble precisión, tal como se describe en el estándar IEEE para aritmética de punto flotante (IEEE 754). |
Lista | Representa una lista de elementos de un tipo específico. La lista puede contener un número arbitrario de elementos. |
Long | Representa un número con signo de 64 bits. |
Grabar | Representa una serie fija de campos de diferentes tipos. |
Cadena | Representa una cadena de caracteres Unicode que no está relacionada con ninguna codificación específica. . Se puede representar cualquier punto de código Unicode válido. Sin embargo, es posible que algunos caracteres no se puedan codificar en todos los procesos de codificación. Las cadenas lógicas tienen una longitud variable. |
Marca de tiempo | Representa una marca de tiempo independiente de una zona horaria específica. |
Asignación de tipos de ORC
En la siguiente tabla se muestra la asignación entre los tipos lógicos de Mainframe Connector y los tipos ORC.
Tipo lógico | Tipo de ORC |
---|---|
BigDecimal | decimal |
BigInteger | decimal |
Bytes | blob binario |
Fecha | fecha |
Decimal64 | decimal64 |
Doble | float64 |
Lista | list |
Long | Entero de 64 bits (bigint) |
Grabar | tipo STRUCT |
Cadena | Cadena codificada en UTF-8 |
Marca de tiempo | Marca de tiempo (sin la zona horaria local) |
Asignación de tipos de BigQuery
En la siguiente tabla se muestra la asignación entre los tipos lógicos de Mainframe Connector y los tipos de datos de BigQuery.
Tipo lógico | Tipo de datos de BigQuery | Comentarios |
---|---|---|
BigDecimal | NUMERIC | |
BigInteger | NUMERIC | |
Bytes | BYTES | |
Fecha | FECHA | |
Decimal64 | NUMERIC | |
Doble | FLOAT64 | |
Lista | ARRAY | No se admiten listas anidadas ni listas de mapas. |
Long | INT64 | |
Grabar | STRUCT | Cuando una unión solo tiene una variante, se convierte en un campo NULLABLE.
De lo contrario, una unión se convierte en un RECORD con una lista de campos NULLABLE.
Los campos que aceptan valores NULL tienen sufijos como field_0 y field_1 . Solo se asigna un valor a uno de estos campos cuando se leen los datos. |
Cadena | STRING | |
Marca de tiempo | TIMESTAMP |
Ámbito de los campos
Se considera que un campo está en el ámbito de otro campo si cumple una de las siguientes condiciones:
- Un campo hermano que se define antes del campo que lo requiere.
- Un campo de un registro principal que se define antes del campo que lo requiere.