Cómo mover datos transcodificados de forma local en la unidad central a Google Cloud

En esta página, se explica cómo puedes transcodificar datos de mainframe de forma local en el mainframe al formato Optimized Row Columnar (ORC) y, luego, mover el contenido a BigQuery.

La transcodificación es el proceso de convertir información de una forma de representación codificada a otra, en este caso, a ORC. ORC es un formato de datos orientado a columnas de código abierto que se usa ampliamente en el ecosistema de Apache Hadoop y que es compatible con BigQuery.

Mainframe Connector proporciona dos formas en las que puedes transcodificar datos de mainframe de forma local en el mainframe.

Ventajas de los comandos qsam

Los comandos qsam proporcionan las siguientes ventajas:

  • Admite tipos de datos compuestos, como la cláusula OCCURS (listas), la cláusula REDEFINES y 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 a través de un archivo de configuración del transcodificador. Esto ofrece más flexibilidad cuando se decodifican datos en Google Cloudy se vuelven a codificar en el mainframe.
  • Admite la creación de un conjunto de datos de desbordamiento, que es una tabla de errores de transcodificación que se puede usar para la inspección de errores.

Antes de comenzar

Instala Mainframe Connector en cualquier conjunto de datos particionado en una unidad central que quieras usar como biblioteca de procedimientos (PROCLIB).

Cómo mover datos transcodificados de forma local en la unidad central a Google Cloud

Para transcodificar datos de forma local en un mainframe y, luego, transferirlos a BigQuery, debes realizar las siguientes tareas:

  1. Leer y transcodificar un conjunto de datos en una unidad central y subirlo a Cloud Storage en formato ORC La transcodificación se realiza durante las operaciones qsam decode o gsutil cp (según el comando que elijas), en las que un conjunto de datos de código de intercambio decimal codificado en binario extendido (EBCDIC) de mainframe se convierte al formato ORC en UTF-8 durante la copia en un bucket de Cloud Storage.
  2. Carga el conjunto de datos en una tabla de BigQuery.
  3. Ejecuta una consulta en SQL en la tabla de BigQuery (opcional).
  4. Exporta los datos de BigQuery al mainframe (opcional).

En las siguientes secciones, se describe en detalle cómo puedes mover datos transcodificados de forma local en el mainframe a Google Cloud con los comandos qsam y el comando gsutil cp.

Transcodifica de forma local con los comandos qsam

