Mova os dados transcodificados localmente no mainframe para Google Cloud

Esta página aborda a forma como pode transcodificar dados de mainframe localmente no mainframe para um formato suportado e, em seguida, 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. Esta página aborda como pode usar o Mainframe Connector para transcodificar dados do mainframe para o formato de colunas de linhas otimizado (ORC) e, em seguida, guardar os dados no Cloud Storage.

O conetor de mainframe oferece duas formas de transcodificar dados de mainframe localmente no mainframe.

Vantagens dos comandos qsam

Os comandos qsam oferecem as seguintes vantagens:

  • Suporta tipos de dados compostos, incluindo a cláusula OCCURS (listas), a cláusula REDEFINES e registos aninhados. Para mais informações sobre estes tipos de dados, consulte a qsam referência de transcodificação.
  • Suporta a configuração do processo de transcodificação através de um ficheiro de configuração do transcodificador. Esta capacidade oferece mais flexibilidade ao descodificar dados para Google Cloud, e codificar os dados novamente para o mainframe.
  • Suporta a criação de um conjunto de dados de transbordo, que é uma tabela de erros de transcodificação que pode ser usada para inspeção de erros.
  • Suporta vários formatos de entrada e saída. Esta capacidade permite-lhe carregar os seus dados para e a partir de vários armazéns de dados.

Antes de começar

Instale o Mainframe Connector em qualquer conjunto de dados particionado do mainframe que queira usar como uma biblioteca de procedimentos (PROCLIB).

Mova os dados transcodificados localmente no mainframe para o serviço Google Cloud

Para transcodificar dados localmente num mainframe e, em seguida, movê-los para o BigQuery, tem de realizar as seguintes tarefas:

  1. Ler e transcodificar um conjunto de dados num mainframe e carregá-lo para o Cloud Storage no formato ORC (para outros formatos suportados apenas pelo qsam commands, consulte TranscodeFormat). A transcodificação é feita durante as operações qsam decode ou gsutil cp (com base no comando que escolher), em que um conjunto de dados do código de intercâmbio decimal codificado em binário (EBCDIC) do mainframe é convertido para o formato ORC em UTF-8 durante a cópia para um contentor do Cloud Storage.
  2. Carregue o conjunto de dados para 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 secções seguintes descrevem detalhadamente como pode mover dados transcodificados localmente no mainframe para Google Cloud usando comandos qsam e o comando gsutil cp.

Transcodifique localmente com qsam comandos

