|
A parte complexa da contrução de consultas é a realização das junções de agregações. A junção é feita apenas quando duas agregações possuem a mesma chave e quando não existe esse caso elementos da chave são removidos (aplicando funções de agregação) até que as chaves sejam compativeis.
|
|
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 serie 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)
|
|
|
|
|
|
|
|
1. As agregações são decompostas até encontrar seus decendentes materializados, gerando um novo conjunto de agregações base
|
|
|
|
2. Se mais de uma agregação existe segue, caso contrário termina a construção
|
|
|
|
3. Identifica-se quais são os atributos necessários
|
|
|
|
* Atributos que estão na consulta
|
|
|
|
* Atributos que estão em mais de uma agregações (JOIN)
|
|
|
|
* Atributos que estão um filtros não aplicados
|
|
|
|
4. Remove-se os atributos desnecessários
|
|
|
|
5. Aplica filtros que forem possiveis e remove da lista de filtros não aplicados
|
|
|
|
5. Se algum atributo ou filtro foi removido retorna ao passo 2, caso contrário segue
|
|
|
|
6. Agrupa-se as agregações que possuem chaves identicas
|
|
|
|
7. Quando os grupos possuem mais de uma agregação, faz a junção perfeita, transformando o grupo em uma agregação
|
|
|
|
8. Se algum grupo foi transformado em agregação, retorna ao passo 2, caso contrário segue
|
|
|
|
9. Seleciona-se as duas agregações com as chaves mais parecidas e realiza uma junção imperfeita
|
|
|
|
10. Corrige problemas decorrentes a junção imperfeita
|
|
|
|
11. 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 problema, pois não ocorre alteração de valor.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## [Home](/)
|
|
## [Home](/)
|
|
* [Seleção de agregações](algoritmos/agregações)
|
|
* [Seleção de agregações](algoritmos/agregações)
|
... | | ... | |