Mainframe Connector transcodifica i file flat Queued Sequential Access Method (QSAM)
in formati compatibili con Google Cloud e viceversa utilizzando
i comandi qsam
. Mainframe Connector supporta anche la transcodifica dei file Virtual Storage Access Method (VSAM) in formati compatibili con Google Cloudutilizzando il comando vsam decode
. I comandi
qsam
e vsam
eseguono le seguenti operazioni di
transcodifica:
- Il comando
qsam decode
decodifica i file flat QSAM in formati compatibili con Google Cloud . - Il comando
qsam encode
codifica i dati Google Cloud nel mainframe. - Il comando
vsam decode
decodifica i file VSAM in formati compatibili con Google Cloud .
Queste operazioni eseguono trasformazioni simmetriche, ovvero spostano gli stessi dati da e verso Google Cloud. Puoi definire la struttura di un file QSAM o VSAM in un file copybook utilizzando la definizione della struttura dei dati COBOL. Puoi anche definire trasformazioni avanzate utilizzando il file di configurazione del transcodificatore Mainframe Connector. I seguenti diagrammi descrivono queste operazioni in dettaglio.


Questa pagina fornisce una panoramica del processo di transcodifica utilizzando i comandi
qsam decode
, qsam encode
e vsam decode
, i tipi fisici e logici di dati mainframe e i mapping dei tipi Optimized
Row Columnar (ORC) e BigQuery.
Tipi fisici
I tipi fisici definiscono il modo in cui i dati dei campi vengono disposti su un disco. I tipi fisici vengono convertiti in tipi logici di Mainframe Connector, che possono poi essere mappati ai tipi di database (ORC o BigQuery).
Campi alfanumerici
I campi alfanumerici vengono utilizzati per elaborare stringhe alfanumeriche. I dati vengono
trattati come una serie di caratteri e vengono archiviati come stringhe con una codifica specifica, ad esempio Extended Binary Coded Decimal Interchange Code (EBCDIC).
Il processo di transcodifica non termina se si verificano errori durante la codifica o la decodifica dei campi alfanumerici. Al suo posto, viene inserito un carattere SUB
per la codifica nella posizione in cui si è verificato l'errore
e il processo di transcodifica continua.
Simboli con immagini | Attributi immagine | Tipo logico |
---|---|---|
A, B, G, N, U, X, 9 | DISPLAY, DISPLAY-1, NATIONAL, UTF-8 | Stringa |
Esempio
01 REC 02 STR PIC X(10) 02 NATIONAL PIC N(10) 02 UTF8 PIC U(1) USAGE UTF-8
Formato di codifica
I campi alfanumerici sono codificati come segue:
- X campi sono impostati per impostazione predefinita sulla codifica EBCDIC
- I campi nazionali (N) utilizzano per impostazione predefinita la codifica Unicode Transformation Format a 16 bit (UTF-16 BE)
- I campi UTF8 utilizzano per impostazione predefinita la codifica Unicode Transformation Format-8 (UTF-8)
Mainframe Connector supporta la maggior parte delle codifiche di set di caratteri a singolo byte (SBCS) e set di caratteri a doppio byte (DBCS). Se necessario, puoi anche definire la tua codifica SBCS personalizzata.
Campi binari (COMPUTATIONAL)
I campi binari vengono archiviati come numeri interi big-endian con o senza segno. Mainframe Connector archivia sempre i campi binari in modo logico come numeri interi a 64 bit con segno. Pertanto, gli input unsigned long devono utilizzare solo i 63 bit inferiori, altrimenti il processo di transcodifica non va a buon fine.
Simboli con immagini | Attributi immagine | Tipo logico |
---|---|---|
S, 9 | COMP, COMPUTATIONAL | Long (intero a 64 bit con segno) |
Esempio
01 REC 02 INT PIC S9(8) COMP
Campi in virgola mobile esadecimali (COMP-1, COMP-2)
I campi in virgola mobile esadecimale (HFP) sono completamente supportati. Mainframe Connector utilizza formati a precisione singola e doppia per i campi HFP.
Simboli con immagini | Attributi immagine | Tipo logico |
---|---|---|
COMP-1, COMP-2 | Double (virgola mobile con segno a 64 bit) |
Esempio
01 REC 03 HFP-SINGLE COMP-1. 03 HFP-DOUBLE COMP-2.
Campi decimali compressi (COMP-3)
I campi decimali compressi sono completamente supportati. Durante il processo di transcodifica, Mainframe Connector seleziona il tipo logico più performante in base alla precisione e alla scala specificate.
Simboli con immagini | Attributi immagine | Tipo logico |
---|---|---|
S, 9, V | COMP-3 | Long (intero a 64 bit con segno), BigInteger, Decimal64, BigDecimal |
Esempio
01 REC 02 DEC PIC S9(2)V9(8) COMP-3
Campo decimale compattato (DISPLAY)
I campi decimali con segno sono completamente supportati. Durante il processo di transcodifica, Mainframe Connector seleziona il tipo logico più performante in base alla precisione e alla scala specificate.
Simboli con immagini | Attributi immagine | Tipo logico |
---|---|---|
S, 9, V | DISPLAY | Long (intero a 64 bit con segno), BigInteger, Decimal64, BigDecimal |
Esempio
01 REC 02 DEC PIC S9(2)V9(8) DISPLAY
Elenchi (OCCURS)
Gli elenchi sono raccolte ordinate di elementi dello stesso tipo. Mainframe Connector supporta i seguenti tipi di elenchi:
Elenchi fissi
Gli elenchi fissi vengono utilizzati quando il numero esatto di elementi (conteggio elementi) che faranno parte dell'elenco è noto in anticipo e questo numero rimane sempre lo stesso. Gli elementi di un elenco fisso possono avere dimensioni variabili.
Gli elenchi fissi sono definiti come segue in un copybook:
01 REC.
02 LIST OCCURS 5 TIMES PIC X(1).
02 FLD PIC X(5).
L'immagine seguente mostra il layout di un elenco fisso con un conteggio degli elementi pari a 5.