Para transcodificar os dados do mainframe localmente no mainframe através de comandos qsam, siga estes passos:

  1. Crie uma tarefa para ler o conjunto de dados no mainframe e transcodificá-lo para o formato ORC, conforme mostrado no comando seguinte. Ler os dados do conjunto de dados INFILE e o esquema de registo do COPYBOOK DD. O conjunto de dados de entrada tem de ser um ficheiro do método de acesso sequencial em fila (QSAM) com comprimento de registo fixo ou variável.

    Pode modificar o comportamento predefinido do processo de transcodificação do Mainframe Connector fornecendo um ficheiro de configuração do transcodificador através do 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
    /*
    

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

    Para evitar especificar variáveis, como IDs de projetos e nomes de contentores, em cada procedimento de linguagem de controlo de tarefas (JCL), pode adicioná-las na PROCLIB do BQSH e referenciá-las em vários procedimentos de JCL como variáveis de ambiente. Esta abordagem também ajuda a ter uma transição perfeita entre ambientes de produção e não produção, uma vez que as variáveis específicas do ambiente são definidas no BQSH PROCLIB 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 registar os comandos executados durante este processo, pode ativar as estatísticas de carregamento.

  2. Crie e envie uma tarefa de carregamento do BigQuery que carregue partições de ficheiros ORC de tablename.orc para MY_DATASET.MY_TABLE, da seguinte forma.

    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 o seguinte:

    • BUCKET_NAME: o nome do contentor do Cloud Storage que contém os ficheiros ORC que quer carregar para o BigQuery.
    • PROJECT_NAME: o nome do projeto no qual quer executar a consulta.
  3. (Opcional) Crie e envie uma tarefa de consulta do BigQuery que execute uma leitura SQL a partir do ficheiro DD QUERY. Normalmente, a consulta é uma declaração MERGE ou SELECT INTO DML que resulta na transformação de uma tabela do BigQuery. Tenha em atenção que o Mainframe Connector regista as métricas de tarefas, mas não escreve os resultados das consultas num ficheiro.

    Pode consultar o BigQuery de várias formas: inline, com um conjunto de dados separado através do DD ou com um conjunto de dados separado através do 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 o seguinte:

    • PROJECT_NAME: o nome do projeto no qual quer executar a consulta.
    • LOCATION: a localização onde a consulta vai ser executada. Recomendamos que execute a consulta numa localização próxima dos dados.
  4. (Opcional) Crie e envie uma tarefa de exportação que execute uma leitura SQL a partir do ficheiro DD QUERY e exporte o conjunto de dados resultante para um mainframe como um ficheiro binário.

    Pode modificar o comportamento predefinido do processo de transcodificação do Mainframe Connector fornecendo um ficheiro de configuração do transcodificador através do 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 o seguinte:

    • PROJECT_NAME: o nome do projeto no qual quer executar a consulta.
    • LOCATION: a localização onde a consulta vai ser executada. Recomendamos que execute a consulta numa localização próxima dos dados.

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

Transcodifique localmente com o comando gsutil cp

Para transcodificar os dados do mainframe localmente no mainframe através do comando gsutil cp, siga estes passos:

  1. Crie uma tarefa para ler o conjunto de dados no mainframe e transcodificá-lo para o formato ORC, conforme mostrado no comando seguinte. Ler os dados do conjunto de dados INFILE e o esquema de registo do COPYBOOK DD. O conjunto de dados de entrada tem de ser um ficheiro do método de acesso sequencial em fila (QSAM) com comprimento de registo 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 contentor do Cloud Storage para o qual quer copiar os dados do mainframe.

    Para evitar especificar variáveis, como IDs de projetos e nomes de contentores, em cada procedimento JCL, pode adicioná-las na PROCLIB do BQSH e referenciá-las em vários procedimentos JCL como variáveis de ambiente. Esta abordagem também ajuda a proporcionar uma transição perfeita entre os ambientes de produção e não produção, uma vez que as variáveis específicas do ambiente são definidas na PROCLIB do BQSH do ambiente. Para ver a lista completa de variáveis de ambiente suportadas pelo Mainframe Connector, consulte o artigo Variáveis de ambiente.

    Neste exemplo, a entrada padrão (STDIN) é fornecida como dados na stream ao STDIN DD. Em alternativa, pode fornecer esta entrada através de um nome da origem de dados (DSN), o que facilita a gestão da substituição de símbolos.

    Se quiser registar os comandos executados durante este processo, pode ativar as estatísticas de carregamento.

  2. Crie e envie uma tarefa de carregamento do BigQuery que carregue partições de ficheiros ORC de tablename.orc para MY_DATASET.MY_TABLE, da seguinte forma.

    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 o seguinte:

    • BUCKET_NAME: o nome do contentor do Cloud Storage que contém os ficheiros ORC que quer carregar para o BigQuery.
    • PROJECT_NAME: o nome do projeto no qual quer executar a consulta.
  3. (Opcional) Crie e envie uma tarefa de consulta do BigQuery que execute uma leitura SQL a partir do ficheiro DD QUERY. Normalmente, a consulta é uma declaração MERGE ou SELECT INTO DML que resulta na transformação de uma tabela do BigQuery. Tenha em atenção que o Mainframe Connector regista as métricas de tarefas, mas não escreve os resultados das consultas num ficheiro.

    Pode consultar o BigQuery de várias formas: inline, com um conjunto de dados separado através do DD ou com um conjunto de dados separado através do 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 o seguinte:

    • PROJECT_NAME: o nome do projeto no qual quer executar a consulta.
    • LOCATION: a localização onde a consulta vai ser executada. Recomendamos que execute a consulta numa localização próxima dos dados.
  4. (Opcional) Crie e envie uma tarefa de exportação que execute uma leitura SQL a partir do ficheiro DD QUERY e exporte o conjunto de dados resultante para um mainframe como um ficheiro 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 o seguinte:

    • PROJECT_NAME: o nome do projeto no qual quer executar a consulta.
    • DATASET_ID: o ID do conjunto de dados do BigQuery que contém a tabela que quer exportar.
    • DESTINATION_TABLE: a tabela do BigQuery que quer exportar.

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