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
qsame avsamreferê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
qsamouvsam, consulte TranscodeFormat). A transcodificação é feita durante as operaçõesqsam decode,vsam decodeougsutil 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_NAMEpelo 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. ConsulteDataPathpara 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.orcparaMY_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
MERGEouSELECT INTO DMLque 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_NAMEpelo 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.orcparaMY_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
MERGEouSELECT INTO DMLque 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.