Leitura de dados de arquivos QVD

Uso de arquivo QVD como fonte de dados explícita
Os arquivos QVD podem ser referenciados por um comando load no script
do QlikView, como qualquer outro tipo de arquivo de texto (csv, fix, dif, biff,
etc). O Assistente de Arquivo padrão trabalha com arquivos QVD
exatamente como qualquer outro arquivo de tabela.
LOAD * FROM xyz.qvd (qvd);
LOAD Nome, NúmReg FROM xyz.qvd (qvd);
LOAD Nome as a, NúmReg as b FROM xyz.qvd (qvd);
Quando nenhuma transformação for aplicada nos campos lidos (além da
renomeação de campos), será usado o modo de leitura super-rápido.

Uso automático de arquivos QVD com buffer
Ao usar o prefixo buffer em comandos load ou select, nenhum comando
explícito para leitura é necessário. O QlikView determinará como usar dados
do arquivo QVD ou como obter dados por meio de comando load ou select
original.

Novas funções de script
Várias novas funções de script foram incluídas para o acesso aos dados
localizados no cabeçalho XML de arquivo QVD. Essas funções estão
descritas em “Funções de arquivo” na página 457 neste volume.

Usando arquivos QVD para carga 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. O restante já deve
estar disponível, de uma forma ou outra.
Com a ajuda de arquivos QVD, é possível executar cargas incrementais na maioria
dos casos. O processo básico ocorre da seguinte forma:

  1. Carregar novos dados da tabela da base de
    dados (lento, mas poucos registros)
  2. Carregar dados antigos do arquivo QVD
    (muitos registros, mas rápido)
  3. Criar um novo arquivo QVD
  4. Repetir o procedimento para cada tabela

A complexidade real da solução depende das condições da
base de dados de origem, mas pode ser dividida em alguns
casos básicos, conforme descrito a seguir.

  1. Anexar apenas (Arquivos de log)
  2. Inserir apenas (Sem Atualizar nem Excluir)
  3. Inserir e Atualizar (Sem Excluir)
  4. Inserir, Atualizar e Excluir

Veja a seguir, as soluções descritas para cada um desses casos.

________________________________________________
Caso 1: Anexar apenas

O caso mais simples é o de arquivos de log, que são
apenas anexados. As condições são as seguintes:

  • A base de dados deve ser um arquivo de
    log contido em um arquivo de texto (sem
    ODBC/OLEDB).
  • O QlikView controla o número de
    registros lidos anteriormente e carrega
    apenas registros incluídos no final do
    arquivo.

Exemplo de script:

Buffer (Incremental) Load * From ArquivodeLog.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 condições são as seguintes:

  • 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 de Data da Modificação (ou semelhante)
    para que o QlikView reconheça os registros novos.

Exemplo de script:
Tabela_QV:
SQL SELECT ChavePrimária, X, Y FROM DB_TABLE
WHERE HoraModificação >= #$(HoraÚltExec)#
AND HoraModificação < #$(HoraInícioExec)#;
Concatenate
LOAD ChavePrimária, X, Y FROM Arquivo.QVD;
STORE Tabela_QV INTO Arquivo.QVD;

________________________________________________
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 condições são as seguintes:

  • 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 de Data da Modificação (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.
  • Essa solução fará com que a leitura do arquivo QVD seja no modo
    padrão e não no modo super-rápido. O resultado final, no entanto,
    ainda será consideravelmente mais rápido do que se a base de dados
    inteira tivesse que ser lida.

Exemplo de script:
Tabela_QV:
SQL SELECT ChavePrimária, X, Y FROM DB_TABLE
WHERE HoraModificação >= #$(HoraÚltExec)#;
Concatenate
LOAD ChavePrimária, X, Y FROM Arquivo.QVD
WHERE NOT Exists(ChavePrimária);
STORE Tabela_QV INTO Arquivo.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 condições são as seguintes:

  • 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 de Data da Modificação (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.
  • Essa solução fará com que a leitura do arquivo QVD seja no modo padrão e não no modo super-rápido. O resultado final, no entanto, ainda será consideravelmente mais rápido do que se a base de dados inteira tivesse que ser lida.

Exemplo de script:
Let ThisExecTime = Now();
Tabela_QV:
SQL SELECT ChavePrimária, X, Y FROM DB_TABLE
WHERE HoraModificação >= #$(HoraÚltExec)#
AND HoraModificação < #$(HoraDestaExec)#;
Concatenate LOAD ChavePrimária, X, Y FROM Arquivo.QVD
WHERE NOT EXISTS(ChavePrimária);
Inner Join SQL SELECT ChavePrimária FROM DB_TABLE;
If ScriptErrorCount = 0 then
STORE Tabela_QV INTO Arquivo.QVD;
Let HoraÚltExec = HoraDestaExec;
End If

Fonte: Manual de Referencia Qlikview 10.

Arquivos QVD – Parte 1/3
Arquivos QVD – Parte 2/3 
Arquivos QVD – Parte 3/3 <- Você está aqui.