Mover dados transcodificados localmente no mainframe para o Google Cloud

Nesta página, explicamos como transcodificar dados do mainframe localmente para um formato compatível e mover o conteúdo para o BigQuery. A transcodificação é o processo de converter informações de uma forma de representação codificada para outra. Nesta página, explicamos como usar o conector de mainframe para transcodificar dados do mainframe para ORC (Optimized Row Columnar) e salvar os dados no Cloud Storage.

O Mainframe Connector oferece três maneiras de transcodificar dados do mainframe localmente no mainframe.

Vantagens dos comandos qsam e vsam

Os comandos qsam e vsam oferecem as seguintes vantagens:

Antes de começar

Instale o conector de mainframe em qualquer conjunto de dados particionado por mainframe que você queira usar como uma biblioteca de procedimentos (PROCLIB).

Mover dados transcodificados localmente no mainframe para o Google Cloud

Para transcodificar dados localmente em um mainframe e movê-los para o BigQuery, faça o seguinte:

  1. Leia e transcode um conjunto de dados em um mainframe e faça upload dele para o Cloud Storage no formato ORC. Para outros formatos compatíveis apenas com os comandos qsam ou vsam, consulte TranscodeFormat. A transcodificação é feita durante as operações qsam decode, vsam decode ou gsutil cp (com base no comando escolhido), em que um conjunto de dados de código de troca decimal codificado em binário estendido (EBCDIC) do mainframe é convertido para o formato ORC em UTF-8 durante a cópia para um bucket do Cloud Storage.
  2. Carregue o conjunto de dados em uma tabela do BigQuery.
  3. (Opcional) Execute uma consulta SQL na tabela do BigQuery.
  4. (Opcional) Exporte dados do BigQuery de volta para o mainframe.

As seções a seguir descrevem em detalhes como mover dados transcodificados localmente no mainframe para Google Cloud usando comandos qsam ou vsam e o comando gsutil cp.

Transcodificar localmente usando os comandos qsam e vsam

