Skip to main content
Announcements
See what Drew Clarke has to say about the Qlik Talend Cloud launch! READ THE BLOG
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.