blendb issueshttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues2018-08-22T12:43:58Zhttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/87Implementação de dependecia funcional para definir escopo de métricas2018-08-22T12:43:58ZLucas Fernandes de OliveiraImplementação de dependecia funcional para definir escopo de métricasPode-se ocorrer casos em que uma métrica não pode ser dividida no conjunto de métricas fornecido. Nesse caso ocorre a replicação do valor. Anteriormente acreditava-se que esse era o comportamento desejado, mas existem casos que a respost...Pode-se ocorrer casos em que uma métrica não pode ser dividida no conjunto de métricas fornecido. Nesse caso ocorre a replicação do valor. Anteriormente acreditava-se que esse era o comportamento desejado, mas existem casos que a resposta é erronêa.
Um exemplo: Supondo que os dados de rede são coletados em nível de cidade, e uma outra métrica de inventário é coletado em nível de escola. O resultado da consulta **dados de rede por escola**, seria o seguinte: todas as escolas da mesma cidade apresentariam o mesmo valor, que é o total de tráfego da cidade.
Para evitar esse problema deve-se identificar quais dimensões podem ser utilizadas em conjunto com as métricas. Para isso basta utilizar a depêndencia funcional dos atributos.
A métrica deve possuir uma chave (conjunto de dimensões) e todas as dimensões são dependentes funcionais dessa chave (podem ser inferidas a partir da chave) são as dimensões que podem ser utilizadas em conjunto com a métrica.
## Especificação
* Na definição das dimensões (arquivo de configuração), deve existir um novo campo: uma lista de dimensões que podem ser utilizadas para inferir a dimensão atual
* Se A -> C e B -> C, então em C existe uma lista com os valores [A, B]
* Métricas devem possuir uma chave
* A chave pode ser inferida da **visão origem** da métrica
* O conjunto de dimensões dessa visão pode ser utilizado como chave
* Deve-se adicionar a verficação de unicidade da métrica e da **visão origem** da métrica
* As métricas devem conter uma lista de dimensões permitidas, para serrem utilizadas em conjunto
* Essa lista pode ser calculada na leitura do arquivo de configuração
* Basta criar um grafo com as informações de dependencia funcional e calcular o fecho transitivo (realizar uma busca em largura)
* Uma vez com a lista basta verificar se a lista de dimensões é um sub-conjunto da lista de dimensões permitidas para cada uma das métricas da consulta
## Implementação
* [ ] Adicionar novo campo no arquivo de configuração para as dimensões, contendo a informação de dependencia
* [ ] Adicionar novo campo a classe das métricas, com a lista de dimensões permitidas
* [ ] Criar um grafo a partir das informações de dependência no momento da leitura do arquivo de configuração
* [ ] Calcular o conjunto de dimensões permitidas por métrica, utilizando o grafo, realizando uma busca (provavelmente em, largura)
* [ ] Modificar a API para verificar se o conjunto de dimensões é um sub-conjunto do conjunto de dimensões permitidas. Caso o conjunto seja inválido, informar o erro.1.0Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/70Aprimorar arquivo de configuração para permitir transformações2018-08-29T13:51:58ZLucas Fernandes de OliveiraAprimorar arquivo de configuração para permitir transformaçõesA proposta atual de transformação é **copiar** dados de uma *source* para uma *view*. Essa cópia deve estar mapeada no arquivo de configuração.
Atualizar o arquivo de configuração para que quando uma view, quando marcada como *origin*, ...A proposta atual de transformação é **copiar** dados de uma *source* para uma *view*. Essa cópia deve estar mapeada no arquivo de configuração.
Atualizar o arquivo de configuração para que quando uma view, quando marcada como *origin*, tenha a informação de como gerar suas métricas e dimensões a partir das fontes.
# Proposta
Adicionar como propriedade de uma *view* um campo *sources*, onde cada chave dentro de sources representa uma *source* que será utilizada para gerar a *view*. A propriedade *source* tem um campo para cada métrica e dimensão da *view* que por sua vez tem a regra de formação a partir da *source* para gerar a métrica/dimensão.
# Observações
* Essa proposta assume uma *view* é criada pela **UNION** das sources, ou seja, as *sources* **não podem** ser combinadas para criar um **único** registro.
* Ou seja não é possível fazer : se na fonte1 o valor é x e na fonte2 o valor é y coloque z
* A proposta tem como objetivo facilitar a criação de uma *materialized view*, onde as regras definem como os campos são criados.
* Provavelmente essas regras gerarão um SQL (ou equivalente) para construir uma *materialized view*.
* As transformações possíveis ainda não estão bem definidas, devem sex esclarecidas para a execução da tarefa.
* Essa tarefa apenas **MODIFICA** o arquivo de configuração e não **APLICA** as transformações. Seu objetivo é **LER** e **VALIDAR** as transformações.1.0https://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/63Controle de transformações2018-08-29T13:51:58ZLucas Fernandes de OliveiraControle de transformaçõesConstrução das agregações a partir das fontes.
* A construção de uma agregação é a construção de suas métricas e dimensões a partir dos campos de uma fonte.
* Para cada registro na fonte será gerado um único registro na agregação.
* A ...Construção das agregações a partir das fontes.
* A construção de uma agregação é a construção de suas métricas e dimensões a partir dos campos de uma fonte.
* Para cada registro na fonte será gerado um único registro na agregação.
* A construção de uma métrica ou dimensão é o resultado de uma expressão dos campos da fonte e de constantes
Para resolver o problema será necessário:
* Alteração do arquivo de configuração. Transformações devem estart no arquivo de configuração
* Criação de um *parser* para verificar a validade das expressões de construção
* Tradução das transformações pelos adaptadores
* Definição de uma técnica de atualização
Sugestões para solucionar os tópicos acima:
* [ ] Adição de um campo *transformers* na definição da agregação. Esse campo será uma lista com identificadores de transformações que são usados para criar essa agregação
* [ ] Adição de uma novo campo no nível 0 do arquivo de configuração chamado *transformers*. Esse campo contém uma lista de definição de transformações. Uma transformação pode ser definida por:
* **name**: nome/identificador da transformação (utilizado na definição da agregação)
* **source**: fonte na qual a transformação é aplicada
* **dimensions**: objeto onde cada chave é uma dimenção criada pela transformação
* Uma dimensão é definida como uma lista de condições seguidas de expressões
* A propósta é utilziar essa lista como um **CASE/WHEN** de SQL
* **metrics**: objeto onde cada chave é uma métrica criada pela transformação
* Uma métricas é definida como uma lista de condições seguidas de expressões
* A propósta é utilziar essa lista como um **CASE/WHEN** de SQL
* [ ] Utilização do pacote **sintax-cli** para criação de um parser de expressões. A principal função do parser é validar as expressões e devolver os tipos (int, float, bool, ...) das expressões para validação
* [ ] Criação de uma nova variável de ambiente para definir a politica de atualização, chamada **BLENDB_UPDATE**
* Para a primeira versão está sendo considerado que existira uma única política de atualização para o Blendb todo
* Outras alternativas seriam uma politica para cada transformer ou para cada fonte
* Há duas politicas propóstas. **Temporal**, a cada **X** tempo é realizada a transformação. **Frequência**, a cada **X** inserções é realizada a transformação.
* [ ] Adição de uma função no adaptador (abstrato) para aplicação de transformações
1.0Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/57Atualizar arquivos de configuração exemplo2018-04-03T12:09:28ZLucas Fernandes de OliveiraAtualizar arquivos de configuração exemplo* Alterar os arquivos de configuração exemplo para serem mais sugestivos
* Permitir comentarios (através de #) no arquivo .env ao utilizar npm start/test* Alterar os arquivos de configuração exemplo para serem mais sugestivos
* Permitir comentarios (através de #) no arquivo .env ao utilizar npm start/testRevisionLucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/24Sub dimensões para localização2018-04-03T12:10:29ZLucas Fernandes de OliveiraSub dimensões para localizaçãoDe certa forma a localização é feita de forma hierarquica, é possivel extrair do código ibge (confirmar essa informação) estado, cidade, região. Entretanto isso exigiria criar no blendb uma nova relação (RelationType) que levaria a perda...De certa forma a localização é feita de forma hierarquica, é possivel extrair do código ibge (confirmar essa informação) estado, cidade, região. Entretanto isso exigiria criar no blendb uma nova relação (RelationType) que levaria a perda de generalidade.
Estudar as opções ou encontrar uma forma de remover a RelationType e encontrar algo genérico onde na configuração do blendb pode-se escolher as relações (Problema a geração de consulta)RevisionLucas Fernandes de OliveiraLucas Fernandes de Oliveira