Mover dados transcodificados localmente no mainframe para o Google Cloud

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

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

Antes de começar

Instalar o conector de mainframe para qualquer conjunto de dados particionado de mainframe que você queira usar como 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. Ler e transcodificar um conjunto de dados em um mainframe e fazer upload dele para o Cloud Storage em formato ORC. A transcodificação é feita durante a operação cp, em que um mainframe estendido de código de intercâmbio decimal codificado binário (EBCDIC) é convertido para o formato ORC em UTF-8 durante a cópia em um do 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.

Para realizar essas tarefas, siga estas etapas:

  1. Criar um job para ler o conjunto de dados no seu mainframe e transcodificá-lo para ORC da maneira 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 a qual você quer copiar os dados do mainframe.

    Evitar especificar variáveis como IDs de projetos e nomes de buckets em cada job de linguagem de controle de acesso (JCL), é possível adicioná-los ao BQSH PROCLIB e referenciá-las em vários procedimentos JCL como variáveis de ambiente. Isso abordagem também ajuda a oferecer uma transição perfeita entre a produção e ambientes que não sejam de produção, já que variáveis específicas do ambiente são definidas no o BQSH PROCLIB do seu ambiente. Neste exemplo, a entrada padrão (STDIN) é fornecida como dados in-stream para o STDIN DD. Como alternativa, você pode fornecer essa entrada usando um nome de fonte de dados (DSN), 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 carregamento.

  2. Criar e enviar um job de carregamento do BigQuery que carregue partições de arquivos ORC de my_table.orc para MY_DATASET.MY_TABLE, conforme segue.

    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ê quiser executar a consulta.
  3. (Opcional) Criar e enviar um job de consulta do BigQuery que execute uma leitura de SQL QUERY DD file. Normalmente, a consulta será MERGE ou SELECT INTO DML. que resulta na transformação de uma tabela do BigQuery. Observação que o conector de mainframe registra as métricas do job, mas não grava consultas resultados 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ê quiser executar a consulta.
    • LOCATION: o local em que a consulta será feita. executada. Recomendamos que você execute a consulta em um local próximo ao 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ê deseja 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 de gravação é descritos pelo COPYBOOK DD.