Usando arquivos QVD para carregamento incremental

A carga incremental é uma tarefa muito comum em relação às bases de dados. É a carga somente de registros novos ou alterados da base de dados. Todos os outros dados já devem estar disponíveis, de uma forma ou de outra. Com Arquivos QVD é possível executar carga incremental na maioria dos casos.

O processo básico está descrito abaixo:

1. Carregue os novos dados da tabela da Base de Dados (um processo lento, carregando um número limitado de registros).

2. Carregue os dados antigos do arquivo QVD (um processo bem mais rápido, carregando muitos registros).

3. Criar um novo arquivo QVD.

4. Repetir o procedimento para cada tabela carregada.

A complexidade da solução depende da natureza da base de dados de origem, mas os seguintes casos básicos podem ser identificados:

1) Caso 1: Anexar Apenas (normalmente arquivos de log

2) Caso 2: Inserir Apenas (Sem Atualizar nem Excluir)

3) Caso 3: Inserir e Atualizar (Sem Excluir)

4) Caso 4: Inserir, Atualizar e Excluir

Veja a seguir, as soluções descritas para cada um desses casos. A leitura dos arquivos QVD pode ser feita no modo otimizado ou no modo padrão. (O método usado é automaticamente selecionado pela linguagem de script do QlikView, dependendo da complexidade da operação.) O modo otimizado é (bem aproximadamente) 10 vezes mais rápido do que o modo padrão ou 100 vezes mais rápido do que carregar a base de dados do modo comum.

Caso 1: 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 (sem ODBC/OLE DB).

  • O QlikView 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);

Caso 2: Inserir Apenas (Sem Atualizar nem Excluir)

Se os dados residirem em uma base de dados, não em um arquivo de log simples, a solução do caso 1 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 QlikView carrega os registros inseridos na base de dados após a execução do último script.

  • É necessário um campo ModificationDate (ou semelhante) para que o QlikView 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 File.QVD (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.)

Caso 3: 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 QlikView carrega os registros inseridos ou atualizados na base de dados após a execução do último script

  • É necessário um campo ModificationDate (ou semelhante) para que o QlikView reconheça os registros novos.

  • É necessário um campo chave primário para que o QlikView 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;

 

Caso 4: 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 QlikView carrega os registros inseridos ou atualizados na base de dados após a execução do último script.

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

  • É necessário um campo ModificationDate (ou semelhante) para que o QlikView reconheça os registros novos.

  • É necessário um campo chave primário para que o QlikView 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