Carregando registros novos e atualizados com carregamento incremental
Se seu aplicativo contiver uma grande quantidade de dados de fontes de banco de dados que são continuamente atualizados, o recarregamento de todo o conjunto de dados poderá 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.
- 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.
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 do ModificationTime (ou semelhante) para que o Qlik Sense reconheç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 [lib://DataFiles/File.QVD];
STORE QV_Table INTO [lib://DataFiles/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 [lib://DataFiles/File.QVD]
WHERE NOT Exists(PrimaryKey);
STORE QV_Table INTO [lib://DataFiles/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 [lib://DataFiles/File.QVD]
WHERE NOT EXISTS(PrimaryKey);
Inner Join SQL SELECT PrimaryKey FROM DB_TABLE;
If ScriptErrorCount = 0 then
STORE QV_Table INTO [lib://DataFiles/File.QVD];
Let LastExecTime = ThisExecTime;
End If