Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá pessoal!
Preciso de uma técnica de carga incremental não usual, ainda não vi em nenhum manual/livro.
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.
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.
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.