Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bom dia!
Durante muito tempo carreguei meus dados integralmente, porém com o crescimento do volume de dados, a carga está ficando cada vez mais demorada. Tenho um script que extraio os dados de um servidor Oracle e depois armazeno em um .QVD para cada tabela. Não estou familiarizado com o conceito de carga incremental e vim buscar ajuda. Como faço para inserir carga incremental, abaixo segue um exemplo:
[TGFCAB]:
LIB CONNECT TO 'Oracle_192.168.1.250';
[TGFCAB]:
LOAD
NUNOTA,
NUMNOTA,
DTNEG,
CODPARC,
CODTIPOPER,
CODVEND,
QTDVOL,
CODNAT,
VLRNOTA,
VLRSUBST,
AD_SEPARADOR,
AD_CONFERENTE,
AD_CONFERENTE2,
AD_EMBALADOR,
CODTIPVENDA,
STATUSNOTA,
TIPMOV,
DTFATUR,
NUCONFATUAL,
DHTIPOPER,
STATUSNFE,
AD_QTDERROS,
DTENTSAI,
AD_ESTOQUISTA,
AD_ESTOQUISTA2,
AD_NUMNF;
SELECT NUNOTA,
NUMNOTA,
DTNEG,
CODPARC,
CODTIPOPER,
CODVEND,
QTDVOL,
CODNAT,
VLRNOTA,
VLRSUBST,
AD_SEPARADOR,
AD_CONFERENTE,
AD_CONFERENTE2,
AD_EMBALADOR,
CODTIPVENDA,
STATUSNOTA,
TIPMOV,
DTFATUR,
NUCONFATUAL,
DHTIPOPER,
STATUSNFE,
AD_QTDERROS,
DTENTSAI,
AD_ESTOQUISTA,
AD_ESTOQUISTA2,
AD_NUMNF
FROM "JIVA"."TGFCAB";
STORE TGFCAB INTO [lib://QVDSTAGE/TGFCAB.QVD];
DROP TABLE TGFCAB;
Boa tarde!
Como ficaria a sintaxe nesse caso do exemplo acima?
Eu preciso do caso 3 ( Inserir, atualizar e não excluir) meu campo do banco dados de ModificationTime se chama DHALTER.
Boa Tarde,
Bom amigo posso lhe passar o método que uso, pode ter alguma variação de outros scripts.
Para começar você precisa criar uma variável que fará um teste logico para determinar se será feita a primeira carga ou se já ha carga anterior
LET vFileExists1 = IF(FileSize('[lib://dash/VENDAS.qvd]') > 0, 1, 0);
Essa variável diz se na pasta que você está dando store do seu qvd se ele existe ou não.
LET vID = IF(IsNull(vID), 0, vID);
Esta outra variável é usada para no caso de uma primeira carga não dar erro por encontrar um valor nulo.
Com isso você pode criar uma aba para a primeira carga:
Aqui é onde usamos a variável criada anteriormente para para determinar que se não houver qvd ele ira fazer a carga completa.
IF vFileExists1 = 0 THEN
LOAD
FILIAL,
ANO,
MÊS,
DATA ,
FROM [lib://dash/VENDAS.xlsx]
(ooxml, embedded labels, table is VENDAS);
Store VENDAS into [lib://dash/VENDAS.qvd] (qvd);
drop table VENDAS;
End If
Então criamos outra aba para a carga incremental.
IF vFileExists1 = 1 THEN // aqui testamos se existe um qvd
VENDAS:
Load
FILIAL,
ANO,
MÊS,
DATA ,
FROM [lib://dash/VENDAS.qvd] (qvd);
NoConcatenate
Criterio: //aqui determinamos qual o campo que usaremos como referencia para a incremental
Load max(DATA) as Ultima_data //determinamos qual o valor do campo no meu caso a ultima data
Resident VENDAS;
LET vID1 = PEEK('Ultima_data',0,'Criterio');
Drop Table Criterio;
LOAD
FILIAL,
ANO,
MÊS,
DATA ,
FROM [lib://dash/VENDAS.xlsx]
(ooxml, embedded labels, table is VENDAS) WHERE DATA > '$(vID1)';; //essa função diz que sera feita a carga de dados apenas que forem maiores que minha max(data)
Store VENDAS into [lib://dash/VENDAS.qvd];
Drop Table VENDAS;
End If
Eu dou um drop na tabela pois faço um load do qvd depois más vc pode ver qual a forma fica melhor pra vc