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 de colunas de linhas otimizado (ORC) e, em seguida, guardar os dados no Cloud Storage.
O conetor de mainframe oferece duas formas de transcodificar dados de mainframe localmente no mainframe.
- Usar comandos
qsam
(versão 5.16.0 e posteriores) - Usar o comando
gsutil cp
Vantagens dos comandos qsam
Os comandos qsam
oferecem as seguintes vantagens:
- Suporta 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
referência de transcodificação. - Suporta 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.
- Suporta 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.
- Suporta 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 serviç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 pelo
qsam commands
, consulte TranscodeFormat). A transcodificação é feita durante as operaçõesqsam decode
ougsutil cp
(com base no comando que escolher), em que um conjunto de dados do código de intercâmbio decimal codificado em binário (EBCDIC) 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 comandos qsam
e o comando gsutil cp
.
Transcodifique localmente com qsam
comandos
Para transcodificar os dados do mainframe localmente no mainframe através de comandos qsam
, 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.
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
.//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 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 BQSH PROCLIB 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 Mainframe Connector 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 mainframe 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 os 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 Mainframe Connector 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 mainframe 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.