Ejecutar Mainframe Connector en modo independiente

Mainframe Connector 5.13.0 y versiones posteriores admiten la ejecución de Mainframe Connector como un trabajo independiente en Google Cloud. Esta función te permite ejecutar Mainframe Connector como un trabajo por lotes contenerizado, por ejemplo, como un trabajo de Cloud Run, un trabajo de Google Kubernetes Engine o en un contenedor de Docker. Esta opción te ayuda a evitar instalar Mainframe Connector de forma local en tu mainframe y te facilita la integración del análisis de archivos de método de acceso secuencial en cola (QSAM) de tu mainframe en los flujos de trabajo de extracción, transformación y carga (ETL) que ya tengas.

Si usas la versión independiente de Mainframe Connector, debes configurar tú mismo el flujo de trabajo de ETL que carga el archivo QSAM en Google Cloud .

Antes de empezar

  • Despliega Mainframe Connector en Cloud Run.
  • Crea una cuenta de servicio o identifica una cuenta de servicio que ya tengas para usarla con Mainframe Connector. Esta cuenta de servicio debe tener permisos para acceder a los cubos de Cloud Storage, los conjuntos de datos de BigQuery y cualquier otro Google Cloud recurso que quieras usar.
  • Asegúrate de que la cuenta de servicio que has creado tenga asignado el rol de invocador de Cloud Run.
  • Asegúrate de que los datos del mainframe ya estén disponibles en Google Cloud como archivo QSAM.

Transcodificar datos con Mainframe Connector en modo independiente en Cloud Run

Mainframe Connector ofrece dos formas de ejecutar Mainframe Connector como un trabajo independiente en Google Cloud:

Ventajas de los comandos de qsam

Los comandos de qsam ofrecen las siguientes ventajas:

Ejecutar Mainframe Connector en modo independiente mediante comandos qsam

Para transcodificar tus datos con Mainframe Connector en modo independiente mediante comandos qsam, sigue estos pasos:

  1. Crea un archivo YAML con comandos para hacer lo siguiente:

    • Leer tu conjunto de datos
    • Transcodifícalo a un formato admitido
    • Súbelo a Cloud Storage

    El conjunto de datos de entrada debe ser un archivo QSAM con una longitud de registro fija o variable. Puedes usar el siguiente archivo YAML de ejemplo para leer tu conjunto de datos, transcodificarlo al formato ORC y subirlo a Cloud Storage.

    En el siguiente ejemplo, usamos el DataPath de Cloud Storage para INFILE, OUTFILE, COPYBOOK y TRANSCODE_CONFIGURATION.

    environmentVariables:
    - name: "INFILE"
      value: "INFILE"
    - name: "OUTFILE"
      value: "OUTFILE"
    - name: "COPYBOOK"
      value: "COPYBOOK"
    - name: "TRANSCODE_CONFIGURATION"
      value: "TRANSCODE_CONFIGURATION"
    - name: "LOG_PROJECT"
      value: "LOG_PROJECT"
    - name: "IBM_JAVA_OPTIONS"
      value: "-XX:+UseContainerSupport"
    
    command:
      qsam decode $INFILE $OUTFILE
      --copybook $COPYBOOK
      --transcode-configuration ${TRANSCODE_CONFIGURATION}
      --output-format orc
      --parallelism 8
      --chunk-size "512Mib"
    

    Haz los cambios siguientes:

    • INFILE: el nombre del archivo de entrada.
    • OUTFILE: el nombre del archivo de salida.
    • COPYBOOK_PATH: ruta al copybook DD.
    • TRANSCODE_CONFIGURATION_PATH: ruta al archivo de configuración de transcodificación.
    • LOG_PROJECT: nombre del proyecto de registro.

    A continuación, se muestra un ejemplo de archivo YAML:

    environmentVariables:
    - name: "INFILE"
      value: "gs://my_bucket/my/input.dat"
    - name: "OUTFILE"
      value: "gs://my_bucket/my/output.orc"
    - name: "COPYBOOK"
      value: "gs://my_bucket/my/copybook.cpy"
    - name: "TRANSCODE_CONFIGURATION"
      value: "gs://my_bucket/my/transcode-configuration-file.json"
    - name: "LOG_PROJECT"
      value: "the log project"
    - name: "IBM_JAVA_OPTIONS"
      value: "-XX:+UseContainerSupport"
    command:
      qsam decode $INFILE $OUTFILE
      --copybook $COPYBOOK
      --transcode-configuration ${TRANSCODE_CONFIGURATION}
      --output-format orc
      --parallelism 8
      --chunk-size "512Mib"
    
  2. Crea un archivo job.yaml con el siguiente comando.

    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
                command:
                - bash
                - /opt/mainframe-connector/standalone.sh
                - --argsFrom
                - LOCATION_OF_THE_COMMAND_YAML_FILE
    

    Haz los cambios siguientes:

    • JOB: el nombre de tu tarea de Cloud Run. Los nombres de los trabajos deben tener 49 caracteres como máximo y ser únicos por región y proyecto.
    • IMAGE: la URL de la imagen del contenedor de trabajo. Por ejemplo: us-docker.pkg.dev/cloudrun/container/job:latest.
    • LOCATION_OF_THE_COMMAND_YAML_FILE: la ubicación del archivo YAML que has creado en el paso anterior.
  3. Implementa el nuevo trabajo con el siguiente comando:

    gcloud run jobs replace job.yaml
    
  4. Ejecuta el trabajo con el siguiente comando:

    gcloud run jobs execute JOB_NAME

    Sustituye JOB_NAME por el nombre del trabajo.

