Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Como incrementar fazendo apenas insert de novos arquivos e rejeitando alterações em dados já existentes ?

Oi,

Alguém poderia me tirar uma dúvida sobre Incrmental Load, Qlik Sense ?

Eu tenho que fazer load incremental (de um arquivo .csv), mas meu desafio é fazer com que os arquivos antigos não sejam atualizado. Por exemplo se um arquivo X, com os campos Data, TotalVenda e ValorUnitario, foi carregado com seus dados no mês passado e no mês atual o campo TotalVenda tenha sido alterado, essa alteração tem que ser rejeitada, ou seja ela não pode ser salva.

Segue o exemplo da minha tabela:

Tabela_Teste:
LOAD
    DATA&'|'&PICO as CHAVE_Teste,
    DATA as Data,
    PICO,
    FERIADO,
    DATA_SEM_B,
    DIA,
    MES,
    ANO,
FROM [lib://Con_Ori_CSV/exemplo_Teste.csv]
(txt, codepage is 28591, embedded labels, delimiter is '|', msq);

SET CAMINHO_Tabela_Teste = [lib://Load_QVDs/exemplo_Teste.qvd];

If filesize('$(CAMINHO_Tabela_Teste)') > 0 Then
Concatenate(Tabela_Teste)
Load

    CHAVE_Teste,

    DATA as Data,

    PICO,

    FERIADO,

    DATA_SEM_B,

    DIA,

    MES,

    ANO,


FROM [lib://Load_QVDs/exemplo_Teste.qvd](qvd)
WHERE NOT EXISTS (CHAVE_Teste);

STORE Tabela_Teste INTO 'lib://Load_QVDs/exemplo_Teste.qvd'(qvd);
else
STORE Tabela_Teste INTO 'lib://Load_QVDs/exemplo_Teste.qvd'(qvd);
ENDIF;

O WHERE NOT EXISTS(CHAVE_Teste) está aí para não permitir que os dados sejam duplicados. Porém existe uma falha nisso. Seu alterar manualmente os dados, mas permanecer com a chave(CHAVE_Teste) e rodar carga é feito Update. Isso não deveria acontecer pois se já existe a chave a alteração deveria ser rejeitada, assim como qualquer outra alteração em dados já existentes.

Seria possível também guardar essas alterações rejeitadas?

Grata!!!

Labels (1)
4 Replies
Thiago_Justen_

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

Fonte: https://help.qlik.com/pt-BR/qlikview/12.0/Subsystems/Client/Content/QVD_Incremental.htm

Aplica-se ao QlikView e ao Sense

Thiago Justen Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago
Anonymous
Not applicable
Author

Entendi. Muito obrigada Thiago.

Na verdade o que preciso é fazer com que o Qlik entenda que o campo CHAVE_Teste é uma espécie de identificador, no caso, mesmo que alguém manualmente altere qualquer dado no csv o Qlik veja que o campo CHAVE_Teste já existe e não faça o Update. Seria pra fazer insert apenas se a chave ainda não existisse.

Tentei fazer isso mas percebi que o Qlik não insere ou faz update de apenas um campo (isso quando a base de dados são csvs), ele atualiza todos, ou seja, mesmo que a chave seja a mesma e apenas um dos campos teve uma alteração o Qlik entende que deve inserir. Meu problema é de não conseguir fazer com que ele compare a chave que vai ser inserida com as chaves que já foram inseridas.

Se poder e ajudar com essa dúvida ficarei mais grata ainda.

Thiago_Justen_

Veja Sumara, lendo melhor tudo que você descreveu acima deixe-me observar algo:

Você escreve:

o campo CHAVE_Teste é uma espécie de identificador, no caso, mesmo que alguém manualmente altere qualquer dado no csv o Qlik veja que o campo CHAVE_Teste já existe e não faça o Update.

Aqui cabe uma ressalva. Se você/usuário alterar os campos que compõe a Chave_Teste, nesse caso Data e Pico, você terá no ato do carga uma nova chave (já que são registros diferentes dos salvos no qvd) e por isso o qlik faz o incremento no qvd. Repare então que não é uma falha do qlik, mas sim na concepção da carga incremental. Você pode até mapear essas alterações através de um campo no teu csv de Data de Alteração, por exemplo. Mas ainda assim, se você altera os valores que compõe a chave, sinceramente eu não consigo imaginar como "adivinhar" isso no script. Talvez se você tivesse algum outro campo que não seja passível de alteração e daí chamá-lo e tratá-lo como chave para usar no incremental...

Enfim, cabe um brainstorm nesse assunto.

Thiago Justen Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago
Anonymous
Not applicable
Author

Isso. Essa é justamente a dúvida. Se o campo alterado não for os que compõe a chave então a chave continua a mesma. Nesse caso não deveria ser alterada.

Obrigada pela resposta