Spostare i dati transcodificati localmente sul mainframe in Google Cloud

Questa pagina spiega come transcodificare i dati del mainframe localmente sul mainframe nel formato ORC (Optimized Row Columnar) e poi spostare i contenuti in BigQuery.

La transcodifica è il processo di conversione delle informazioni da una forma di rappresentazione codificata a un'altra, in questo caso in ORC. ORC è un formato di dati open source orientato alle colonne ampiamente utilizzato nell'ecosistema Apache Hadoop ed è supportato da BigQuery.

Prima di iniziare

Installa Mainframe Connector su qualsiasi set di dati partizionato per mainframe che vuoi utilizzare come libreria di procedure (PROCLIB).

Spostare 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à:

  1. Leggi e transcodifica un set di dati su un mainframe e caricalo in Cloud Storage in formato ORC. La transcodifica viene eseguita durante l'operazione cp, in cui un set di dati EBCDIC (Extended Bin coded Interchange Code) deframe viene convertito nel formato ORC in UTF-8 durante la copia in un bucket Cloud Storage.
  2. Carica il set di dati in una tabella BigQuery.
  3. (Facoltativo) Esegui una query SQL sulla tabella BigQuery.
  4. (Facoltativo) Esporta i dati da BigQuery nel mainframe.

Per eseguire queste attività, segui questi passaggi:

  1. Crea un job per leggere il set di dati sul mainframe e transcodificarlo nel formato ORC, come segue. Leggi i dati dal set di dati INFILE e il layout dei record dal COPYBOOK DD. Il set di dati di input deve essere un file QSAM (metodo di accesso sequenziale in coda) 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 quanto segue:

    • BUCKET_NAME: il nome del bucket Cloud Storage in cui vuoi copiare i dati del mainframe.

    Per evitare di specificare variabili come ID progetto e nomi di bucket in ogni procedura JCL (Job Control Language), puoi aggiungerle in PROCLIB BQSH e farvi riferimento in più procedure JCL come variabili di ambiente. Questo approccio consente inoltre di passare senza problemi dagli ambienti di produzione a quelli non di produzione, poiché le variabili specifiche per l'ambiente vengono impostate nella PROCLIB BQSH 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 dato in-stream al DD STDIN. In alternativa, puoi fornire questo input utilizzando un nome dell'origine dati (DSN), che consente di gestire più facilmente la sostituzione dei simboli.

    Se vuoi registrare i comandi eseguiti durante questa procedura, puoi abilitare le statistiche di caricamento.

  2. Crea e invia un job di caricamento BigQuery che carichi le partizioni dei file ORC da my_table.orc in MY_DATASET.MY_TABLE, come segue.

    Example JCL
    //STEP02 EXEC BQSH
    //STDIN DD *
    PROJECT=PROJECT_NAME
    bq load --project_id=$PROJECT \
      myproject:DATASET.TABLE \
      gs://bucket/tablename.orc/*
    /*
    

    Sostituisci quanto segue:

    • PROJECT_NAME: il nome del progetto in cui vuoi eseguire la query.
  3. (Facoltativo) Crea e invia un job di query BigQuery che esegue una lettura SQL dal file DD QUERY. In genere, la query sarà un'istruzione MERGE o SELECT INTO DML che comporta la trasformazione di una tabella BigQuery. Tieni presente che il connettore Mainframe registra le metriche dei job, ma non scrive i risultati delle query in un file.

    Puoi eseguire query su BigQuery in vari modi: in linea, con un set di dati distinto utilizzando DD o con un set di dati distinto 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 posizione vicina ai dati.
  4. (Facoltativo) Crea e invia un job di esportazione che esegua una lettura SQL dal file DD QUERY ed esporti 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 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 dei record è descritto dal COPYBOOK DD.