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. Esta página mostra 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 duas maneiras de transcodificar dados do mainframe localmente.
- Usar comandos
qsam
(versão 5.16.0 e mais recentes) - Usar o comando
gsutil cp
Vantagens dos comandos qsam
Os comandos qsam
oferecem as seguintes vantagens:
- Compatível com 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
qsam
. - Oferece suporte à configuração do processo de transcodificação por um arquivo de configuração do transcoder. Esse recurso oferece mais flexibilidade ao decodificar dados para Google Cloud e codificar os dados de volta para o mainframe.
- Permite 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.
- Compatível com 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 o
qsam commands
, consulte TranscodeFormat. A transcodificação é feita durante as operaçõesqsam decode
ougsutil 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 o Google Cloud usando comandos qsam
e o comando gsutil cp
.
Transcodificar localmente usando comandos qsam
Para transcodificar os dados do mainframe localmente usando comandos qsam
, 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.
É 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
.//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 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. ConsulteDataPath
para 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.orc
paraMY_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
MERGE
ouSELECT INTO DML
que 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_NAME
pelo 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.orc
paraMY_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
MERGE
ouSELECT INTO DML
que 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 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.