Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá pessoal.
Preciso realizar a carga dos obituários contidos no link abaixo, porém não consegui ter idéias para construir a carga incremental (dados são atualizados todos os dias ou na semana). Já usei crosstable para outros projetos, no entanto neste caso o número de linhas para cada pessoa pode mudar.
http://obituarios.curitiba.pr.gov.br/publico/falecimentos.aspx
Desde já agradeço atenção de todos.
Abraços.
Versão mais simples do script (depois de umas horas de sono), rss
Tabela:
LOAD @1,
@2,
RowNo() AS Indice
FROM
[http://obituarios.curitiba.pr.gov.br/publico/falecimentos.aspx](html, unicode, no labels, table is @1)
where Len(@1)>0;
Esparsa:
load
Indice,
if(@1='Nome:',AutoNumberHash128(@2,Indice),Peek('Chave')) as Chave,
If(@1='Nome:',@2) as [Nome],
If(@1='Data do Falecimento:',@2) as [Data do Falecimento],
If(@1='Idade:',@2) as [Idade] ,
If(@1='Profissão:',@2) as [Profissão] ,
If(@1='Nome do Pai:',@2) as [Nome do Pai] ,
If(@1='Nome da Mãe:',@2) as [Nome da Mãe] ,
If(@1='Cônjuge:',@2) as [Cônjuge] ,
If(@1='Número da FAF:',@2) as [Número da FAF] ,
If(@1='Local do Falecimento:',@2) as [Local do Falecimento] ,
If(@1='Local do Velório:',@2) as [Local do Velório] ,
If(@1='Local do Sepultamento:',@2) as [Local do Sepultamento] ,
If(@1='Data do Sepultamento:',@2) as [Data do Sepultamento] ,
If(@1='Funerária:;',@2) as [Funerária]
Resident Tabela
Order by Indice;
drop Table Tabela;
final:
NoConcatenate
load
Hash128(Chave,MinString(Nome),MinString("Data do Falecimento"),Minstring("Nome da Mãe")) as ChaveGeral,
Chave as ChaveDia,
Minstring("Cônjuge") as "Cônjuge",
Minstring("Data do Falecimento") as "Data do Falecimento",
Minstring("Data do Sepultamento") as "Data do Sepultamento",
Minstring("Funerária") as "Funerária",
Minstring("Idade") as "Idade",
Minstring("Local do Falecimento") as "Local do Falecimento",
Minstring("Local do Sepultamento") as "Local do Sepultamento",
Minstring("Local do Velório") as "Local do Velório",
Minstring("Nome") as "Nome",
Minstring("Nome da Mãe") as "Nome da Mãe",
Minstring("Nome do Pai") as "Nome do Pai",
Minstring("Número da FAF") as "Número da FAF",
Minstring("Profissão") as "Profissão"
resident Esparsa
Group by Chave;
Drop Table Esparsa;
If FileSize('falecimentos.qvd')>0 then
Concatenate(final)
load * From falecimentos.qvd(qvd) Where not Exists(ChaveGeral);
endif;
Store final into falecimentos.qvd(qvd);
Bom dia Tiago,
Com certeza terás que fazer um belo trabalho de validação de dados incrementais e crosstable, além da limpeza de registros.
Dê uma lida nestes artigos para auxiliar ser desenvolvimento
Utilizando Cargas Parciais - Qknow
http://mundoqlik.com/carga-incremental-en-qlikview-parte-1
Ricardo,
Obrigado pela resposta, vou dar uma olhada nos links que você passou.
Acho que meu maior trabalho será quanto ao crosstable mesmo. E bem por isto que vim buscar ajuda dos experts da comunidade.
Obrigado.
Abraços.
Oi Tiago,
Porque é necessário utilizar cross table. Os dados não são enviados nessa padrão chave/valor pra ti?
Com certeza, a disposição.
Atuei em uma demanda similar um tempo atrás em que fazia a recarga dos dados frequentemente e descartava os dados, pois era mais produtivo do que desenvolver lógicas mais complexas, com recargas diárias ou até a perda de registros.
Segue também o documento com exemplos em relação ao Crosstable
Chegaste a perguntar se eles possuem alguma api ou conexão para request destes dados?
Oi Eduardo,
Na verdade foi a ideia que tive para transpor as linhas em colunas, mas se tiver outra ideia te agradeço.
Obrigado.
Abraços.
Ficou meio longo o script, mas fez a carga e o incremental.
Seguem
Versão mais simples do script (depois de umas horas de sono), rss
Tabela:
LOAD @1,
@2,
RowNo() AS Indice
FROM
[http://obituarios.curitiba.pr.gov.br/publico/falecimentos.aspx](html, unicode, no labels, table is @1)
where Len(@1)>0;
Esparsa:
load
Indice,
if(@1='Nome:',AutoNumberHash128(@2,Indice),Peek('Chave')) as Chave,
If(@1='Nome:',@2) as [Nome],
If(@1='Data do Falecimento:',@2) as [Data do Falecimento],
If(@1='Idade:',@2) as [Idade] ,
If(@1='Profissão:',@2) as [Profissão] ,
If(@1='Nome do Pai:',@2) as [Nome do Pai] ,
If(@1='Nome da Mãe:',@2) as [Nome da Mãe] ,
If(@1='Cônjuge:',@2) as [Cônjuge] ,
If(@1='Número da FAF:',@2) as [Número da FAF] ,
If(@1='Local do Falecimento:',@2) as [Local do Falecimento] ,
If(@1='Local do Velório:',@2) as [Local do Velório] ,
If(@1='Local do Sepultamento:',@2) as [Local do Sepultamento] ,
If(@1='Data do Sepultamento:',@2) as [Data do Sepultamento] ,
If(@1='Funerária:;',@2) as [Funerária]
Resident Tabela
Order by Indice;
drop Table Tabela;
final:
NoConcatenate
load
Hash128(Chave,MinString(Nome),MinString("Data do Falecimento"),Minstring("Nome da Mãe")) as ChaveGeral,
Chave as ChaveDia,
Minstring("Cônjuge") as "Cônjuge",
Minstring("Data do Falecimento") as "Data do Falecimento",
Minstring("Data do Sepultamento") as "Data do Sepultamento",
Minstring("Funerária") as "Funerária",
Minstring("Idade") as "Idade",
Minstring("Local do Falecimento") as "Local do Falecimento",
Minstring("Local do Sepultamento") as "Local do Sepultamento",
Minstring("Local do Velório") as "Local do Velório",
Minstring("Nome") as "Nome",
Minstring("Nome da Mãe") as "Nome da Mãe",
Minstring("Nome do Pai") as "Nome do Pai",
Minstring("Número da FAF") as "Número da FAF",
Minstring("Profissão") as "Profissão"
resident Esparsa
Group by Chave;
Drop Table Esparsa;
If FileSize('falecimentos.qvd')>0 then
Concatenate(final)
load * From falecimentos.qvd(qvd) Where not Exists(ChaveGeral);
endif;
Store final into falecimentos.qvd(qvd);
Clever, ficou ótimo!
Muito obrigado.
Por fim, o título inicial (era o que achei que resolveria) ficou bem diferente da solução do Clever, então vou colocar algumas tags que possam ajudar dúvidas futuras.
Carga de link da web
Mesmo registros em linhas distintas