Para obtener más información sobre cómo crear y ejecutar una tarea de Cloud Run, consulta los artículos Crear una tarea y Ejecutar una tarea.

Ejecutar Mainframe Connector en modo independiente con el comando gsutil cp

Para transcodificar tus datos con Mainframe Connector en modo independiente mediante el comando gsutil cp, sigue estos pasos:

  1. Crea un archivo YAML con comandos para hacer lo siguiente:

    • Leer tu conjunto de datos
    • Transcodificarlo a ORC
    • Súbelo a Cloud Storage

    El conjunto de datos de entrada debe ser un archivo QSAM con una longitud de registro fija o variable. Puedes usar el siguiente archivo YAML de ejemplo para leer tu conjunto de datos, transcodificarlo al formato ORC y subirlo a Cloud Storage.

    En el siguiente ejemplo, se leen los datos del conjunto de datos INFILE y el diseño del registro del COPYBOOK DD.

    environmentVariables:
    - name: "INFILE"
      value: "INFILE"
    - name: "INFILE_DSN"
      value: "INFILE_DSN"
    - name: "GCSDSNURI"
      value: "INFILE_DSN_FILEPATH"
    - name: "COPYBOOK"
      value: "COPYBOOK_FILEPATH"
    - name: "LOG_PROJECT"
      value: "LOG_PROJECT"
    - name: "IBM_JAVA_OPTIONS"
      value: "-XX:+UseContainerSupport"
    command:
      gsutil cp gs://outputbucket/output
      --parallelism 8
      --maxChunkSize "512Mib"
      --parser_type=copybook
    

    Haz los cambios siguientes:

    • INFILE: el nombre del archivo de entrada.
    • INFILE_DSN: el nombre del archivo de nombre de fuente de datos (DSN) de entrada.
    • INFILE_DSN_FILEPATH: la ruta al archivo DSN de entrada.
    • COPYBOOK_FILEPATH: ruta al copybook DD.
    • LOG_PROJECT: nombre del proyecto de registro.

    A continuación, se muestra un ejemplo de archivo YAML:

      environmentVariables:
      - name: "INFILE"
        value: "input.dat"
      - name: "INFILE_DSN"
        value: "input.dat"
      - name: "GCSDSNURI"
        value: "gs://inputbucket/inputfolder"
      - name: "COPYBOOK"
        value: "gs://inputbucket/copybook.cpy"
      - name: "LOG_PROJECT"
        value: "the log project"
      - name: "IBM_JAVA_OPTIONS"
        value: "-XX:+UseContainerSupport"
      command:
        gsutil cp gs://outputbucket/output
        --parallelism 8
        --maxChunkSize "512Mib"
        --parser_type=copybook
    

    Para ver la lista completa de variables de entorno admitidas por Mainframe Connector, consulta Variables de entorno.

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

  2. Crea un archivo job.yaml con el siguiente comando.

    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
                command:
                - bash
                - /opt/mainframe-connector/standalone.sh
                - --argsFrom
                - LOCATION_OF_THE_COMMAND_YAML_FILE
    

    Haz los cambios siguientes:

    • JOB: el nombre de tu tarea de Cloud Run. Los nombres de los trabajos deben tener 49 caracteres como máximo y ser únicos por región y proyecto.
    • IMAGE: la URL de la imagen del contenedor de trabajo. Por ejemplo: us-docker.pkg.dev/cloudrun/container/job:latest.
    • LOCATION_OF_THE_COMMAND_YAML_FILE: la ubicación del archivo YAML que has creado en el paso anterior.
  3. Implementa el nuevo trabajo con el siguiente comando:

    gcloud run jobs replace job.yaml
    
  4. Ejecuta el trabajo con el siguiente comando:

    gcloud run jobs execute JOB_NAME

    Sustituye JOB_NAME por el nombre del trabajo.

Para obtener más información sobre cómo crear y ejecutar una tarea de Cloud Run, consulta los artículos Crear una tarea y Ejecutar una tarea.

Exportar una tabla de BigQuery a un conjunto de datos de Mainframe

