Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa tarde pessoal, sou novo aqui na comunidade e gostaria de tirar uma dúvida.
Tenho uma aplicação ao qual preciso fazer um LOAD de vários arquivos .csv
Cada um desses arquivos contém linhas com informações sobre produtos, como por exemplo preço e data de vigencia.
EXEMPLO:
PRODUTO | DATA_INICIAL | DATA_FINAL | PRECO
A dúvida é, como tenho vários desses arquivos, um para cada mês com a seguinte situação, quando o preço de determinado permanece dentro da vigencia para o mês seguinte, o arquivo .csv do mês seguinte vem novamente com o registro de vigencia. Criando assim a chave duplicada.
EXEMPLO de um arquivo do mês de março:
PRODUTO 1, 01/03/2016, "" , 20,00
PRODUTO 2, 01/03/2016, 15/03/2016 , 25,00
PRODUTO 2, 16/03/2016, "", 26,00
Onde "" é quando ainda não tem data de vigencia final.
EXEMPLO de um arquivo do mês de abril:
PRODUTO 1, 01/03/2016, "" , 20,00
PRODUTO 2, 01/03/2016, 15/03/2016 , 25,00
PRODUTO 2, 16/03/2016, 10/04/2016, 26,00
PRODUTO 2, 11/04/2016, "", 27,00
Viram como no arquivo do mês de abril, o meu LOAD vai carregar novamente o registro do produto lá do arquivo de março, PRODUTO 2, 16/03/2016, "", 26,00 - sendo que ele é o mesmo registro que está em abril porém agora encerrou a vigência, e já apareceu uma nova.
É possível resolver isso de alguma forma e fazer com que meu LOAD carregue apena o ultimo registro primário, ignorando assim o que ficou desatualizado na virada do mês quando ocorreu a troca do arquivo?
Não sei se me expressei de forma que fique fácil o entendimento, qualquer dúvida me perguntem. Desde já agradeço!
Boa noite Fernando, quase foi... agora importou apenas as keys unicas.
Porem como o primeiro registro que ele importa vem do arquivo antigo, ele esta mantendo o registro mais antigo em vez de gravar o mais atual que ja contem a data de vigencia final.
Pelo jeito estamos no caminho certo.
Sera que agora tem jeito de carregar o registro mais atual de cada chave?
Tive outra ideia.
Você disse que têm um autonumber certo?
Cada linha PRODUTO, DATA_INICIO tem uma chave com autonumber.
Passo 1: Gerar a tabela Base lendo todos os arquivos concatenados.
Passo 2: Gerar a tabela Atuais lendo do resident Base os campos PRODUTO, DATA_INICIO e max(autonumber) as chave
group by PRODUTO, DATA_INICIO;
Passo 3: Inner Join(Base)
load *
resident(Atuais);
Passo 4: Drop table Atuais;
O max(autonumber) tem que ter o nome do campo de autonumber original na tabela Base.
No exemplo que montei não vai excluir o histórico, pois estou criando um campo de FLAG para te orientar qual é o valor mais atual do produto. Como te falei, a chave, por ser um autonumber deve ser montada somente após o tratamento da informação que você precisa, pois o autonumber vai criar registros distintos, mesmo que tenha o valor de outras colunas iguais.
Você consegue enviar um pouco mais de informações para que possa te montar um exemplo melhor?
Eu olhei a solução do Yuri e é a mais simples de fato.
QLIK COMMUNITY
LOAD SEM DUPLICAR CHAVE PRIMARIA
resposta de Yuri Nicolett em Qlik Brasil - Visualize a discussão completa
Fala pessoal, seguindo os exemplo do Fernando e do Yuri, e um pouco de cada ideia que o pessoal foi deixando, consegui importar os registros na ordem decrescente e utilizando o exists resolvi o problema de chave duplicada.
Agora é partir para o próximo desafio que surgiu quando passei desse, pode ser que em breve eu precise abrir mais alguma dúvida, e valeu mesmo pessoal pelo tempo e apoios dedicados em ajudar o próximo.
A dúvida agora é a seguinte, nesse caso que foi um pouco de cada qual resposta eu marco como correta? Não queria que ninguém se sentisse prejudicado. Abraço!
Marque a que mais te ajudou e coloque as outras como úteis.
Em 15/04/2016 15:50, Pedro Henrique Pazini escreveu:
QLIK COMMUNITY
LOAD SEM DUPLICAR CHAVE PRIMARIA
resposta de Pedro Henrique Pazini em Qlik Brasil - Visualize a discussão completa