Esta página discute como transcodificar dados de mainframe localmente no mainframe para o formato ORC (Optimized Row Columnar) e, em seguida, mover o conteúdo para o BigQuery.
A transcodificação é o processo de conversão de informações de uma forma de representação codificada para outra, neste caso, para ORC. O ORC é um formato de dados orientado por colunas de código aberto muito usado no ecossistema do Apache Hadoop e compatível com o BigQuery.
Antes de começar
Instale o conector de mainframe em qualquer conjunto de dados particionado por mainframe que você quer usar como uma biblioteca de procedimentos (PROCLIB).
Mover dados transcodificados localmente no mainframe para Google Cloud
Para transcodificar dados localmente em um mainframe e movê-los para o BigQuery, realize as seguintes tarefas:
- Leia e transcodifique um conjunto de dados em um mainframe e faça upload dele no Cloud Storage
no formato ORC. A transcodificação é feita durante a operação
cp
, em que um conjunto de dados de código de troca decimal codificado em binário estendido (EBCDIC, na sigla em inglês) de mainframe é convertido para o formato ORC em UTF-8 durante a cópia para um bucket do Cloud Storage. - Carregar 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.
Para realizar essas tarefas, siga estas etapas:
Crie um job para ler o conjunto de dados no mainframe e transcodifique-o para o formato ORC, conforme mostrado a seguir. Leia os dados do conjunto de dados INFILE e o layout de registro do COPYBOOK DD. O conjunto de dados de entrada precisa ser um arquivo de método de acesso sequencial em fila (QSAM, na sigla em inglês) 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
: o nome do bucket do Cloud Storage para o qual você quer copiar os dados do mainframe.
Para evitar a especificação de variáveis, como IDs de projeto e nomes de bucket, em cada procedimento de linguagem de controle de jobs (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 os ambientes de produção e não relacionados à 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 com suporte do Mainframe Connector, consulte Variáveis de ambiente.
Neste exemplo, a entrada padrão (STDIN) é fornecida como dados no stream para o STDIN DD. Como alternativa, você pode fornecer essa entrada usando um nome de fonte de dados (DSN, na sigla em inglês), o que facilita o gerenciamento da substituição de símbolos.
Se você 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
my_table.orc
paraMY_DATASET.MY_TABLE
, conforme a seguir.Example JCL //STEP02 EXEC BQSH //STDIN DD * PROJECT=PROJECT_NAME bq load --project_id=$PROJECT \ myproject:DATASET.TABLE \ gs://bucket/tablename.orc/* /*
Substitua:
PROJECT_NAME
: o nome do projeto em que você quer executar a consulta.
(Opcional) Crie e envie um job de consulta do BigQuery que execute uma leitura SQL do arquivo QUERY DD. Normalmente, a consulta será uma instrução
MERGE
ouSELECT INTO DML
que resulta na transformação de uma tabela do BigQuery. O conector de mainframe registra nas métricas do 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 em que 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 QUERY DD 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.