Nesta página, explicamos como transcodificar dados de mainframe localmente para um formato compatível, e 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. Nesta página, explicamos como usar o Mainframe Connector para transcodificar dados de mainframe para o formato ORC (colunar de linha otimizado) e salvar os dados no Cloud Storage.
O Mainframe Connector oferece três maneiras de transcodificar dados de mainframe localmente.
- Usando
qsamcomandos (versão 5.16.0 e mais recentes) - Usando o comando
vsam decode(versão 5.18.0 e mais recentes) - Usando o comando
gsutil cp
Vantagens dos comandos qsam e vsam
Os comandos qsam e vsam oferecem as seguintes vantagens:
- Suporte a tipos de dados compostos, incluindo a cláusula OCCURS (listas), a cláusula REDEFINES e registros aninhados. Para mais informações sobre esses tipos de dados, consulte a referência de transcodificação
qsamevsam. - Suporte à configuração do processo de transcodificação por meio de um arquivo de configuração do transcodificador. Esse recurso oferece mais flexibilidade ao decodificar dados para Google Cloud, e codificá-los de volta para o mainframe.
- Suporte à criação de um conjunto de dados de transbordamento, que é uma tabela de erros de transcodificação que pode ser usada para inspeção de erros.
- Suporte a vários formatos de entrada e saída. Esse recurso permite carregar dados de e para vários data warehouses.
Antes de começar
Instale o Mainframe Connector em qualquer conjunto de dados particionado do mainframe que você queira usar como uma biblioteca de procedimentos (PROCLIB).
Mover dados transcodificados localmente no mainframe para Google Cloud
Para transcodificar dados localmente em um mainframe e movê-los para o BigQuery, é necessário realizar as seguintes tarefas:
- Ler e transcodificar um conjunto de dados em um mainframe e fazer upload dele para o Cloud Storage
no formato ORC. Para outros formatos compatíveis apenas com os
qsamouvsamcomandos, consulte TranscodeFormat. A transcodificação é feita durante as operaçõesqsam decode,vsam decodeougsutil cp(com base no comando escolhido), em que um conjunto de dados do código de troca decimal codificado em binário estendido do mainframe (EBCDIC, na sigla em inglês) é convertido para o formato ORC em UTF-8 durante a cópia para um bucket do Cloud Storage. - Carregar o conjunto de dados em uma tabela do BigQuery.
- (Opcional) Executar uma consulta SQL na tabela do BigQuery.
- (Opcional) Exportar 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
qsam ou vsam comandos e o
gsutil cp comando.
Transcodificar localmente usando comandos qsam e vsam
Para transcodificar os dados do mainframe localmente usando comandos qsam ou vsam, siga estas etapas:
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
--transcode-configurationargumento.Se o conjunto de dados de entrada for um arquivo do método de acesso sequencial enfileirado (QSAM, na sigla em inglês) 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, na sigla em inglês) 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_NAMEpelo 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 de linguagem de controle de jobs (JCL, na sigla em inglês), adicione-as na BQSH PROCLIB e faça referência a elas em vários procedimentos de 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.
Neste exemplo, o
DD DataPathé usado para especificar o caminho da configuração do copybook, da entrada e da transcodificação. ConsulteDataPathpara outras opções.Se você quiser registrar os comandos executados durante esse processo, pode ativar as estatísticas de carregamento.
Crie e envie um job de carregamento do BigQuery que carregue partições de arquivos ORC de
tablename.orcparaMY_DATASET.MY_TABLE, conforme mostrado abaixo.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.
(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
MERGEouSELECT INTO DMLque resulta na transformação de uma tabela do BigQuery. O Mainframe Connector faz login nas métricas de jobs, 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.
(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.
É 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.//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 em que 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, arquivo de saída 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:
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, 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_NAMEpelo 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 de JCL, adicione-as na BQSH PROCLIB e faça referência a elas em vários procedimentos de 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 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, é possível fornecer essa entrada usando um nome de fonte de dados (DSN), o que facilita o gerenciamento da substituição de símbolos.
Se você quiser registrar os comandos executados durante esse processo, pode ativar as estatísticas de carregamento.
Crie e envie um job de carregamento do BigQuery que carregue partições de arquivos ORC de
tablename.orcparaMY_DATASET.MY_TABLE, conforme mostrado abaixo.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.
(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
MERGEouSELECT INTO DMLque resulta na transformação de uma tabela do BigQuery. O Mainframe Connector faz login nas métricas de jobs, 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.
(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 \ --allow_large_results \ --location="US" \ --remoteHost <mainframe-connector-url>.a.run.app \ --remotePort 443 /*Substitua:
PROJECT_NAME: o nome do Google Cloud projeto em que você quer executar a consulta.DATASET_ID: o ID do conjunto de dados do BigQuery. Ele é usado como o conjunto de dados de fallback para todos os nomes de tabelas na consulta SQL que não especificam explicitamente um conjunto de dados. Ele também é usado para resolver o local do DESTINATION_TABLE se um conjunto de dados não estiver explicitamente definido na especificação da tabela.DESTINATION_TABLE: uma tabela intermediária do BigQuery em que os resultados da consulta são gravados antes de serem exportados. Isso só é usado seallow_large_resultsestiver definido. Seallow_large_resultsforfalseou omitido, os resultados da consulta serão gravados em uma tabela temporária anônima.
Os dados são exportados para o conjunto de dados OUTFILE DD. O layout do registro é descrito pelo COPYBOOK DD.