En esta página se explica cómo puedes transcodificar datos de mainframe de forma local en el mainframe a un formato compatible y, a continuación, transferir el contenido a BigQuery. La transcodificación es el proceso de convertir información de una forma de representación codificada a otra. En esta página se explica cómo puedes usar Mainframe Connector para transcodificar datos de mainframe a formato ORC y, a continuación, guardar los datos en Cloud Storage.
Mainframe Connector ofrece dos formas de transcodificar datos de mainframe de forma local en el mainframe.
- Usar comandos de
qsam
(versión 5.16.0 y posteriores) - Usar el comando
gsutil cp
Ventajas de los comandos de qsam
Los comandos de qsam
ofrecen las siguientes ventajas:
- Admite tipos de datos compuestos, incluidas las cláusulas OCCURS (listas) y REDEFINES, así como los registros anidados. Para obtener más información sobre estos tipos de datos, consulta la referencia de transcodificación de
qsam
. - Admite la configuración del proceso de transcodificación mediante un archivo de configuración de transcodificador. Esta función ofrece más flexibilidad a la hora de decodificar datos en Google Cloudy de volver a codificarlos en el mainframe.
- Permite crear un conjunto de datos de desbordamiento, que es una tabla de errores de transcodificación que se puede usar para inspeccionar errores.
- Admite varios formatos de entrada y salida. Esta función le permite cargar datos en varios almacenes de datos y descargarlos de ellos.
Antes de empezar
Instala Mainframe Connector en cualquier conjunto de datos particionado de mainframe que quieras usar como biblioteca de procedimientos (PROCLIB).
Mover datos transcodificados localmente en el mainframe a Google Cloud
Para transcodificar datos de forma local en un mainframe y, a continuación, moverlos a BigQuery, debe realizar las siguientes tareas:
- Lee y transcodifica un conjunto de datos en un mainframe y súbelo a Cloud Storage en formato ORC (para ver otros formatos compatibles solo con
qsam commands
, consulta TranscodeFormat). La transcodificación se realiza durante las operacionesqsam decode
ogsutil cp
(en función del comando que elijas), en las que un conjunto de datos de código de intercambio decimal codificado en binario extendido de mainframe (EBCDIC) se convierte al formato ORC en UTF-8 durante la copia en un cubo de Cloud Storage. - Carga el conjunto de datos en una tabla de BigQuery.
- Opcional: Ejecuta una consulta de SQL en la tabla de BigQuery.
- Opcional: Exporta datos de BigQuery a la mainframe.
En las siguientes secciones se describe en detalle cómo puedes mover datos transcodificados localmente en el mainframe a Google Cloud mediante los qsam
comandos y el comando gsutil cp
.
Transcodificar de forma local con comandos qsam
Para transcodificar los datos de tu mainframe de forma local en tu mainframe mediante comandos de qsam
, sigue estos pasos:
Crea un trabajo para leer el conjunto de datos de tu mainframe y transcodificarlo al formato ORC, como se muestra en el siguiente comando. Lee los datos del conjunto de datos INFILE y el diseño de registro del COPYBOOK DD. El conjunto de datos de entrada debe ser un archivo de método de acceso secuencial en cola (QSAM) con una longitud de registro fija o variable.
Puedes modificar el comportamiento predeterminado del proceso de transcodificación de Mainframe Connector proporcionando un archivo de configuración del transcodificador mediante el argumento
--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 /*
Sustituye
BUCKET_NAME
por el nombre del segmento de Cloud Storage al que quieras copiar los datos del mainframe.Para no tener que especificar variables como los IDs de proyecto y los nombres de los contenedores en cada procedimiento del lenguaje de control de trabajos (JCL), puede añadirlas a BQSH PROCLIB y hacer referencia a ellas en varios procedimientos de JCL como variables de entorno. Este enfoque también te ayuda a hacer una transición fluida entre los entornos de producción y los que no son de producción, ya que las variables específicas del entorno se definen en la PROCLIB de BQSH del entorno.
En este ejemplo, se usa
DD DataPath
para especificar la ruta del copybook, la entrada y la configuración de transcodificación. Consulta otras opciones enDataPath
.Si quieres registrar los comandos ejecutados durante este proceso, puedes habilitar las estadísticas de carga.
Crea y envía una tarea de carga de BigQuery que cargue particiones de archivos ORC de
tablename.orc
enMY_DATASET.MY_TABLE
, como se indica a continuación.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/* /*
Haz los cambios siguientes:
BUCKET_NAME
: nombre del segmento de Cloud Storage que contiene los archivos ORC que quieres cargar en BigQuery.PROJECT_NAME
: el nombre del proyecto en el que quieres ejecutar la consulta.
Opcional: Crea y envía un trabajo de consulta de BigQuery que ejecute una lectura de SQL desde el archivo de definición de datos de consulta. Normalmente, la consulta será una instrucción
MERGE
oSELECT INTO DML
que dé como resultado la transformación de una tabla de BigQuery. Ten en cuenta que Mainframe Connector registra métricas de trabajos, pero no escribe los resultados de las consultas en un archivo.Puedes consultar BigQuery de varias formas: de forma insertada, con un conjunto de datos independiente mediante DD o con un conjunto de datos independiente mediante 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/* /*
Haz los cambios siguientes:
PROJECT_NAME
: el nombre del proyecto en el que quieres ejecutar la consulta.LOCATION
: la ubicación en la que se ejecutará la consulta. Te recomendamos que ejecutes la consulta en una ubicación cercana a los datos.
(Opcional) Crea y envía un trabajo de exportación que ejecute una lectura de SQL desde el archivo DD de QUERY y exporte el conjunto de datos resultante a un mainframe como archivo binario.
Puedes modificar el comportamiento predeterminado del proceso de transcodificación de Mainframe Connector proporcionando un archivo de configuración del transcodificador mediante el argumento
--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/* /*
Haz los cambios siguientes:
PROJECT_NAME
: el nombre del proyecto en el que quieres ejecutar la consulta.LOCATION
: la ubicación en la que se ejecutará la consulta. Te recomendamos que ejecutes la consulta en una ubicación cercana a los datos.
Los datos se exportan al conjunto de datos OUTFILE DD. El diseño del registro se describe en COPYBOOK DD. Para ver otras opciones de rutas de configuración de copybook, outfile y transcodificación, consulta
DataPath
.
Transcodificar de forma local con el comando gsutil cp
Para transcodificar los datos de tu mainframe de forma local en el mainframe mediante el comando gsutil cp
, sigue estos pasos:
Crea un trabajo para leer el conjunto de datos de tu mainframe y transcodificarlo al formato ORC, como se muestra en el siguiente comando. Lee los datos del conjunto de datos INFILE y el diseño de registro del COPYBOOK DD. El conjunto de datos de entrada debe ser un archivo de método de acceso secuencial en cola (QSAM) con una longitud de registro fija o variable.
//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 /*
Sustituye
BUCKET_NAME
por el nombre del segmento de Cloud Storage al que quieras copiar los datos del mainframe.Para no tener que especificar variables como los IDs de proyecto y los nombres de los segmentos en cada procedimiento JCL, puede añadirlas a BQSH PROCLIB y hacer referencia a ellas en varios procedimientos JCL como variables de entorno. Este enfoque también te ayuda a disfrutar de una transición fluida entre los entornos de producción y los que no son de producción, ya que las variables específicas de cada entorno se definen en el PROCLIB de BQSH del entorno. Para ver la lista completa de variables de entorno admitidas por Mainframe Connector, consulta Variables de entorno.
En este ejemplo, la entrada estándar (STDIN) se proporciona como datos insertados en el flujo al STDIN DD. También puedes proporcionar esta entrada mediante un nombre de fuente de datos (DSN), lo que facilita la gestión de la sustitución de símbolos.
Si quieres registrar los comandos ejecutados durante este proceso, puedes habilitar las estadísticas de carga.
Crea y envía una tarea de carga de BigQuery que cargue particiones de archivos ORC de
tablename.orc
enMY_DATASET.MY_TABLE
, como se indica a continuación.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/* /*
Haz los cambios siguientes:
BUCKET_NAME
: nombre del segmento de Cloud Storage que contiene los archivos ORC que quieres cargar en BigQuery.PROJECT_NAME
: el nombre del proyecto en el que quieres ejecutar la consulta.
Opcional: Crea y envía un trabajo de consulta de BigQuery que ejecute una lectura de SQL desde el archivo de definición de datos de consulta. Normalmente, la consulta será una instrucción
MERGE
oSELECT INTO DML
que dé como resultado la transformación de una tabla de BigQuery. Ten en cuenta que Mainframe Connector registra métricas de trabajos, pero no escribe los resultados de las consultas en un archivo.Puedes consultar BigQuery de varias formas: de forma insertada, con un conjunto de datos independiente mediante DD o con un conjunto de datos independiente mediante 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/* /*
Haz los cambios siguientes:
PROJECT_NAME
: el nombre del proyecto en el que quieres ejecutar la consulta.LOCATION
: la ubicación en la que se ejecutará la consulta. Te recomendamos que ejecutes la consulta en una ubicación cercana a los datos.
(Opcional) Crea y envía un trabajo de exportación que ejecute una lectura de SQL desde el archivo DD de QUERY y exporte el conjunto de datos resultante a un mainframe como archivo 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 /*
Haz los cambios siguientes:
PROJECT_NAME
: el nombre del proyecto en el que quieres ejecutar la consulta.DATASET_ID
: el ID del conjunto de datos de BigQuery que contiene la tabla que quiere exportar.DESTINATION_TABLE
: la tabla de BigQuery que quiere exportar.
Los datos se exportan al conjunto de datos OUTFILE DD. El diseño del registro se describe en COPYBOOK DD.