Mover dados transcodificados localmente no mainframe para o Google Cloud

Esta página discute como transcodificar dados de mainframe localmente no mainframe para o formato ORC (Optimized Row Columnar) e, em seguida, mover o conteúdo para o BigQuery.

A transcodificação é o processo de conversão de informações de uma forma de representação codificada para outra, neste caso, para ORC. O ORC é um formato de dados orientado por colunas de código aberto muito usado no ecossistema do Apache Hadoop e compatível com o BigQuery.

Antes de começar

Instale o conector de mainframe em qualquer conjunto de dados particionado por mainframe que você quer 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, realize as seguintes tarefas:

  1. Leia e transcodifique um conjunto de dados em um mainframe e faça upload dele no Cloud Storage no formato ORC. A transcodificação é feita durante a operação cp, em que um conjunto de dados de código binário decimal de troca (EBCDIC) de mainframe é convertido para o formato ORC em UTF-8 durante a cópia para um bucket do Cloud Storage.
  2. Carregar 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.

Para realizar essas tarefas, siga estas etapas:

  1. Crie um job para ler o conjunto de dados no mainframe e transcodifique-o para o formato ORC, conforme mostrado a seguir. Leia os dados do conjunto de dados INFILE e o layout de registro do COPYBOOK DD. O conjunto de dados de entrada precisa ser um arquivo de método de acesso sequencial em fila (QSAM, na sigla em inglês) 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: o nome do bucket do Cloud Storage para o qual você quer copiar os dados do mainframe.

    Para evitar a especificação de variáveis, como IDs de projeto e nomes de bucket, em cada procedimento de linguagem de controle de jobs (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 os ambientes de produção e não relacionados à 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 com suporte do Mainframe Connector, consulte Variáveis de ambiente.

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

    Se você 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 my_table.orc para MY_DATASET.MY_TABLE, conforme a seguir.

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

    Substitua:

    • 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 execute uma leitura SQL do arquivo QUERY DD. Normalmente, a consulta será uma instrução MERGE ou SELECT INTO DML que resulta na transformação de uma tabela do BigQuery. O conector de mainframe registra nas métricas do 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 em que 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 QUERY DD 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 que você quer exportar.
    • 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.