Para transcodificar tus datos de mainframe de forma local en tu mainframe con comandos qsam, sigue estos pasos:

  1. Crea un trabajo para leer el conjunto de datos en tu mainframe y transcódigo 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 DD COPYBOOK. 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.

    Para modificar el comportamiento predeterminado del proceso de transcodificación del conector de Mainframe, proporciona un archivo de configuración del transcodificador con 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
    /*
    

    Reemplaza BUCKET_NAME por el nombre del bucket de Cloud Storage al que deseas copiar los datos del mainframe.

    Para evitar especificar variables, como los IDs de proyecto y los nombres de bucket en cada procedimiento de lenguaje de control de trabajos (JCL), puedes agregarlos en BQSH PROCLIB y hacer referencia a ellos en varios procedimientos de JCL como variables de entorno. Este enfoque también te ayuda a realizar una transición sin problemas entre los entornos de producción y los que no son de producción, ya que las variables específicas del entorno se configuran en la PROCLIB de BQSH del entorno.

    En este ejemplo, se usa DD DataPath para especificar la ruta de acceso del libro de copia, la entrada y la configuración de transcodificación. Consulta DataPath para conocer otras opciones.

    Si deseas registrar los comandos ejecutados durante este proceso, puedes habilitar las estadísticas de carga.

  2. Crea y envía un trabajo de carga de BigQuery que cargue las particiones de archivos ORC de tablename.orc en MY_DATASET.MY_TABLE, de la siguiente manera.

    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/*
    /*
    

    Reemplaza lo siguiente:

    • BUCKET_NAME: Es el nombre del bucket de Cloud Storage que contiene los archivos ORC que se cargarán en BigQuery.
    • PROJECT_NAME: Es el nombre del proyecto en el que deseas ejecutar la consulta.
  3. (Opcional) Crea y envía un trabajo de consulta de BigQuery que ejecute una operación de lectura de SQL desde el archivo DD de QUERY. Por lo general, la consulta será una sentencia MERGE o SELECT INTO DML que genera la transformación de una tabla de BigQuery. Ten en cuenta que el conector de Mainframe registra las métricas de trabajo, pero no escribe los resultados de la consulta en un archivo.

    Puedes consultar BigQuery de varias maneras: intercalada, 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/*
    /*
    

    Reemplaza lo siguiente:

    • PROJECT_NAME: Es el nombre del proyecto en el que deseas ejecutar la consulta.
    • LOCATION: Es la ubicación en la que se ejecutará la consulta. Te recomendamos que ejecutes la consulta en una ubicación cercana a los datos.
  4. (Opcional) Crea y envía un trabajo de exportación que ejecute una operación de lectura de SQL desde el archivo DD QUERY y exporte el conjunto de datos resultante a un mainframe como un archivo binario.

    Para modificar el comportamiento predeterminado del proceso de transcodificación del conector de Mainframe, proporciona un archivo de configuración del transcodificador con 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/*
    /*
    

    Reemplaza lo siguiente:

    • PROJECT_NAME: Es el nombre del proyecto en el que deseas ejecutar la consulta.
    • LOCATION: Es 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 COPYBOOK DD describe el diseño del registro. Para conocer otras opciones de libro de copia, archivo de salida y rutas de configuración de transcodificación, consulta DataPath.

Cómo transcodificar de forma local con el comando gsutil cp

Para transcodificar tus datos de mainframe de forma local con el comando gsutil cp, sigue estos pasos:

  1. Crea un trabajo para leer el conjunto de datos en tu mainframe y transcódigo 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 DD COPYBOOK. 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
    /*
    

    Reemplaza BUCKET_NAME por el nombre del bucket de Cloud Storage al que deseas copiar los datos del mainframe.

    Para evitar especificar variables, como los IDs de proyecto y los nombres de bucket en cada procedimiento JCL, puedes agregarlas en BQSH PROCLIB y hacer referencia a ellas en varios procedimientos JCL como variables de entorno. Este enfoque también ayuda a brindarte una transición fluida entre entornos de producción y no de producción, ya que las variables específicas del entorno se establecen en la PROCLIB de BQSH del entorno. Para obtener la lista completa de las variables de entorno compatibles con el conector de Mainframe, consulta Variables de entorno.

    En este ejemplo, la entrada estándar (STDIN) se proporciona como datos en el flujo al DD STDIN. Como alternativa, puedes proporcionar esta entrada con un nombre de fuente de datos (DSN), lo que facilita la administración de la sustitución de símbolos.

    Si deseas registrar los comandos ejecutados durante este proceso, puedes habilitar las estadísticas de carga.

  2. Crea y envía un trabajo de carga de BigQuery que cargue las particiones de archivos ORC de tablename.orc en MY_DATASET.MY_TABLE, de la siguiente manera.

    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/*
    /*
    

    Reemplaza lo siguiente:

    • BUCKET_NAME: Es el nombre del bucket de Cloud Storage que contiene los archivos ORC que se cargarán en BigQuery.
    • PROJECT_NAME: Es el nombre del proyecto en el que deseas ejecutar la consulta.
  3. (Opcional) Crea y envía un trabajo de consulta de BigQuery que ejecute una operación de lectura de SQL desde el archivo DD de QUERY. Por lo general, la consulta será una sentencia MERGE o SELECT INTO DML que genera la transformación de una tabla de BigQuery. Ten en cuenta que el conector de Mainframe registra las métricas de trabajo, pero no escribe los resultados de la consulta en un archivo.

    Puedes consultar BigQuery de varias maneras: intercalada, 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/*
    /*
    

    Reemplaza lo siguiente:

    • PROJECT_NAME: Es el nombre del proyecto en el que deseas ejecutar la consulta.
    • LOCATION: Es la ubicación en la que se ejecutará la consulta. Te recomendamos que ejecutes la consulta en una ubicación cercana a los datos.
  4. (Opcional) Crea y envía un trabajo de exportación que ejecute una operación de lectura de SQL desde el archivo DD QUERY y exporte el conjunto de datos resultante a un mainframe como un 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
    /*
    

    Reemplaza lo siguiente:

    • PROJECT_NAME: Es el nombre del proyecto en el que deseas ejecutar la consulta.
    • DATASET_ID: El ID del conjunto de datos de BigQuery que contiene la tabla que deseas exportar.
    • DESTINATION_TABLE: Es la tabla de BigQuery que deseas exportar.

    Los datos se exportan al conjunto de datos OUTFILE DD. El COPYBOOK DD describe el diseño del registro.