Vision DocumentaçãoDataset
DocumentaçãoDataset
Dataset

Tipos de atualização SQL

Última alteração a 03/04/2024

O Vision tem duas opções principais para atualizar dados num conjunto cuja fonte de dados é uma base relacional (SQL): atualização completa ou incremental.

A atualização incremental está subdividida em várias opções, dependendo do tipo de incremento que se pretende.

Tipos de atualização a partir de BD SQL

Atualização Completa

Este tipo de atualização é muito simples, uma vez que apenas consiste num conjunto de dados que é eliminado e os dados anteriores são novamente carregados a partir do resultado da execução da consulta.

Por razões de segurança, esta atualização é efetuada da seguinte forma:

  • É lançado um processo que carrega os dados para um conjunto de dados auxiliar oculto aos utilizadores;
  • Se o processo ocorrer com sucesso, ou seja, se os dados devolvidos pela consulta forem carregados sem problemas, o conjunto de dados é alterado para apontar para os dados recentemente atualizados e os dados antigos são eliminados. Isto evita que um carregamento interrompido corrompa o conjunto de dados, sendo o resultado da atualização OK;
  • Se existir um erro no processo auxiliar, este é anulado e o conjunto de dados mantém intactos os seus dados originais. O estado da última atualização é, portanto, ERROR.

Atualização Incremental

Uma atualização incremental deixa uma parte dos dados do conjunto de dados intacta e carrega novos dados. Por isso, recomendamos esta atualização quando o volume de dados a serem movidos entre a DB e o Vision é alto.

Para realizar uma atualização incremental, são necessários 3 elementos:

  1. Um campo incremental do tipo data ou numérico;
  2. Um critério de partição, por exemplo, maior que;
  3. Um valor de referência igual ao valor máximo do campo incremental no carregamento de dados anterior e que, por conseguinte, é alterado após cada atualização.

Este critério tem de ser incluído na consulta SQL que atualiza os dados, para que todos os registos da consulta SQL que cumpram a condição (o campo incremental é maior do que o valor de referência) sejam inseridos no conjunto de dados sem interferir nos dados já presentes, dado que  quando a condição não é cumprida, a própria consulta exclui esses dados.

Contudo, poderá alterar a atualização incremental para diferenciar casos particulares, uma vez que, na realidade, o critério incremental nem sempre é cumprido em 100% dos casos. Assim, dependendo da natureza do próprio processo de registo e atualização de dados, existem diferentes opções:

  • Incremental Normal: mantém os dados atuais intactos e carrega novos conteúdos;
  • Incremental Janela: mantém uma parte dos dados atuais intacta, elimina outra parte de acordo com uma janela temporária e carrega novos conteúdos a partir do início da janela.
  • Incremental Últimas Alterações: mantém uma parte dos dados atuais intacta, atualiza outra parte e também carrega novos conteúdos.

Além disso, e como complemento da atualização incremental, também é possível truncar o histórico de dados. A ideia subjacente a uma atualização incremental é que são adicionados novos dados para atualizar os dados atuais e são removidos os dados antigos.

Incremental Normal

O tipo de atualização incremental Normal mantém os dados existentes intactos e carrega novos conteúdos a partir de um determinado valor do campo Incremental.

Configuração de um incremental Normal

  1. Incremental: é a coluna de uma tabela ou o alias de um campo presente na consulta SQL (e, portanto, o "alias de DB" ou Fieldname do campo no conjunto de dados) a ser usado na condição incremental, geralmente uma coluna numérica auto-incremental ou uma data;
  2. Variable: é a variável utilizada internamente pelo Vision e assume o valor máximo do campo incremental no conjunto de dados antes da atualização ($last_value$). Este valor não é alterado, exceto nas situações em que é necessário implementar uma condição incremental mais complexa. Nestas situações, o Administrador do Vision deve ser contactado para avaliar o caso.
  3. A condição incremental é adicionada à instrução SQL, inserindo na parte where da consulta um texto especial: $condition$. O Vision entende este texto como uma variável ao executar a consulta, resolve primeiro o valor de $last_value$ e substitui $condition$ por campo_incremental > last_value . Terá de escrever uma consulta SQL válida, inserindo a variável $condition$ corretamente na cláusula where da consulta.

