Carregando registros novos e atualizados com carregamento incremental

Se seu aplicativo contém uma grande quantidade de dados de fontes de banco de dados que são continuamente atualizados, o recarregamento de todo o conjunto de dados pode ser demorado. Nesse caso, você só deseja carregar registros novos ou alterados do banco de dados, todos os outros dados já devem estar disponíveis no aplicativo. O carregamento incremental, usando arquivos QVD, permite fazer isso.

O processo básico está descrito abaixo:

  1. Carregue dados novos ou atualizados da tabela da fonte do banco de dados.

    Esse é um processo lento, mas apenas alguns arquivos são carregados.

  2. Carregue dados que já estão disponíveis no aplicativo a partir do arquivoQVD.

    Muitos registros são carregados, mas esse processo é muito mais rápido.

  3. Criar um novo arquivo QVD.

    Este é o arquivo que você usará na próxima vez em que fizer um carregamento incremental.

  4. Repetir o procedimento para cada tabela carregada.

Veja a seguir exemplos de casos em que o carregamento incremental é utilizado. No entanto, uma solução mais complexa pode ser necessária, dependendo da estrutura do banco de dados de origem e do modo de operação.

  • Anexar apenas (tipicamente usada para arquivos de log)
  • Inserir apenas (sem atualizar nem excluir)
  • Inserir e atualizar (sem excluir)
  • Inserir, atualizar e excluir

Você pode ler arquivos QVD nos modos otimizado ou padrão. (O método empregado é selecionado automaticamente pelo mecanismo do Qlik Sense, dependendo da complexidade da operação.) O modo otimizado é cerca de 10 vezes mais rápido do que o modo padrão ou cerca de 100 vezes mais rápido do que o carregamento do banco de dados de maneira normal.

Para obter mais informações, consulte Trabalhando com arquivos QVD.

Anexar apenas

O caso mais simples é aquele dos arquivos de log; arquivos nos quais os registros só são acrescentados e jamais excluídos. As seguintes condições se aplicam:

  • O banco de dados deve ser um arquivo de log (ou algum outro arquivo no qual os registros são acrescentados e não inseridos ou excluídos) contido em um arquivo de texto (ODBC, OLE DB ou outros bancos de dados não são suportados).

  • Qlik Sense controla o número de registros lidos anteriormente e carrega apenas registros incluídos no final do arquivo.

Example:  

Buffer (Incremental) Load * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels);

Inserir apenas (sem atualizar nem excluir)

Se os dados residirem em um banco de dados que não seja um arquivo de log individual, a solução anexada não funcionará. No entanto, o problema poderá ser solucionado com um mínimo de trabalho adicional. As seguintes condições se aplicam:

  • A fonte de dados pode ser qualquer base de dados.

  • O Qlik Sense carrega os registros inseridos na base de dados após a execução do último script.

  • É necessário um campo de ModificationTime (ou semelhante) para que o Qlik Sensereconheça os registros novos.

Example:  

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(BeginningThisExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM File.QVD;

STORE QV_Table INTO File.QVD;

 

Os sinais de sustenido na cláusula SQL WHERE definem o início e o final de uma data. Verifique o manual do banco de dados para obter a sintaxe de data correta do banco de dados.

Inserir e atualizar (sem excluir)

O caso seguinte se aplica quando os dados nos registros carregados anteriormente são alterados entre as execuções de script. As seguintes condições se aplicam:

  • A fonte de dados pode ser qualquer base de dados.

  • O Qlik Sense carrega os registros inseridos ou atualizados na base de dados após a execução do último script.

  • É necessário um campo de ModificationTime (ou semelhante) para que o Qlik Sensereconheça os registros novos.

  • É necessário um campo chave primário para que o Qlik Sense classifique os registros atualizados do arquivo QVD.

  • Esta solução forçará a leitura do arquivo QVD no modo padrão (em vez do otimizado), que ainda será consideravelmente mais rápido do que carregar a base de dados inteira.

Example:  

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM File.QVD

WHERE NOT Exists(PrimaryKey);

 

STORE QV_Table INTO File.QVD;

Inserir, atualizar e excluir

O caso mais difícil de solucionar é quando os registros são excluídos da base de dados de origem entre as execuções de script. As seguintes condições se aplicam:

  • A fonte de dados pode ser qualquer base de dados.

  • O Qlik Sense carrega os registros inseridos ou atualizados na base de dados após a execução do último script.

  • O Qlik Sense remove os registros excluídos da base de dados após a execução do último script.

  • É necessário um campo de ModificationTime (ou semelhante) para que o Qlik Sensereconheça os registros novos.

  • É necessário um campo chave primário para que o Qlik Sense classifique os registros atualizados do arquivo QVD.

  • Esta solução forçará a leitura do arquivo QVD no modo padrão (em vez do otimizado), que ainda será consideravelmente mais rápido do que carregar a base de dados inteira.

Example:  

Let ThisExecTime = Now( );

 

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(ThisExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM File.QVD

WHERE NOT EXISTS(PrimaryKey);

 

Inner Join SQL SELECT PrimaryKey FROM DB_TABLE;

 

If ScriptErrorCount = 0 then

STORE QV_Table INTO File.QVD;

Let LastExecTime = ThisExecTime;

End If