Tabelas de Soma

Tabelas de soma são tabelas que totalizam o conteúdo de um determinado campo de uma tabela.

Exemplificando:

Seja uma tabela hipotética de Vendas

Data Classe Valor
01/05 2 32
01/05 2 22
01/05 3 11
02/05 3 44

Desejamos gerar uma tabela de soma, agregando por data e classe.

O programador, através de um script vai definir a tabela, os campos de agregação, e os campos de soma:

Exemplo de script:

{
  tableName: "Vendas",
  viewName : "Vendas_Soma",
  fields: [
    {name:"data"},
    {name:"classe"},
    {name: "valor", agg: "sum"}
  ],
  indexes: ["data,classe", "classe"]
}

Teríamos a tabela Vendas_Soma

Data Classe Valor
01/05 2 54
01/05 3 11
02/05 3 44

O conceito de tabelas de soma do sistema está ligado aos conceitos de visão de dados, visão materializada, notação JSON e objetos literais. É necessário compreensão destes conceitos.

Visão de dados

Tabela derivada a partir de uma ou várias tabelas do banco de dados através de uma consulta. As visões não armazenam dados.

Wikipedia: Uma visão, ou vista (em inglês: view), no contexto dos bancos de dados é uma relação que não armazena dados, composta dinamicamente por uma consulta que é previamente analisada e otimizada.

Entre as principais utilidades estão, a depender do SGBD utilizado, o aumento de segurança por propiciar uma visão limitada e controlada dos dados que podem ser obtidos da base e a performance por utilizar uma consulta previamente otimizada, tornando desnecessário este processo de otimização quando for realizada.

Desvantagem em usar visões

São re-computadas sempre que uma consulta a referencia. Esse processo pode ter um custo bastante elevado.

Uma solução usada para contornar esta desvantagem seria usar visões materializadas.

Visão materializada

É o resultado do conteúdo de uma visão computada e armazenado fisicamente em uma tabela do banco de dados.

Uma consulta envolvendo a visão pode acessar diretamente a visão materializada.

Obs: O sistema já possibilitava o uso de visões materializadas.

Desvantagens em usar visões materializadas

Como uma visão materializada é uma tabela derivada e definida a partir de uma tabela base, operações de inserção, deleção e atualização nos registros dessa tabela base fazem com que a visão materializada fique desatualizada. Recriar a visão materializada como um todo pode ser um processo demorado e ineficiente.

Uma solução para contornar esta desvantagem seria aplicar na visão materializada apenas as alterações feitas na tabela base. Este tipo de atualização é chamado de manutenção incremental da visão materializada.

Como funciona a tabela de soma?

Sum table

Aqui segue um breve descrição dos item desta imagem:

  • Tabela Base: Nome da tabela do sistema.
  • Tabela Delta: Tabela gerada pela API da tabela de soma que será onde ficará todas as alterações realizadas na tabela base desde a última a atualização da visão materializada base.
  • Visão Base: Uma visão de dados construída a partir da tabela base com os dados agregados.
  • Visão Delta: Visão da tabela delta, com os mesmo campos agregados da visão base.
  • Visão Materializada Base: Visão materializada da visão base. Se o banco de dados não suportar visão materializada, será criada pela API de tabelas de soma uma tabela física.
  • Visão do usuário: União da visão delta com a visão materializada base. Com isso a visão do usuário sempre terá os dados on-line, sem gap de atualização.

Configurando uma tabela de soma

Para configurar uma tabela de soma, deve ser criado um arquivo com a extensão “.iat”. O conteúdo desse arquivo deve ser um JSON com as seguintes propriedades:

{
  "tableName": "Vendas",
  "viewName" : "Vendas_Soma",
  "fields": [
    { "name":"data" },
    { "name":"classe" },
    { "name": "valor", "agg": "sum" }
  ],
  "indexes": ["data,classe", "classe"]
}

Onde,

  • tableName = Nome da tabela;
  • viewName = Nome da visão;
  • fields = Nome dos campos e os tipos de agregação;
  • indexes = Nome dos campos dos índices que vão ser criados no banco. Poderão ser criado índices simples ou compostos.

O processo para criação das tabelas de soma

Local: “Desenvolvimento > Base de dados > Tabelas De Soma”.

  • Grade de visões do sistema: Contém todos os scripts que definem uma tabela de soma.
  • Grade de visões criadas: Contém todas as tabelas de soma criadas no banco de dados.

Atualização de uma visão materializada

A atualização das visões materializada é realizada através de um tarefa no scheduler executada de acordo com o periodicidade configurada, ou através do processo de criação das tabelas de soma.

Atualizando Manualmente

  • Acesse o processo “Desenvolvimento > Base de dados > Tabelas de Soma”
  • Na grade “Visões Criadas” selecione um registro ou todos.
  • Clique no botão “Atualizar”.
  • Observe se o campo “Status” mudou para “Atualizada”

Agendando a Atualização

  • Acesse o processo “Admin > Agendador de Scripts”
  • Crie uma nova tarefa
  • Em “Período” selecione “Intervalo”
  • Em “Hora” selecione o intervalo entre as execuções do script, recomendamos 10 minutos, mas o valor pode ser definido de acordo com o usuário.
  • Em “Script VFS” preencha com o valor “-1898141887” que é a chave do script “updateSummaryTables.ijs”.
  • Caso não seja encontrado o “Script VFS” acima, favor verificar se há permissão para acessar o script em “Permissões > products > Engine > scripts > sumtable “.
  • Grave o agendamento e verifique se a primeira execução deste ocorre sem erros.

Criando uma tabela de soma no sistema

Segue os passos necessários para criar uma tabela de soma no sistema.

  • Criar um script com extensão “.iat” no formato de objeto JSON;
  • Entrar no processo de Tabelas de soma
  • Escolher a visão que vai ser criada;
  • Clicar na action de criar visão;

Conclusão

Com as informações aqui apresentas a respeito da tabela de soma e seu funcionamento, podemos destacar os seguintes pontos:

  • Otimização nas consultas que utilizem o tipo de agregação do tipo SUM, com a criação de visões materializadas e com a oportunidade de criação de índices simples ou compostos para os campos.
  • Utilização de tabelas e visões deltas que ajudam a manter a visão sempre atualizada, sem perder a performance das consultas.
  • Compatibilidade com três tipos de banco de dados: SQL Server, ORACLE, PGSQL.