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 ORC (armazenamento de colunas otimizado para linhas) e, em seguida, guardar os dados no Cloud Storage.
O conetor de mainframe oferece três formas de transcodificar dados de mainframe localmente no mainframe.
- Usar comandos
qsam
(versão 5.16.0 e posteriores) - Usar o comando
vsam decode
(versão 5.18.0 e posteriores) - 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 registos aninhados. Para mais informações sobre estes tipos de dados, consulte a
qsam
e avsam
referência de transcodificação. - Suporte para 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.
- Suporte para 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.
- Suporte de 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 Google Cloud
Para transcodificar dados localmente num mainframe e, em seguida, movê-los para o BigQuery, tem de realizar as seguintes tarefas:
- Ler e transcodificar um conjunto de dados num mainframe e carregá-lo para o Cloud Storage
no formato ORC (para outros formatos suportados apenas pelos comandos
qsam
ouvsam
, consulte TranscodeFormat). A transcodificação é feita durante as operaçõesqsam decode
,vsam decode
ougsutil cp
(com base no comando que escolher), em que um conjunto de dados de código de intercâmbio decimal codificado em binário (EBCDIC) estendido do mainframe é convertido para o formato ORC em UTF-8 durante a cópia para um contentor do Cloud Storage. - Carregue o conjunto de dados para uma tabela do BigQuery.
- (Opcional) Execute uma consulta SQL na tabela do BigQuery.
- (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
qsam
ou comandos vsam
e o comando
gsutil cp
.
Transcodifique localmente com os comandos qsam
e vsam
Para transcodificar os dados do mainframe localmente no mainframe através dos comandos qsam
ou vsam
, siga estes passos:
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.
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
.Se o seu conjunto de dados de entrada for um ficheiro do método de acesso sequencial em fila (QSAM) com um comprimento de registo 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 seu conjunto de dados de entrada for um ficheiro do método de acesso ao armazenamento virtual (VSAM) com um comprimento de registo 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_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 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 registar os comandos executados durante este processo, pode ativar as estatísticas de carregamento.
Crie e envie uma tarefa de carregamento do BigQuery que carregue partições de ficheiros ORC de
tablename.orc
paraMY_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.
(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
ouSELECT INTO DML
que resulta na transformação de uma tabela do BigQuery. Tenha em atenção que o conector de mainframe 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.
(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 computador central 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:
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 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.
Crie e envie uma tarefa de carregamento do BigQuery que carregue partições de ficheiros ORC de
tablename.orc
paraMY_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.
(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
ouSELECT INTO DML
que resulta na transformação de uma tabela do BigQuery. Tenha em atenção que o conector de mainframe 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.
(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 computador central 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.