Sintaxe SQL válida usando um alias na condição incremental

Incremental Janela

Este tipo de atualização é uma extensão do incremental normal, uma vez que insere dados de um valor anterior ao valor máximo do campo incremental no conjunto de dados. Só é possível utilizá-la com um campo incremental do tipo Data: a janela é o intervalo que especifica através da configuração.

Todos os dados do conjunto dentro da janela são eliminados e a consulta SQL é lançada com uma condição que resulta em dados a partir da data inicial da janela, incluindo registos com datas previamente carregadas e com novas datas não carregadas (como o incremental normal). Os registos no conjunto de dados anteriores ao início da janela não são alterados.

Este tipo de atualização dá resposta aos cenários em que não se pretende efetuar uma atualização completa mas que é necessário carregar novos registos e também alterar alguns registos recentes, sem especificar quais. Por exemplo: dados contabilísticos de um exercício aberto que são corrigidos, montantes de vendas que são modificados devido a descontos aplicados, etc.

A configuração deste tipo de atualização divide-se em 2 partes:

  1. A parte incremental procede de forma semelhante à incremental normal: é necessário indicar o campo incremental e inserir na parte where da consulta SQL o texto $condition$, que será entendido como uma variável e o Vision substitui-lo-á pela expressão campo_incremental >= window_start_value.
  2. É indicado como determinar a data de início da janela, que será uma data anterior à data atual window_start_value = today - X "time units". Para determinar X e time units estão disponíveis 3 opções diferentes:
    • Período atual: a janela é um período dinâmico que abrange o intervalo de tempo atual correspondente à unidade selecionada e que pode assumir os valores anos, meses, semanas, dias, horas ou minutos. Por exemplo, se escolher a unidade "anos", o início do intervalo começa no dia 1 de janeiro do ano atual, se for escolhida a unidade "mês", o dia 1 do mês atual, etc.
    • Intervalo exato: a janela é um intervalo de tempo fixo indicado pelo número de períodos e pela unidade de tempo, por exemplo, se for indicado "2 semanas" e a atualização for executada numa "quinta-feira", a janela começa na quinta-feira há 2 semanas.
    • Intervalo completo: esta opção é uma combinação do período atual e do intervalo exato, uma vez que arredonda o início da janela para o intervalo completo da unidade selecionada. Por exemplo, se indicar:
      - 1 ano, a janela tem início a 1 de janeiro do ano anterior ao ano atual (vai um ano para o passado e arredonda de acordo com a unidade de tempo);
      - 0 meses, o intervalo tem início no dia 1 do mês atual;
      - 2 semanas, o intervalo tem início no domingo de há 2 semanas (a semana na Vision inicia-se no domingo e termina ao sábado).

Configuração de um incremental Janela

Incremental Últimas Alterações

Este tipo de atualização mantém alguns dos dados existentes intactos, atualiza (ou elimina) alguns deles e também carrega novos conteúdos.

A configuração deste tipo de atualização divide-se em 3 partes:

  1. Campo Incremental: é a coluna de uma tabela ou o alias de um campo presente na consulta SQL (e, por conseguinte, o "DB alias ou Fieldname" do campo no conjunto de dados) a utilizar na condição incremental, normalmente a data de criação/atualização de cada registo.
  2. É necessário definir uma chave primária (PK) do registo. Na caixa de texto correspondente, são escritos os nomes dos campos que formam esta PK (primar Enter para ativar cada campo escrito). No processo de atualização, para cada registo que chega como resultado da consulta, o registo equivalente no conjunto de dados é procurado por comparação com a PK: se for encontrado, é atualizado pelo novo registo, e se não for encontrado, é inserido tal como está, uma vez que é um novo registo.
  3. A condição incremental é adicionada à instrução SQL, inserindo na parte where da consulta um texto especial: $condition$. O Vision entende este texto como uma variável e, quando executa a consulta, resolve primeiro o valor de $last_value$ e substitui $condition$ por campo_incremental > last_value. Terá de escrever uma consulta SQL válida, inserindo a variável $condition$ corretamente na cláusula where da consulta.
  4. O processo permite não só atualizar dados, mas também eliminar registos. Para tal, deverá incluir um campo na consulta SQL com o nome "_delete": quando o valor do campo é "true" e o PK do registo coincide com o PK de uma linha no conjunto de dados, o registo é eliminado. No entanto, esta parte não é obrigatória: se não for incluída, nenhum registo é eliminado.

