Mainframe Connector transcodifica los archivos planos del método de acceso secuencial en cola (QSAM) a formatos compatibles con Google Cloud y viceversa con los comandos qsam
. Los comandos qsam
realizan las siguientes operaciones de transcodificación:
- El comando
qsam decode
decodifica los datos de la unidad central en Google Cloud - El comando
qsam encode
codifica los datos Google Cloud en la unidad central.
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 copia con la definición de la estructura de datos de COBOL. También puedes definir transformaciones avanzadas con el archivo de configuración del transcodificador del conector de Mainframe. En los siguientes diagramas, se describen estas operaciones en detalle.


En esta página, se proporciona una descripción general del proceso de transcodificación con los comandos qsam decode
y qsam encode
, los tipos físicos y lógicos de datos de la unidad central, y las asignaciones de tipos Optimized Row Columnar (ORC) y BigQuery.
Tipos físicos
Los tipos físicos definen cómo se organizan los datos de campo en un disco. Los tipos físicos se convierten en tipos lógicos de Mainframe Connector, que luego 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 producen errores 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 produjo el error y continúa el proceso de transcodificación.
Símbolos de imágenes | Atributos de la imagen | Tipo lógico |
---|---|---|
A, B, G, N, U, X y 9 | DISPLAY, DISPLAY-1, NATIONAL, UTF-8 | String |
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 la codificación predeterminada de Unicode Transformation Format 16-bit (UTF-16 BE).
- Los campos UTF8 tienen la codificación Unicode Transformation Format-8 (UTF-8) de forma predeterminada
Mainframe Connector admite la mayoría de las codificaciones de conjuntos de caracteres de un byte (SBCS) y de dos bytes (DBCS). También puedes definir tu propia codificación SBCS personalizada si es necesario.
Campos binarios (COMPUTATIONAL)
Los campos binarios se almacenan como números enteros big-endian firmados o sin firmar. Mainframe Connector siempre almacena los campos binarios de forma lógica como números enteros de 64 bits firmados. Por lo tanto, las entradas largas sin firmar deben usar solo los 63 bits inferiores; de lo contrario, fallará el proceso de transcodificación.
Símbolos de imágenes | Atributos de la imagen | Tipo lógico |
---|---|---|
S, 9 | COMP, COMPUTATIONAL | Long (número entero de 64 bits con firma) |
Ejemplo
01 REC 02 INT PIC S9(8) COMP
Campos de punto flotante hexadecimal (COMP-1 y COMP-2)
Los campos de punto flotante hexadecimal (HFP) son totalmente compatibles. Mainframe Connector usa formatos de precisión simple y doble para los campos de HFP.
Símbolos de imágenes | Atributos de la imagen | Tipo lógico |
---|---|---|
COMP-1, COMP-2 | Doble (número de punto flotante de 64 bits con firma) |
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, el conector de Mainframe selecciona el tipo lógico con el mejor rendimiento según la precisión y la escala especificadas.
Símbolos de imágenes | Atributos de la imagen | Tipo lógico |
---|---|---|
S, 9, V | COMP-3 | Long (número entero de 64 bits con firma), BigInteger, Decimal64 y BigDecimal |
Ejemplo
01 REC 02 DEC PIC S9(2)V9(8) COMP-3
Campo decimal con zona (DISPLAY)
Los campos decimales con zona son totalmente compatibles. Durante el proceso de transcodificación, el conector de Mainframe selecciona el tipo lógico con el mejor rendimiento según la precisión y la escala especificadas.
Símbolos de imágenes | Atributos de la imagen | Tipo lógico |
---|---|---|
S, 9, V | DISPLAY | Long (número entero de 64 bits con firma), 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. El conector de Mainframe admite los siguientes tipos de listas:
Listas fijas
Las listas fijas se usan cuando se conoce de antemano la cantidad exacta de elementos (cantidad de elementos) que formarán parte de la lista, y esta cantidad siempre es la misma. Los elementos de una lista fija pueden tener un tamaño variable.
Las listas fijas se definen de la siguiente manera en un libro de copia:
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 la cantidad máxima de elementos que formarán parte de la lista. Sin embargo, el recuento real de elementos es desconocido 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 alcance.
- El recuento mínimo de elementos no se aplica durante el proceso de transcodificación.
Las listas dinámicas se definen de la siguiente manera en un libro de copia:
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 una cantidad máxima de cinco elementos.

