Esta página discute como transcodificar os dados do mainframe localmente no mainframe ao formato Optimized Row Columnar (ORC), e, em seguida, mover o conteúdo para o BigQuery.
A transcodificação é o processo de converter informações de uma forma de código representação para outra, neste caso, para o ORC. ORC é uma ferramenta em um formato de dados orientado por colunas, muito usado no ecossistema do Apache Hadoop, e é compatível com o BigQuery.
Antes de começar
Instalar o conector de mainframe para qualquer conjunto de dados particionado de mainframe que você queira usar como 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:
- Ler e transcodificar um conjunto de dados em um mainframe e fazer upload dele para o Cloud Storage
em formato ORC. A transcodificação é feita durante a operação
cp
, em que um mainframe estendido de código de intercâmbio decimal codificado binário (EBCDIC) é convertido para o formato ORC em UTF-8 durante a cópia em um do bucket do Cloud Storage. - Carregue 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:
Criar um job para ler o conjunto de dados no seu mainframe e transcodificá-lo para ORC da maneira 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 a qual você quer copiar os dados do mainframe.
Evitar especificar variáveis como IDs de projetos e nomes de buckets em cada job de linguagem de controle de acesso (JCL), é possível adicioná-los ao BQSH PROCLIB e referenciá-las em vários procedimentos JCL como variáveis de ambiente. Isso abordagem também ajuda a oferecer uma transição perfeita entre a produção e ambientes que não sejam de produção, já que variáveis específicas do ambiente são definidas no o BQSH PROCLIB do seu ambiente. Neste exemplo, a entrada padrão (STDIN) é fornecida como dados in-stream para o STDIN DD. Como alternativa, você pode fornecer essa entrada usando um nome de fonte de dados (DSN), 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 carregamento.
Criar e enviar um job de carregamento do BigQuery que carregue partições de arquivos ORC de
my_table.orc
paraMY_DATASET.MY_TABLE
, conforme segue.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ê quiser executar a consulta.
(Opcional) Criar e enviar um job de consulta do BigQuery que execute uma leitura de SQL QUERY DD file. Normalmente, a consulta será
MERGE
ouSELECT INTO DML
. que resulta na transformação de uma tabela do BigQuery. Observação que o conector de mainframe registra as métricas do job, mas não grava consultas resultados 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ê quiser executar a consulta.LOCATION
: o local em que a consulta será feita. executada. Recomendamos que você execute a consulta em um local próximo ao 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ê deseja 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 de gravação é descritos pelo COPYBOOK DD.