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 descrive 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 due modi per transcodificare i dati del mainframe localmente sul mainframe.
- Utilizzare i comandi
qsam
(versione 5.16.0 e successive) - Utilizzo del comando
gsutil cp
Vantaggi dei comandi qsam
I comandi qsam
offrono i seguenti vantaggi:
- Supporta 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
transcoding reference. - Supporta la 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.
- Supporta 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.
- Supporta 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
nel formato ORC (per altri formati supportati solo da
qsam commands
, vedi TranscodeFormat). La transcodifica viene eseguita durante le operazioniqsam decode
ogsutil cp
(a seconda del 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
e il comando gsutil cp
.
Eseguire la transcodifica in locale utilizzando i comandi qsam
Per transcodificare i dati mainframe localmente sul mainframe utilizzando i
comandi qsam
, 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 con metodo di accesso sequenziale in coda (QSAM) con lunghezza del record fissa o variabile.
Puoi modificare il comportamento predefinito del processo di transcodifica di Mainframe Connector fornendo un file di configurazione del transcoder utilizzando l'argomento
--transcode-configuration
.//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 /*
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 le 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
.
Eseguire 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 con metodo di accesso sequenziale in coda (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 le 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 da 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.