Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bom dia,
Temos um script que trabalha dados de extrações automáticas (arquivos txt) disponibilizados num portal do Tesouro Nacional (informações orçamentárias/financeiras).
Mapeamos os campos das tabelas no script com base na posição de cada caractere dos arquivos texto. Segue um trecho:
Lista_Favorecidos_Doc:
LOAD distinct
[@2:15] as [Favorecido Doc],
[@2:15] as [NE Inicial - Favorecido], //// chave
if([@16:16]=1,'PJ',
if([@16:16]=2,'PF',
if([@16:16]=3,'IG', 'UG'))) as [Tipo Favorecido Doc],
if([@16:16]=1,'Pessoa Jurídica',
if([@16:16]=2,'Pessoa Física',
if([@16:16]=3,'Inscrição Genérica',
'Unidade Gestora'))) as [Nome Tipo Favorecido Doc],
[@17:35] as [Nome Reduzido Favorecido Doc],
[@36:90] as [Nome Favorecido Doc],
[@2:15]&' - '&[@36:90] as [Favorecido Completo Doc],
[@91:155] as [Endereço Favorecido Doc],
[@156:159] as [Cód. Município Favorecido Doc],
[@160:167] as [CEP Favorecido Doc],
[@168:169] as [UF Favorecido Doc],
[@170:172] as [Cód. País Favorecido Doc],
[@173:217] as [Telefone Favorecido Doc],
[@218:262] as [End. Eletrônico Favorecido Doc],
[@263:265] as [Cód. Natureza Jurídica Favorecido Doc],
FROM
[..\1. Dados - originais\Credor\*.TXT]
(fix, codepage is 1252);
São feitos alguns joins para acrescentar outros campos vindos de outras tabelas (também criadas a partir de txts) e no final, o script gera um arquivo texto que serve de input para uma aplicação em Access. Este arquivo deveria ter registros únicos com base na chave principal, mas está havendo duplicatas em função de um único campo que diverge, como abaixo.
Preciso fazer o script ler os arquivos texto e na hora de dar o store no arquivo de saída, considerar apenas a primeira ocorrência da chave do registro, ignorando as eventuais duplicatas. Já tentei usar o FirstValue mas sem êxito. Alguma ideia de como implementar?
Fazendo a agregação com firstvalue(chave) deveria ter resolvido o problema.
Marcos,
quem sabe usando o applymap
Map_Nome:
mapping LOAD
[@2:15] as [NE Inicial - Favorecido], //// chave
[@36:90] as [Nome Favorecido Doc]
FROM [..\1. Dados - originais\Credor\*.TXT] (fix, codepage is 1252);
Lista_Favorecidos_Doc:
LOAD distinct
[@2:15] as [Favorecido Doc],
[@2:15] as [NE Inicial - Favorecido], //// chave
if([@16:16]=1,'PJ',
if([@16:16]=2,'PF',
if([@16:16]=3,'IG', 'UG'))) as [Tipo Favorecido Doc],
if([@16:16]=1,'Pessoa Jurídica',
if([@16:16]=2,'Pessoa Física',
if([@16:16]=3,'Inscrição Genérica',
'Unidade Gestora'))) as [Nome Tipo Favorecido Doc],
//============================================================================
//[@17:35] as [Nome Reduzido Favorecido Doc],
ApplyMap('Map_Nome',[@2:15]) as [Nome Reduzido Favorecido Doc],
//============================================================================
[@36:90] as [Nome Favorecido Doc],
[@2:15]&' - '&[@36:90] as [Favorecido Completo Doc],
[@91:155] as [Endereço Favorecido Doc],
[@156:159] as [Cód. Município Favorecido Doc],
[@160:167] as [CEP Favorecido Doc],
[@168:169] as [UF Favorecido Doc],
@170:172] as [Cód. País Favorecido Doc],
[@173:217] as [Telefone Favorecido Doc],
[@218:262] as [End. Eletrônico Favorecido Doc],
[@263:265] as [Cód. Natureza Jurídica Favorecido Doc]
FROM [..\1. Dados - originais\Credor\*.TXT] (fix, codepage is 1252);
se não fiz no campo correto é só ajustar
Consegui fazer funcionar o FirstValue "quebrando" o carregamento da tabela, para isolar o group by usando apenas a chave e o campo aplicado à função. Se eu carrego mais campos num mesmo load e agrego com o group by apenas um campo, aparece a mensagem "Invalid Expression".
left Join
load distinct
[NE Inicial - Favorecido] as [NE_Favorecido], //chave para o join
FirstValue([Nome Favorecido Doc]) as [NE_Favor_Nome]
Resident Lista_Favorecidos_Doc Group By [NE Inicial - Favorecido];
left Join
load distinct
[NE Inicial - Favorecido] as [NE_Favorecido], //chave para o join
[Tipo Favorecido Doc] as [NE_Favor_Tipo_Cod],
[Nome Tipo Favorecido Doc] as [NE_Favor_Tipo_Nome]
Resident Lista_Favorecidos_Doc;
Parecido com o relatado na thread error message "invalid expression" while loading .
Alguém sabe dizer o por que desse comportamento do group by? seria assim para todas as funções de agregação?
Teste apenas com a exclusão do distinct:
left Join
load distinct
[NE Inicial - Favorecido] as [NE_Favorecido], //chave para o join
FirstValue([Nome Favorecido Doc]) as [NE_Favor_Nome]
Resident Lista_Favorecidos_Doc Group By [NE Inicial - Favorecido];
left Join
load distinct
[NE Inicial - Favorecido] as [NE_Favorecido], //chave para o join
[Tipo Favorecido Doc] as [NE_Favor_Tipo_Cod],
[Nome Tipo Favorecido Doc] as [NE_Favor_Tipo_Nome]
Resident Lista_Favorecidos_Doc;
usando o applymap não deu?
Olá Alessandro,
Como funcionou isolando o group by, acabou que não testei o applymap. Vou tentar arrumar um tempinho aqui para testar.
Obrigado