Para exportar una tabla de BigQuery a un conjunto de datos de mainframe, puedes crear un archivo YAML que ejecute una lectura de SQL desde el archivo DD QUERY y exporte el conjunto de datos resultante a Cloud Storage como un archivo binario, tal como se indica a continuación.

Los pasos para crear y ejecutar el trabajo de Cloud Run son los mismos que se mencionan en la sección Transcodificar datos con Mainframe Connector en modo independiente en Cloud Run. La única diferencia son las instrucciones mencionadas en el archivo YAML. Mainframe Connector ofrece dos formas de exportar tablas de BigQuery:

  • Usar comandos de qsam (versión 5.16.0 y posteriores)
  • Usar el comando bq export

Usar comandos de qsam

environmentVariables:
  - name: "QUERY"
    value: "QUERY_PATH"
  - name: "OUTFILE"
    value: "OUTFILE"
  - name: "COPYBOOK"
    value: "COPYBOOK_PATH"
  - name: "TRANSCODE_CONFIGURATION"
    value: "TRANSCODE_CONFIGURATION_PATH"
  - name: "PROJECT_ID"
    value: "PROJECT_ID"
  - name: "LOCATION"
    value: "LOCATION"
  - name: "LOG_PROJECT"
    value: "LOG_PROJECT"
  - name: "IBM_JAVA_OPTIONS"
    value: "-XX:+UseContainerSupport"
command:
qsam encode \
  $QUERY
  $OUTFILE
  --copybook ${COPYBOOK_PATH}
  --transcode-configuration ${TRANSCODE_CONFIGURATION_PATH}
  --input-format=BIGQUERY \
  --input-parameter project_id=${PROJECT_ID} \
  --input-parameter location=${LOCATION}

Haz los cambios siguientes:

  • QUERY_PATH: la consulta de SQL que se va a ejecutar. El resultado de la consulta se codificará en un archivo binario.
  • OUTFILE: el segmento de Cloud Storage que contendrá el archivo binario de salida.
  • COPYBOOK_PATH: ruta al copybook DD.
  • TRANSCODE_CONFIGURATION_PATH: ruta al archivo de configuración del transcodificador.
  • LOG_PROJECT: nombre del proyecto de registro.
  • PROJECT_ID: el ID del proyecto en el que quieres ejecutar la consulta.
  • LOCATION: región o multirregión en la que se ejecutará la consulta. Te recomendamos que ejecutes la consulta en una ubicación cercana a los datos. El valor predeterminado es US.

A continuación, se muestra un ejemplo de archivo YAML:

environmentVariables:
- name: "QUERY"
  value: "gs://my_bucket/my/input.sql"
- name: "OUTFILE"
  value: "gs://my_bucket/my/output.orc"
- name: "COPYBOOK"
  value: "gs://my_bucket/my/copybook.cpy"
- name: "TRANSCODE_CONFIGURATION"
  value: "gs://my_bucket/my/transcode-configuration-file.json"
- name: "PROJECT_ID"
  value: "my-project"
- name: "LOCATION"
  value: "US"
- name: "LOG_PROJECT"
  value: "my-log-project"
- name: "IBM_JAVA_OPTIONS"
  value: "-XX:+UseContainerSupport"
  command:
  qsam encode \
    $QUERY
    $OUTFILE
    --copybook ${COPYBOOK_PATH}
    --transcode-configuration ${TRANSCODE_CONFIGURATION_PATH}
    --input-format=BIGQUERY \
    --input-parameter project_id=${PROJECT_ID} \
    --input-parameter location=${LOCATION}

Usar el comando bq export

environmentVariables:
- name: "COPYBOOK"
  value: "COPYBOOK_FILEPATH"
- name: "LOG_PROJECT"
  value: "LOG_PROJECT"
- name: "IBM_JAVA_OPTIONS"
  value: "-XX:+UseContainerSupport"
command:
  bq export --project_id="PROJECT_NAME" --location="LOCATION" --sql="select * from project.dataset.table" --bucket="BUCKET"

Haz los cambios siguientes:

  • COPYBOOK_FILEPATH: ruta al copybook DD.
  • LOG_PROJECT: nombre del proyecto de registro.
  • 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.
  • BUCKET: el URI de Cloud Storage que contendrá el archivo binario de salida.

A continuación, se muestra un ejemplo de archivo YAML:

environmentVariables:
- name: "COPYBOOK"
  value: "gs://inputbucket/copybook.cpy"
- name: "LOG_PROJECT"
  value: "my-log-project"
- name: "IBM_JAVA_OPTIONS"
  value: "-XX:+UseContainerSupport"
command:
  bq export --project_id="my-project" --run_mode="gcsoutput" --location=US --sql="select * from project.dataset.table" --bucket="gs://outputbucket/data.dat"