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ê 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:
-
Carregue dados novos ou atualizados da tabela da fonte do banco de dados.
Esse é um processo lento, mas apenas alguns arquivos são carregados.
-
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.
-
Criar um novo arquivo QVD.
Este é o arquivo que você usará na próxima vez em que fizer um carregamento incremental.
- 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.
Exemplo:
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.
Exemplo:
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.
Exemplo:
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.
Exemplo:
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