Questa pagina descrive come eseguire la transcodifica dei dati del mainframe localmente sul mainframe in un formato supportato, e poi spostare i contenuti in BigQuery. La transcodifica è il processo di conversione delle informazioni da una forma di rappresentazione codificata a un'altra. Questa pagina illustra come utilizzare Mainframe Connector per transcodificare i dati del mainframe in formato ORC (Optimized Row Columnar) e poi salvarli in Cloud Storage.
Mainframe Connector offre tre modi per transcodificare i dati del mainframe localmente sul mainframe.
- Utilizzo dei comandi
qsam
(versione 5.16.0 e successive) - Utilizzo del comando
vsam decode
(release 5.18.0 e successive) - Utilizzo del comando
gsutil cp
Vantaggi dei comandi qsam
e vsam
I comandi qsam
e vsam
offrono i seguenti vantaggi:
- Supporto per tipi di dati composti, tra cui la clausola OCCURS (elenchi), la clausola REDEFINES e i record nidificati. Per saperne di più su questi tipi di dati, consulta
qsam
evsam
Riferimento alla transcodifica. - Supporto della configurazione del processo di transcodifica tramite un file di configurazione del transcodificatore. Questa funzionalità offre una maggiore flessibilità durante la decodifica dei dati in Google Cloud e la codifica dei dati nel mainframe.
- Supporto per la creazione di un set di dati di overflow, ovvero una tabella di errori di transcodifica che può essere utilizzata per l'ispezione degli errori.
- Supporto di più formati di input e output. Questa funzionalità ti consente di caricare i dati da e verso vari data warehouse.
Prima di iniziare
Installa Mainframe Connector in qualsiasi set di dati partizionato del mainframe che vuoi utilizzare come libreria di procedure (PROCLIB).
Sposta i dati transcodificati localmente sul mainframe in Google Cloud
Per transcodificare i dati localmente su un mainframe e poi spostarli in BigQuery, devi svolgere le seguenti attività:
- Leggi e transcodifica un set di dati su un mainframe e caricalo in Cloud Storage
in formato ORC (per altri formati supportati solo dai comandi
qsam
ovsam
, vedi TranscodeFormat). La transcodifica viene eseguita durante le operazioniqsam decode
,vsam decode
ogsutil cp
(in base al comando scelto), in cui un set di dati EBCDIC (Extended Binary Coded Decimal Interchange Code) del mainframe viene convertito nel formato ORC in UTF-8 durante la copia in un bucket Cloud Storage. - Carica il set di dati in una tabella BigQuery.
- (Facoltativo) Esegui una query SQL sulla tabella BigQuery.
- (Facoltativo) Esporta i dati da BigQuery di nuovo nel mainframe.
Le sezioni seguenti descrivono in dettaglio come spostare i dati transcodificati
localmente sul mainframe in Google Cloud utilizzando i comandi
qsam
o vsam
e il comando
gsutil cp
.
Eseguire la transcodifica localmente utilizzando i comandi qsam
e vsam
Per transcodificare i dati mainframe localmente sul mainframe utilizzando i comandi qsam
o vsam
, segui questi passaggi:
Crea un job per leggere il set di dati sul mainframe e transcodificarlo nel formato ORC, come mostrato nel comando seguente. Leggi i dati dal set di dati INFILE e il layout del record da COPYBOOK DD.
Puoi modificare il comportamento predefinito del processo di transcodifica di Mainframe Connector fornendo un file di configurazione del transcoder utilizzando l'argomento
--transcode-configuration
.Se il set di dati di input è un file Queued Sequential Access Method (QSAM) con lunghezza del record fissa o variabile, utilizza il seguente comando:
//STEP01 EXEC BQSH //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS //STDIN DD * BUCKET=BUCKET_NAME qsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename /*
Se il set di dati di input è un file VSAM (Virtual Storage Access Method) con lunghezza del record fissa o variabile, utilizza il seguente comando:
//STEP01 EXEC BQSH //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS //STDIN DD * BUCKET=BUCKET_NAME vsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename /*
Sostituisci
BUCKET_NAME
con il nome del bucket Cloud Storage in cui vuoi copiare i dati del mainframe.Per evitare di specificare variabili come ID progetto e nomi dei bucket in ogni procedura JCL (Job Control Language), puoi aggiungerle in BQSH PROCLIB e farvi riferimento in diverse procedure JCL come variabili di ambiente. Questo approccio consente anche una transizione senza problemi tra gli ambienti di produzione e non di produzione, poiché le variabili specifiche dell'ambiente sono impostate nella PROCLIB BQSH dell'ambiente.
In questo esempio,
DD DataPath
viene utilizzato per specificare il percorso della configurazione di copybook, input e transcodifica. ConsultaDataPath
per altre opzioni.Se vuoi registrare i comandi eseguiti durante questa procedura, puoi attivare le statistiche di caricamento.
Crea e invia un job di caricamento BigQuery che carica le partizioni dei file ORC da
tablename.orc
inMY_DATASET.MY_TABLE
, come segue.Example JCL //STEP02 EXEC BQSH //STDIN DD * BUCKET=BUCKET_NAME PROJECT=PROJECT_NAME bq load --project_id=$PROJECT \ myproject:MY_DATASET.MY_TABLE \ gs://$BUCKET/tablename.orc/* /*
Sostituisci quanto segue:
BUCKET_NAME
: il nome del bucket Cloud Storage che contiene i file ORC che vuoi caricare in BigQuery.PROJECT_NAME
: il nome del progetto in cui vuoi eseguire la query.
(Facoltativo) Crea e invia un job di query BigQuery che esegue una lettura SQL dal file QUERY DD. In genere, la query è un'istruzione
MERGE
oSELECT INTO DML
che comporta la trasformazione di una tabella BigQuery. Tieni presente che Mainframe Connector registra i log nelle metriche dei job, ma non scrive i risultati delle query in un file.Puoi eseguire query su BigQuery in vari modi: inline, con un set di dati separato utilizzando DD o con un set di dati separato utilizzando DSN.
Example JCL //STEP03 EXEC BQSH //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME LOCATION=LOCATION bq query --project_id=$PROJECT \ --location=$LOCATION/* /*
Sostituisci quanto segue:
PROJECT_NAME
: il nome del progetto in cui vuoi eseguire la query.LOCATION
: la posizione in cui verrà eseguita la query. Ti consigliamo di eseguire la query in una località vicina ai dati.
(Facoltativo) Crea e invia un job di esportazione che esegue una lettura SQL dal file QUERY DD ed esporta il set di dati risultante in un mainframe come file binario.
Puoi modificare il comportamento predefinito del processo di transcodifica di Mainframe Connector fornendo un file di configurazione del transcoder utilizzando l'argomento
--transcode-configuration
.//STEP04 EXEC BQSH //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME qsam encode \ dd:QUERY dd:OUTFILE --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG --input-format=BIGQUERY \ --input-parameter project_id=PROJECT_NAME \ --input-parameter location=LOCATION/* /*
Sostituisci quanto segue:
PROJECT_NAME
: il nome del progetto in cui vuoi eseguire la query.LOCATION
: la posizione in cui verrà eseguita la query. Ti consigliamo di eseguire la query in una località vicina ai dati.
I dati vengono esportati nel set di dati OUTFILE DD. Il layout del record è descritto da COPYBOOK DD. Per altre opzioni per i percorsi di configurazione di copybook, outfile e transcodifica, vedi
DataPath
.
Esegui la transcodifica in locale utilizzando il comando gsutil cp
Per transcodificare i dati mainframe localmente sul mainframe utilizzando il
comando gsutil cp
, segui questi passaggi:
Crea un job per leggere il set di dati sul mainframe e transcodificarlo nel formato ORC, come mostrato nel comando seguente. Leggi i dati dal set di dati INFILE e il layout del record da COPYBOOK DD.
Il set di dati di input deve essere un file Queued Sequential Access Method (QSAM) con lunghezza del record fissa o variabile.
//STEP01 EXEC BQSH //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME //STDIN DD * BUCKET=BUCKET_NAME gsutil cp --replace gs://$BUCKET/tablename.orc /*
Sostituisci
BUCKET_NAME
con il nome del bucket Cloud Storage in cui vuoi copiare i dati del mainframe.Per evitare di specificare variabili come ID progetto e nomi dei bucket in ogni procedura JCL, puoi aggiungerle in BQSH PROCLIB e farvi riferimento in diverse procedure JCL come variabili di ambiente. Questo approccio ti aiuta anche a passare senza problemi dagli ambienti di produzione a quelli non di produzione, in quanto le variabili specifiche dell'ambiente sono impostate nella BQSH PROCLIB dell'ambiente. Per l'elenco completo delle variabili di ambiente supportate da Mainframe Connector, consulta Variabili di ambiente.
In questo esempio, l'input standard (STDIN) viene fornito come dati in streaming al DD STDIN. In alternativa, puoi fornire questo input utilizzando un nome origine dati (DSN), che semplifica la gestione della sostituzione dei simboli.
Se vuoi registrare i comandi eseguiti durante questa procedura, puoi attivare le statistiche di caricamento.
Crea e invia un job di caricamento BigQuery che carica le partizioni dei file ORC da
tablename.orc
inMY_DATASET.MY_TABLE
, come segue.Example JCL //STEP02 EXEC BQSH //STDIN DD * BUCKET=BUCKET_NAME PROJECT=PROJECT_NAME bq load --project_id=$PROJECT \ myproject:MY_DATASET.MY_TABLE \ gs://$BUCKET/tablename.orc/* /*
Sostituisci quanto segue:
BUCKET_NAME
: il nome del bucket Cloud Storage che contiene i file ORC che vuoi caricare in BigQuery.PROJECT_NAME
: il nome del progetto in cui vuoi eseguire la query.
(Facoltativo) Crea e invia un job di query BigQuery che esegue una lettura SQL dal file QUERY DD. In genere, la query è un'istruzione
MERGE
oSELECT INTO DML
che comporta la trasformazione di una tabella BigQuery. Tieni presente che Mainframe Connector registra i log nelle metriche dei job, ma non scrive i risultati delle query in un file.Puoi eseguire query su BigQuery in vari modi: inline, con un set di dati separato utilizzando DD o con un set di dati separato utilizzando DSN.
Example JCL //STEP03 EXEC BQSH //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME LOCATION=LOCATION bq query --project_id=$PROJECT \ --location=$LOCATION/* /*
Sostituisci quanto segue:
PROJECT_NAME
: il nome del progetto in cui vuoi eseguire la query.LOCATION
: la posizione in cui verrà eseguita la query. Ti consigliamo di eseguire la query in una località vicina ai dati.
(Facoltativo) Crea e invia un job di esportazione che esegue una lettura SQL dal file QUERY DD ed esporta il set di dati risultante in un mainframe come file binario.
Example JCL //STEP04 EXEC BQSH //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME DATASET_ID=DATASET_ID DESTINATION_TABLE=DESTINATION_TABLE bq export --project_id=$PROJECT \ --dataset_id=$DATASET_ID \ --destination_table=$DESTINATION_TABLE \ --location="US" \ --remoteHost <mainframe-connector-url>.a.run.app \ --remotePort 443 /*
Sostituisci quanto segue:
PROJECT_NAME
: il nome del progetto in cui vuoi eseguire la query.DATASET_ID
: l'ID del set di dati BigQuery che contiene la tabella che vuoi esportare.DESTINATION_TABLE
: la tabella BigQuery che vuoi esportare.
I dati vengono esportati nel set di dati OUTFILE DD. Il layout del record è descritto da COPYBOOK DD.