Elenchi dinamici
Gli elenchi dinamici vengono utilizzati quando il numero massimo di elementi che faranno parte dell'elenco è noto in anticipo. Tuttavia, il conteggio effettivo degli elementi è sconosciuto e dipende da un altro campo. Gli elementi di un elenco dinamico possono avere dimensioni variabili.
Le proprietà degli elenchi dinamici sono le seguenti:
- Il campo della lunghezza può essere convertito in un numero intero senza perdita di precisione.
- Il campo della lunghezza deve essere incluso nell'ambito.
- Il conteggio minimo degli elementi non viene applicato durante il processo di transcodifica.
Gli elenchi dinamici sono definiti come segue in 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).
L'immagine seguente mostra il layout di un elenco dinamico con un numero massimo di elementi pari a cinque.

Elenchi dinamici compressi
Gli elenchi dinamici compatti vengono utilizzati quando il numero massimo di elementi che faranno parte dell'elenco dipende da un altro campo e gli elementi sono compatti.
Le proprietà degli elenchi dinamici compressi sono le seguenti:
- Il campo della lunghezza può essere convertito in un numero intero senza perdita di precisione.
- Il campo della lunghezza deve essere incluso nell'ambito.
- Il conteggio minimo degli elementi non viene applicato durante il processo di transcodifica.
Gli elenchi dinamici compressi sono definiti come segue in 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).
L'immagine seguente mostra il layout di un elenco dinamico compresso.

Ridefinizioni (REDEFINES)
Ridefinizioni è una funzionalità COBOL che consente agli stessi dati di avere più possibilità di decodifica. Durante il processo di decodifica, le ridefinizioni vengono visualizzate come colonne aggiuntive nella tabella risultante e i dati vengono decodificati più volte.
Le proprietà delle ridefinizioni sono le seguenti:
- Le ridefinizioni degli stessi dati sottostanti non sono campi correlati e pertanto non rientrano nell'ambito l'uno dell'altro.
- I campi ridefiniti vengono decodificati quando viene decodificato il campo sottostante, non quando vengono dichiarati. Il campo sottostante determina anche l'ambito dei campi ridefiniti.
- Tutti i campi ridefiniti devono avere le stesse dimensioni e devono avere una dimensione fissa. Ciò significa che non puoi utilizzare campi di testo a lunghezza variabile ed elenchi dinamici compressi nei campi ridefiniti.
Le ridefinizioni sono definite come segue in 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).
L'immagine seguente mostra il layout di un campo ridefinito.

