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

Carga Incremental

Olá pessoal!

Preciso de uma técnica de carga incremental não usual, ainda não vi em nenhum manual/livro.

Abordagem : vou no banco de dados para gerar uma lista com todos as chaves de uma tabela, gerando o banco.qvd, com ele vou no qlik e comparo/descubro qual chave é nova e então ???(pensei em gerar um txt). Depois volto no banco para pegar apenas os registros com as chaves novas (Qlik lendo no banco).
 
Problemas: no Qlik posso usar o comando include para pegar o txt, porém no txt preciso colocar apóstrofo.
Exemplificando:
o select do banco será= select * from tabela where placa = 'ABC1234'
Se gerar um txt q contenha : placa = 'ABC1234'
qdo vou ler com o include, o qlik acrescenta aspas: "placa='ABC1234'"
ficando assim: select * from tabela where "placa = 'ABC1234'"-------- que dá erro de sintaxe no banco
 

Se gerar um txt sem apostrofo : placa = ABC1234, qdo vou ler com o include, o qlik acrescenta apostrofo: 'placa=ABC1234', ficando assim: select * from tabela where 'placa = ABC1234'-------- que dá erro de sintaxe no banco

Alguma sugestão? outra forma de atender essa abordagem?

obrigado.

 

Labels (1)
1 Solution

Accepted Solutions
jamirjunior
Creator
Creator
Author

Consegui! Vou descrever como resolvi, mas não vai servir para o meu caso, pois estava considerando apenas os registros novos e o usuário disse que existem alterações na tabela. Talvez seja útil para outros desenvolvedores.

1 - Crio o campo Saida, na primeira leitura do Banco. Minha tabela tinha 3 campos na chave:

E_tabela:
SELECT '('||'ve_cha=''' || TRIM(ve_cha) || '''' || 'and ve_apr_num_apr=''' || TRIM(b.ve_apr_num_apr)
|| '''' || 'and ve_apr_seq_apr=''' || TRIM(b.ve_apr_seq_apr) || '''' || ') or ' as Saida
FROM tabela
;
STORE E_tabela INTO E_tabela.qvd;    // pode ser suprimido

2 - A partir do qvd, comparo com minha tabela raiz(E_raiz.qvd), nesse ponto identifico quais registros são novos e excluo os velhos (geralmente uso o load...where not exists). Gero uma tabela auxiliar.

3 - Monto uma variável com a condição where:

E_auxiliar:
LOAD
Concat(Saida,' ') AS SAIDA
FROM
E_auxiliar.qvd(qvd);

let vSaida = fieldValue('SAIDA',1) & ')';
let vEntra = Replace (vSaida,'or)','');

4 - Vou no banco com a condição já montada:

E_Banco:
SELECT ve_cha, ve_apr_num_apr, ve_apr_seq_apr
FROM tabela
where $(vEntra)
;

Acredito ser uma outra forma de realizar uma carga incremental. Apesar de ler a tabela toda na primeira parte, busca apenas os campos do índice, então fica rápido.

View solution in original post

1 Reply
jamirjunior
Creator
Creator
Author

Consegui! Vou descrever como resolvi, mas não vai servir para o meu caso, pois estava considerando apenas os registros novos e o usuário disse que existem alterações na tabela. Talvez seja útil para outros desenvolvedores.

1 - Crio o campo Saida, na primeira leitura do Banco. Minha tabela tinha 3 campos na chave:

E_tabela:
SELECT '('||'ve_cha=''' || TRIM(ve_cha) || '''' || 'and ve_apr_num_apr=''' || TRIM(b.ve_apr_num_apr)
|| '''' || 'and ve_apr_seq_apr=''' || TRIM(b.ve_apr_seq_apr) || '''' || ') or ' as Saida
FROM tabela
;
STORE E_tabela INTO E_tabela.qvd;    // pode ser suprimido

2 - A partir do qvd, comparo com minha tabela raiz(E_raiz.qvd), nesse ponto identifico quais registros são novos e excluo os velhos (geralmente uso o load...where not exists). Gero uma tabela auxiliar.

3 - Monto uma variável com a condição where:

E_auxiliar:
LOAD
Concat(Saida,' ') AS SAIDA
FROM
E_auxiliar.qvd(qvd);

let vSaida = fieldValue('SAIDA',1) & ')';
let vEntra = Replace (vSaida,'or)','');

4 - Vou no banco com a condição já montada:

E_Banco:
SELECT ve_cha, ve_apr_num_apr, ve_apr_seq_apr
FROM tabela
where $(vEntra)
;

Acredito ser uma outra forma de realizar uma carga incremental. Apesar de ler a tabela toda na primeira parte, busca apenas os campos do índice, então fica rápido.