O objetivo do algoritmo é reduzir um conjunto de agregações em uma única agregação. Quando se tem apenas uma agregação, obter os dados é simples, basta selecionar os atributos da consulta dessa agregação.
Existe uma série de critérios para determinar em qual ordem as agregações serão unidas para evitar inconsistências e problemas com a consulta.
Algoritmo
O algoritmo recebe o conjunto de agregações do algoritmo da seleção, a consulta (lista de métricas, dimensões e filtros)
- As agregações são decompostas até encontrar seus decendentes materializados, gerando um novo conjunto de agregações base
- Se mais de uma agregação existe segue, caso contrário termina a construção
- Identifica-se quais são os atributos necessários
- Atributos que estão na consulta
- Atributos que estão em mais de uma agregação (JOIN)
- Atributos que estão em filtros não aplicados
- Remove-se os atributos desnecessários
- Aplica filtros que forem possíveis e remove da lista de filtros não aplicados
- Se algum atributo ou filtro foi removido retorna ao passo 2, caso contrário segue
- Agrupa-se as agregações que possuem chaves idênticas
- Quando os grupos possuem mais de uma agregação, faz a junção perfeita, transformando o grupo em uma agregação
- Se algum grupo foi transformado em agregação, retorna ao passo 2, caso contrário segue
- Seleciona-se as duas agregações com as chaves mais parecidas e realiza uma junção imperfeita
- Corrige problemas decorrentes a junção imperfeita
- Retorna ao passo 2
Observações
Embora esse algoritmo represente o esqueleto do algortimo de junção, alguns tópicos importantes como "junção perfeita" "junção imperfeita" "problemas da junção imperfeita" não estão totalmente claros. Existe uma explicação completa como comentários no código do adaptador
Redução / Junção
De certa forma esse algoritmo basicamente consiste na aplicação em uma certa ordem de duas operações, Redução e Junção. Na redução ocorre a remoção de atributos desnecessários a a aplicação de filtros enquanto na junção duas ou mais agregações se transformam em uma. Há estudos para verificar quão bem espeficicadas devem ser essas operações de junção e remoção e se elas são possíveis em todos os bancos de dados.
Junção Perfeita e Imperfeita
O algorimo de junção é o mesmo. A junção é chamada perfeita quando as chaves são iguais e não ocorre efeito colateral, e ela é chama imperfeita quando as chaves não são iguais.
Uma junção perfeita implica que para cada registro em uma agregação existe no máximo um registro na outra agregação. Ou seja, na união das agregações, a quantidade de registros é igual a quantidade de registros da agregação com menos registros.
Na junção imperfeita implica que para cada registro em uma agregação pode haver mais que um registro na outra agregação. Ou seja na união das agregações, a quantidade de registros é igual a quantidade de registros da agregação com mais registros.
Em outras palavras, é como se a agregação com menos registros houvesse duplicado alguns de seus registros para realizar a junção. Isso é um problema para as métricas, pois na redução uma função de agregação é aplicada combinando registros. Como a quantidade original de registros foi alterada o resultado é inconsistente.
Para resolver esse problema, quando uma agregação tem registros duplicados As funções de agregações não podem ser aplicadas. Em outras palavras essas métricas se transformam em dimensões.
Com as dimensões não ocorre esse problema, pois as dimensões são agrupadas. Quando os registros forem reduzidos o valor não será alterado.
Home
- Seleção de agregações
- Construção de consultas