Para transcodificar os dados do mainframe localmente usando os comandos qsam ou vsam, siga estas etapas:

  1. Crie um job para ler o conjunto de dados no mainframe e transcodificá-lo para o formato ORC, conforme mostrado no comando a seguir. Leia os dados do conjunto de dados INFILE e o layout do registro do COPYBOOK DD.

    É possível modificar o comportamento padrão do processo de transcodificação do Mainframe Connector fornecendo um arquivo de configuração do transcodificador usando o argumento --transcode-configuration.

    • Se o conjunto de dados de entrada for um arquivo do método de acesso sequencial enfileirado (QSAM) com comprimento de registro fixo ou variável, use o seguinte comando:

      //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
      /*
      
    • Se o conjunto de dados de entrada for um arquivo do método de acesso de armazenamento virtual (VSAM) com comprimento de registro fixo ou variável, use o seguinte comando:

      //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
      vsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename
      /*
      

    Substitua BUCKET_NAME pelo nome do bucket do Cloud Storage para o qual você quer copiar os dados do mainframe.

    Para evitar especificar variáveis como IDs de projetos e nomes de buckets em cada procedimento da linguagem de controle de jobs (JCL), adicione-as na PROCLIB BQSH e faça referência a elas em vários procedimentos da JCL como variáveis de ambiente. Essa abordagem também ajuda a fazer uma transição perfeita entre ambientes de produção e não produção, já que as variáveis específicas do ambiente são definidas na PROCLIB do BQSH do ambiente.

    Neste exemplo, o DD DataPath é usado para especificar o caminho do copybook, da entrada e da configuração de transcodificação. Consulte DataPath para outras opções.

    Se quiser registrar os comandos executados durante esse processo, ative as estatísticas de carga.

  2. Crie e envie um job de carregamento do BigQuery que carregue partições de arquivos ORC de tablename.orc para MY_DATASET.MY_TABLE, da seguinte maneira:

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

    Substitua:

    • BUCKET_NAME: o nome do bucket do Cloud Storage que contém os arquivos ORC que você quer carregar no BigQuery.
    • PROJECT_NAME: o nome do projeto em que você quer executar a consulta.
  3. (Opcional) Crie e envie um job de consulta do BigQuery que executa uma leitura SQL do arquivo DD de consulta. Normalmente, a consulta é uma instrução MERGE ou SELECT INTO DML que resulta na transformação de uma tabela do BigQuery. O Mainframe Connector faz login nas métricas de job, mas não grava os resultados da consulta em um arquivo.

    É possível consultar o BigQuery de várias maneiras: inline, com um conjunto de dados separado usando DD ou com um conjunto de dados separado usando 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/*
    /*
    

    Substitua:

    • PROJECT_NAME: o nome do projeto em que você quer executar a consulta.
    • LOCATION: o local onde a consulta será executada. Recomendamos que você execute a consulta em um local próximo aos dados.
  4. (Opcional) Crie e envie um job de exportação que execute uma leitura SQL do arquivo DD de consulta e exporte o conjunto de dados resultante para um mainframe como um arquivo binário.

    É possível modificar o comportamento padrão do processo de transcodificação do Mainframe Connector fornecendo um arquivo de configuração do transcoder usando o 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/*
    /*
    

    Substitua:

    • PROJECT_NAME: o nome do projeto em que você quer executar a consulta.
    • LOCATION: o local onde a consulta será executada. Recomendamos que você execute a consulta em um local próximo aos dados.

    Os dados são exportados para o conjunto de dados OUTFILE DD. O layout do registro é descrito pelo COPYBOOK DD. Para outras opções de copybook, outfile e caminhos de configuração de transcodificação, consulte DataPath.

Transcodificar localmente usando o comando gsutil cp

Para transcodificar os dados do mainframe localmente usando o comando gsutil cp, siga estas etapas:

  1. Crie um job para ler o conjunto de dados no mainframe e transcodificá-lo para o formato ORC, conforme mostrado no comando a seguir. Leia os dados do conjunto de dados INFILE e o layout do registro do COPYBOOK DD.

    O conjunto de dados de entrada precisa ser um arquivo do método de acesso sequencial enfileirado (QSAM) com comprimento de registro fixo ou variável.

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

    Substitua BUCKET_NAME pelo nome do bucket do Cloud Storage para o qual você quer copiar os dados do mainframe.

    Para evitar especificar variáveis como IDs de projetos e nomes de buckets em cada procedimento JCL, adicione-as à PROCLIB do BQSH e faça referência a elas em vários procedimentos JCL como variáveis de ambiente. Essa abordagem também ajuda a fazer uma transição perfeita entre ambientes de produção e não produção, já que as variáveis específicas do ambiente são definidas na BQSH PROCLIB do ambiente. Para conferir a lista completa de variáveis de ambiente compatíveis com o Mainframe Connector, consulte Variáveis de ambiente.

    Neste exemplo, a entrada padrão (STDIN) é fornecida como dados no stream para a DD STDIN. Como alternativa, você pode fornecer essa entrada usando um nome da fonte de dados (DSN), o que facilita o gerenciamento da substituição de símbolos.

    Se quiser registrar os comandos executados durante esse processo, ative as estatísticas de carga.

  2. Crie e envie um job de carregamento do BigQuery que carregue partições de arquivos ORC de tablename.orc para MY_DATASET.MY_TABLE, da seguinte maneira:

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

    Substitua:

    • BUCKET_NAME: o nome do bucket do Cloud Storage que contém os arquivos ORC que você quer carregar no BigQuery.
    • PROJECT_NAME: o nome do projeto em que você quer executar a consulta.
  3. (Opcional) Crie e envie um job de consulta do BigQuery que executa uma leitura SQL do arquivo DD de consulta. Normalmente, a consulta é uma instrução MERGE ou SELECT INTO DML que resulta na transformação de uma tabela do BigQuery. O Mainframe Connector faz login nas métricas de job, mas não grava os resultados da consulta em um arquivo.

    É possível consultar o BigQuery de várias maneiras: inline, com um conjunto de dados separado usando DD ou com um conjunto de dados separado usando 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/*
    /*
    

    Substitua:

    • PROJECT_NAME: o nome do projeto em que você quer executar a consulta.
    • LOCATION: o local onde a consulta será executada. Recomendamos que você execute a consulta em um local próximo aos dados.
  4. (Opcional) Crie e envie um job de exportação que execute uma leitura SQL do arquivo DD de consulta e exporte o conjunto de dados resultante para um mainframe como um arquivo binário.

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

    Substitua:

    • PROJECT_NAME: o nome do projeto em que você quer executar a consulta.
    • DATASET_ID: o ID do conjunto de dados do BigQuery que contém a tabela a ser exportada.
    • DESTINATION_TABLE: a tabela do BigQuery que você quer exportar.

    Os dados são exportados para o conjunto de dados OUTFILE DD. O layout do registro é descrito pelo COPYBOOK DD.