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.
- Usar comandos 
qsam(versão 5.16.0 e mais recentes) - Usar o comando 
vsam decode(versão 5.18.0 e mais recente) - Usar o comando 
gsutil cp 
Vantagens dos comandos qsam e vsam
Os comandos qsam e vsam oferecem as seguintes vantagens:
- Suporte para 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
Referência de transcodificação 
qsamevsam. - Suporte para a configuração do processo de transcodificação usando um arquivo de configuração do transcodificador. Esse recurso oferece mais flexibilidade ao decodificar dados para Google Cloud e codificar os dados de volta para o mainframe.
 - Suporte para a 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. Com esse recurso, é possível carregar dados de e para vários data warehouses.
 
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:
- 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
qsamouvsam, 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 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. - Carregue o conjunto de dados em uma tabela do BigQuery.
 - (Opcional) Execute uma consulta SQL na tabela do BigQuery.
 - (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:
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_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 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. ConsulteDataPathpara outras opções.Se quiser registrar os comandos executados durante esse processo, ative as estatísticas de carga.
Crie e envie um job de carregamento do BigQuery que carregue partições de arquivos ORC de
tablename.orcparaMY_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.
(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
MERGEouSELECT INTO DMLque 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.
(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:
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_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 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.
Crie e envie um job de carregamento do BigQuery que carregue partições de arquivos ORC de
tablename.orcparaMY_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.
(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
MERGEouSELECT INTO DMLque 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.
(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.