Listas dinámicas empaquetadas
Las listas dinámicas empaquetadas se usan cuando la cantidad máxima 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 alcance.
- El recuento mínimo de elementos no se aplica durante el proceso de transcodificación.
Las listas dinámicas empaquetadas se definen de la siguiente manera en un libro de copia:
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)
Las redefiniciones son 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 hermanos y, por lo tanto, no están en el alcance entre sí.
- Los campos redefinidos se decodifican cuando se decodifica el campo subyacente, no cuando se declaran. El campo subyacente también determina el alcance 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 libro de copia:
01 Rec.
05 Field-1 PIC X(100).
05 Group-1 REDEFINES Field-1.
10 Field-2 PIC 9(4) comp-3.
10 Field-3 PIC X(96).
05 Group-2 REDEFINES Field-1.
10 Field-4 PIC 9(4) comp-5.
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 maneras, incluidas las siguientes más comunes:
Ver los mismos datos de dos maneras diferentes: Esta es la forma más común de usar las redefiniciones. Durante el proceso de codificación, el orden en el que se completan los datos no está definido, por lo que debes asegurarte de que los datos de BigQuery conserven su integridad cuando se exporten.
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).
Usa la unión etiquetada: Las uniones etiquetadas son una forma común de usar redefiniciones cuando solo necesitas una de las interpretaciones de los datos de cualquier registro, según un campo. Puedes usar indicadores nulos para marcar las interpretaciones que no se necesitan como nulos. 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 un redimiendo.
- Solo se implementan las verificaciones de igualdad y no igualdad.
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 desde y hacia varios formatos, Mainframe Connector convierte todos los datos en una representación intermedia (IR) que se basa en tipos lógicos. Los formatos de entrada y salida definen cómo se convierten los datos a cualquier tipo lógico y viceversa. En la siguiente tabla, se enumeran todos los tipos lógicos que admite el conector de Mainframe.
Tipo lógico | Descripción |
---|---|
Largo | Representa un número de 64 bits firmado. |
String | Representa una cadena de caracteres Unicode no relacionados 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 son de longitud variable. |
Decimal64 | Representa un decimal con un rango que puede caber en un número entero de 64 bits con firma de cualquier escala. |
BigInteger | Representa números enteros de cualquier tamaño. |
BigDecimal | Representa números decimales de cualquier escala y precisión. |
Bytes | Representa un array de bytes de tamaños variables. |
Fecha | Representa una fecha independiente de una zona horaria específica. |
Doble | Representa un número de punto flotante de doble precisión, 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 una cantidad arbitraria de elementos. |
Registro | Representa una serie fija de campos de diferentes tipos. |
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 proporciona la asignación entre los tipos lógicos del conector de Mainframe y los tipos ORC.
Tipo lógico | Tipo de ORC |
---|---|
Largo | Número entero de 64 bits (bigint) |
String | Cadena codificada en UTF-8 |
Decimal64 | decimal64 |
BigInteger | decimal |
BigDecimal | decimal |
Bytes | BLOB binario |
Fecha | fecha |
Doble | float64 |
Lista | list |
Registro | struct |
Marca de tiempo | marca de tiempo (sin zona horaria local) |
Asignación de tipos de BigQuery
En la siguiente tabla, se proporciona la asignación entre los tipos lógicos del conector de Mainframe y los tipos de datos de BigQuery.
Tipo lógico | Tipo de datos de BigQuery | Comentarios |
---|---|---|
Largo | INT64 | |
String | STRING | |
Decimal64 | NUMERIC | |
BigInteger | NUMERIC | |
BigDecimal | NUMERIC | |
Bytes | BYTES | |
Fecha | DATE | |
Doble | FLOAT64 | |
Lista | ARRAY | Las listas anidadas y de mapas no son compatibles. |
Registro | STRUCT | Cuando una unión solo tiene una variante, se convierte en un campo NULLABLE.
De lo contrario, un union se convierte en un RECORD con una lista de campos NULLABLE.
Los campos NULLABLE tienen sufijos como field_0 y field_1 . Solo se asigna un valor a uno de estos campos cuando se leen los datos. |
Marca de tiempo | TIMESTAMP |
Alcance del campo
Un campo se considera dentro del alcance de otro campo si es uno de los siguientes:
- Es un campo hermano que se define antes del campo que lo requiere.
- Es un campo en un registro superior que se define antes del campo que lo requiere.