Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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!!!
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:
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
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.
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.
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