Configuração de um incremental Últimas alterações

É importante referir que este tipo de atualização necessita de uma gestão e estruturação da informação lógica na base de dados:

  • A consulta SQL deve preferencialmente incluir apenas novos registos ou registos a serem modificados. Neste sentido, trata-se de um processo quase incremental, ou seja, recomenda-se que não sejam incluídas informações de registos existentes que não tenham sofrido alterações, pois seriam transferidas informações desnecessárias entre a base de dados de origem e o Vision e, neste último, seriam efetuadas comparações de PK inúteis, uma vez que o conteúdo permanece igual. Para utilizar este tipo de atualização, deverá ter a data em que a informação foi registada (criação ou atualização), pelo que o campo incremental será essa data de "controlo", e não a data associada a outro evento presente no conjunto de dados (uma venda, uma fatura, etc.).
  • O processo de eliminação é efetuado no Vision com base nas informações que chegam na consulta SQL. Neste sentido, na base de dados de origem deve ser efetuada uma eliminação lógica dos registos, ou seja, os registos devem ser marcados como eliminados em vez de uma eliminação física, caso contrário estes registos não fariam parte do resultado da consulta SQL. Se não for possível evitar a eliminação física, uma solução possível consiste em copiar os registos a eliminar para uma tabela auxiliar antes de os eliminar. Desta forma, estes registos já podem ser incluídos na consulta SQL, por exemplo, através de uma junção com a tabela auxiliar.

Histórico de Dados

Os conjuntos de dados com atualização incremental permitem configurar uma eliminação de dados históricos.

Em muitos casos, estes dados não acrescentam valor aos dashboards, mas podem ter um impacto negativo no desempenho das visualizações, uma vez que podem aumentar consideravelmente o volume dos conjuntos de dados que os widgets utilizam como fonte de dados.

Para eliminá-los, é definida a janela temporal dos registos a manter. Uma vez configurada esta opção, o Vision irá eliminar automaticamente os dados anteriores a essa janela: em cada atualização de dados, é adicionado um segundo processo à inserção que procede à eliminação destes registos.

A configuração da eliminação de dados históricos é composta por 2 partes:

  1. Campo para eliminação de dados: é o nome do campo no conjunto de dados e deve ser do tipo data para gerar a janela temporária.
  2. Isto indica como determinar a data de início da janela, que será uma data anterior à data atual window_start_value = today - X "time units". A unidade de tempo pode ser anos, meses, semanas, dias, horas ou minutos, enquanto o número de períodos X deve ser um número inteiro maior ou igual a 0. Além disso, a data é arredondada de acordo com a unidade de tempo, por exemplo, "0 years" retém os dados do ano atual (elimina os registos anteriores a 1 de janeiro do ano atual), "2 months" retém os dados do mês atual e dos 2 meses anteriores (elimina os dados anteriores a 1 de 2 meses atrás), etc.

Configuração da eliminação de dados de histórico

Adicionar aos favoritos ou partilhar este artigo
Esta página foi útil?
Obrigado pelo seu voto.

login para deixar a sua opinião.

Obrigado pelo seu feedback. Iremos analisá-lo para continuarmos a melhorar!
Artigos Relacionados
Tipos de atualização SQL