6 Replies Latest reply: Sep 14, 2018 7:40 PM by Alessandro Furtado RSS

    Eliminar duplicatas arquivo

    Marcos Lima

      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.

       

      exemplo duplicata.PNG

       

      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?

        • Re: Eliminar duplicatas arquivo
          Giovanne Bergstein

          Fazendo a agregação com firstvalue(chave) deveria ter resolvido o problema.

          • Re: Eliminar duplicatas arquivo
            Alessandro Furtado

            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);



            • Re: Eliminar duplicatas arquivo
              Marcos Lima

              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?