Puoi utilizzare le ridefinizioni in molti modi, tra cui i seguenti più comuni:
Visualizza gli stessi dati in due modi diversi:questo è il modo più comune in cui vengono utilizzate le ridefinizioni. Durante il processo di codifica, l'ordine in cui vengono inseriti i dati non è definito, pertanto devi assicurarti che i dati in BigQuery mantengano la loro integrità quando vengono esportati.
Esempio
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).
Utilizza l'unione con tag:le unioni con tag sono un modo comune di utilizzare le ridefinizioni quando hai bisogno di una sola delle interpretazioni dei dati di qualsiasi record, a seconda di un campo. Puoi utilizzare gli indicatori null per contrassegnare le interpretazioni non necessarie come nulle. In questo modo, non verranno analizzati a causa di indicatori null con valutazioni lazy. Le proprietà delle unioni taggate sono le seguenti:
- Il processo di codifica non riesce se viene definita più di una ridefinizione.
- Sono implementati solo i controlli di uguaglianza e non uguaglianza.
Esempio
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).
Puoi utilizzare il seguente esempio per implementare un'unione con tag:
{ "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": {}} } ] }
Tipi logici
Per transcodificare i dati in più formati e da più formati, Mainframe Connector converte tutti i dati in una rappresentazione intermedia (IR) basata su tipi logici. I formati di input e output definiscono la modalità di conversione dei dati da e verso qualsiasi tipo logico. La tabella seguente elenca tutti i tipi logici supportati da Mainframe Connector.
Tipo logico | Descrizione |
---|---|
BigDecimal | Rappresenta numeri decimali di qualsiasi scala e precisione. |
BigInteger | Rappresenta numeri interi di qualsiasi dimensione. |
Byte | Rappresenta un array di byte di dimensioni variabili. |
Data | Rappresenta una data indipendente da un fuso orario specifico. |
Decimal64 | Rappresenta un numero decimale con un intervallo che può essere contenuto in un numero intero con segno a 64 bit di qualsiasi scala. |
Doppio | Rappresenta un numero in virgola mobile a precisione doppia come descritto nello standard IEEE per l'aritmetica in virgola mobile (IEEE 754). |
Elenco | Rappresenta un elenco di elementi di un tipo specifico. L'elenco può contenere un numero arbitrario di elementi. |
Lungo | Rappresenta un numero a 64 bit con segno. |
Registra | Rappresenta una serie fissa di campi di vari tipi. |
Stringa | Rappresenta una stringa di caratteri Unicode non correlata a una codifica specifica. È rappresentabile qualsiasi punto di codice Unicode valido. Tuttavia, alcuni caratteri potrebbero non essere codificabili in tutti i processi di codifica. Le stringhe logiche hanno lunghezza variabile. |
Timestamp | Rappresenta un timestamp indipendente da un fuso orario specifico. |
Mappatura del tipo ORC
La seguente tabella fornisce il mapping tra i tipi logici di Mainframe Connector e i tipi ORC.
Tipo logico | Tipo di ORC |
---|---|
BigDecimal | decimal |
BigInteger | decimal |
Byte | blob binario |
Data | data |
Decimal64 | decimal64 |
Doppio | float64 |
Elenco | list |
Lungo | Intero a 64 bit (bigint) |
Registra | struct |
Stringa | Stringa codificata UTF-8 |
Timestamp | timestamp (senza fuso orario locale) |
Mappatura dei tipi BigQuery
La tabella seguente fornisce il mapping tra i tipi logici di Mainframe Connector e i tipi di dati BigQuery.
Tipo logico | Tipo di dati BigQuery | Commenti |
---|---|---|
BigDecimal | NUMERIC | |
BigInteger | NUMERIC | |
Byte | BYTES | |
Data | DATA | |
Decimal64 | NUMERIC | |
Doppio | FLOAT64 | |
Elenco | ARRAY | Gli elenchi nidificati e gli elenchi di mappe non sono supportati. |
Lungo | INT64 | |
Registra | STRUCT | Quando un'unione ha una sola variante, viene convertita in un campo NULLABLE.
In caso contrario, un'unione viene convertita in un RECORD con un elenco di campi NULLABLE.
I campi NULLABLE hanno suffissi come field_0 ,
field_1 . Solo a uno di questi campi viene assegnato un valore quando i dati vengono letti. |
Stringa | STRING | |
Timestamp | TIMESTAMP |
Ambito del campo
Un campo viene considerato in ambito per un altro campo se è uno dei seguenti:
- Un campo correlato definito prima del campo che lo richiede.
- Un campo in un record principale definito prima del campo che lo richiede.