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 o 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 binário decimal de troca (EBCDIC) 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.