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 do Banco 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. Crie um novo arquivo QVD.

4. Repita 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 empregado é selecionado automaticamente pelo mecanismo de script do QlikView dependendo da complexidade da operação.) O modo otimizado é (muito aproximadamente) cerca de 10x mais rápido que o modo padrão ou cerca de 100x mais rápido do que carregar o banco de dados de maneira 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.

Example:  

Carregamento de buffer (incremental) * De LogFile.txt (ansi, txt, o delimitador é '\t', rótulos de valor incorporados);

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.

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 (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.

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;

 

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.

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