4.3 IMPLEMENTAÇÃO DO AGENTE E MICROSSERVIÇOS
4.3.1 Armazenamento de Dados
O grupo de serviços Armazenamento de Dados é composto por um conjunto de microsserviços (Service1 – Carregar_dados_moodle até o Service6 – Popular_tabela_fato). As etapas relacionadas a cada microsserviço são realizadas de forma simultânea, visto que uma etapa possui dependências na outra. Assim, para representar o desenvolvimento deste conjunto de microsserviços utilizou-se a nomenclatura “Service1_6”.
O desenvolvimento deste grupo de serviços está dividido em três etapas. Inicialmente são demonstradas as transformações, responsáveis por efetuar as operações sobre os dados a fim de popular o cada uma das tabelas do modelo dimensional. A segunda etapa apresenta os jobs, responsáveis pela automatização das transformações. Por fim, é apresentado o desenvolvimento do
“Service1_6”, responsável por executar os processos de forma sequencial e contínua na plataforma MIDAS.
Transformações
A ferramenta Pentaho Data Integration permite registrar com detalhes o processo de extração ou leitura de uma fonte de informação. A transformação é responsável por efetuar as operações definidas sobre os dados. Para compor o modelo dimensional proposto, foram desenvolvidas nove transformações, conforme apresentado nas seções 4.1.1 e 4.1.2. Devido ao número de transformações e a similaridade de desenvolvimento, optou-se por apresentar nesta seção apenas o desenvolvimento das transformações dimensão usuário (dim_user) e tabela fato (tab_fato). As demais transformações desenvolvidas neste trabalho estão disponíveis no Apêndice A.
Ao desenvolver as transformações, é possível efetuar diversos processos como o enriquecimento dos dados coletados, por exemplo. Ele consiste em utilizar fontes de dados externas para complementar a base de dados com informações como: (i) Dados cadastrais: endereço, telefone, e-mail, entre outros; (ii) Dados socioeconômicos e psicográficos: classe social, renda presumida, data de nascimento, gênero, grau de escolaridade, profissão, entre outros; (iii) Dados coletados de Redes sociais; (iv) entre outros.
O enriquecimento de dados da dimensão usuário (dim_user) ocorre com o uso de APIs (Application Programming Interface) configuradas em clientes REST. O processo utiliza os dados de CEP (Código de Endereçamento Postal) do usuário para recuperar outros dados como informações geográficas do aluno, endereço, bairro, latitude, longitude, entre outros. Esses novos dados, até então desconhecidos, possibilitam a criação de informações mais relevantes e interessantes. A Figura 14, ilustra parcialmente o desenvolvimento da transformação dim_user.
Figura 14. Implementação parcial da transformação dim_user
O processo para formar a dimensão usuário (dim_user) inicia com a extração dos dados das tabelas selecionadas presentes na staging area. A próxima etapa consiste na seleção, transformação e agrupamento (join) dos dados. Após realizado estas operações, são tratados os dados nulos e selecionados os dados para popular a dimensão.
O desenvolvimento das demais dimensões ocorre de forma semelhante. Os dados são extraídos das tabelas selecionadas presente na staging area. Em seguida, é efetuada a seleção, transformação e o agrupamento (join) dos dados. Após realizado essas operações, são tratados os dados nulos e selecionados os dados para popular as dimensões.
Já o processo para formar a tabela fato (tab_fato) é diferente. Ele deve utilizar as chaves substitutas (Surrogate Keys) para efetuar as ligações entre as dimensões e a tabela fato. A Figura 15 ilustra parcialmente a implementação da tab_fato.
Figura 15. Implementação parcial da transformação tab_fato
O processo inicia com a coleta dos dados da tabela mdl_log, que contém informações de log.
Em seguida, são efetuadas as ligações entre as dimensões e a tabela fato por meio das chaves substitutas (Surrogate Keys). Após concluir estes processos, os dados são selecionados e a tabela é populada.
Jobs
O uso de jobs na ferramenta Pentaho Data Integration possibilita automatizar as transformações por meio da definição de fluxos e dependências. Os fluxos representam a ordem em que as transformações devem acontecer. As dependências retratam o momento em que cada transformação pode ou não ser executada (BOUMAN; DONGEN, 2009).
A Figura 16 demonstra o fluxo das transformações desenvolvidas para popular o modelo dimensional. O processo inicia quando o TAg executa o “Service1_6”. O serviço é responsável por chamar o job Principal. Este, por sua vez, é responsável por executar os jobs Carga Stage e Carga DWh.
Figura 16. Fluxo de transformações/jobs do “Service1_6”
Quando iniciado o job Principal, o processo inicia no job Carga Stage, responsável por criar a cópia das tabelas selecionadas do banco de dados do Moodle na staging area. O tratamento dos dados é efetuado neste repositório antes da carga efetiva para o DWh. A cada nova carga, este repositório é limpo para receber os dados atualizados do BD, evitando assim o acesso à base de produção em caso de recarga e fornecendo unicidade e performance para a carga.
Após encerrar o job Carga Stage, é iniciado o job Carga DWh. Ele é responsável por acessar cada uma das transformações e efetuar os processos ETL definidos para popular a dimensão. Por último, este processo é efetuado na tabela fato, conforme demonstrado na Figura 20.
Ao concluir o job Carga DWh e, consequentemente, o job Principal, é possível verificar no console o status de sucesso ou falha dos processos. Esta informação também é enviada por e-mail, conforme os dados predefinidos. Assim, ao concluir o job Principal também é encerrado o conjunto de microsserviços responsável pelo Armazenamento de Dados (Service1_6).
Desenvolvimento do “Service1_6”
O microsserviço “Service1_6” engloba o conjunto de microsserviços (Service1 – Carregar_dados_moodle até o Service6 – Popular_tabela_fato). Ele é responsável por executar os processos descritos de forma sequencial e contínua dentro da plataforma MIDAS. O Quadro 15 mostra um fragmento de código do “Service1_6”.
protected void lifeCycle() throws LifeCycleException, InterruptedException{
while(alive){
String file="C:\\pdi-ce-5.0.1.A-stable\\data-integration\\execucoes\\Nova pasta\\JOB PRINCIPAL.kjb";
Repository repository=null;
try {
KettleEnvironment.init();
JobMeta jobmeta=new JobMeta(file,repository);
Job job=new Job(repository, jobmeta);
job.start();
job.waitUntilFinished();
if(job.getErrors()>0){
System.out.println("Job Interrompido");
}
} catch (KettleException e) { e.printStackTrace();
}
Thread.sleep(43200000);
} }
Quadro 15. Implementação parcial do “Service1_6”
O processo inicia com a execução da ferramenta KettleEnvironment, responsável por executar os processos ETL do Pentaho Data Integration na linguagem Java. Após iniciada a ferramenta, é executado o job Principal. Este job é responsável por chamar outros dois jobs, conforme mostrado na Figura 16. O job Principal executa primeiramente o job Carga Stage. Após finalizado este job, dá-se inicio ao job Carga DWh. Ao finalizar o job Carga Stage e o job Carga DWh é encerrado
também o job Principal e, consequentemente, o microsserviço. Ao apresentar algum erro no job, o serviço é interrompido.