quarta-feira, 15 de outubro de 2014

ETL para retorna o endereço com coordenadas pelo CEP e número

Este post tem o objetivo de mostrar através de consultas aos sites do correiocontrol e do google maps como retornar os campos de endereço e sua georeferência, passando apenas os parâmetros de CEP e número. Para este post foi utilizado a ferramenta Pentaho Data Integration (PDI), ferramenta que pode ser baixada sem custo na versão da comunidade. Let’s Go!!!


Baixe o PDI no endereço: http://community.pentaho.com/projects/data-integration/. O único pré-requisito para executar o pentaho é ter um JDK instalado na sua máquina. O PDI vem compactado e não precisa de instalação descompacte em uma pasta e execute o arquivo “Spoon.bat” (no Windows) ou “Spoon.sh” (no Linux) localizado no raiz da pasta descompactada.



Irá abrir a tela de login dos repositórios do pentaho, como o objetivo desse post não é demonstrar a utilização de recursos do pentaho, vamos focar apenas no que o post se propõem, portanto clique no botão cancelar para abrir a ferramenta:



Esta é a tela inicial do Pentaho:



Clique no menu "File-> Novo -> Transformação", irá abrir uma nova aba ao lado da aba Bem Vindo, chamada “Transformação 1” de acordo com a tela:



Pronto, uma vez o ambiente ok, “vamu bota pá muê“, como diz o matuto!

Caso não esteja na aba “Design” no canto superior esquerdo, abaixo do menu, clique na mesma, pois é nessa aba que selecionamos os objetos que irão fazer a mágica que queremos. Já na aba “Design” clique na pasta “Input” e arraste o objeto “Generate Rows” para o centro da página assim como na imagem:



Dê dois cliques em cima do objeto arrastado para abrir a tela de configuração deste objeto, nela vamos configurar os campos cep e número; deixe-os com o tipo: String. Na coluna valor adicione um cep e um número válidos de sua escolha. Altere o valor do campo “Limit” para 1. Por questões de organização renomeie o nome do objeto para “Entrada do CEP”, após essas configurações as propriedades desse objeto deve estar igual a imagem:



O próximo objeto é o “Modified Java Script Value” para montar a URL que vai acessar os correios adicionando o parâmetro cep do passo anterior. Para ligar os dois objetos pressione a tecla “Shift”, clique sobre o objeto “Entrada do CEP” e arraste o mouse até o objeto “Modified Java Script Value” enquanto você arrasta o pentaho vai exibindo uma seta. A localização desse objeto é na pasta “Scripting”. Abaixo segue a tela mostrando a localização e a ligação entre os objetos da transformação.



Abra o objeto do Java Script e adicione o seguinte texto:

var cep_correiocontrol = 'http://cep.correiocontrol.com.br/'+cep+'.json';


Este objeto recebe conteúdo javascript, neste caso o utilizamos para adicionar uma variável “cep_correiocontrol” ao fluxo, este passo poderia ser executado de outras maneiras, e com outros objetos, escolhi o objeto javascript por ficar mais simples. Após unir os objetos clique no botão “Get variables” e note que ele adicionará um campo “cep_correiocontrol” do tipo string de acordo com a imagem abaixo, por questão de organização altere o campo “Step Name” para “URL CorreioControl”:



O próximo passo é fazer a chamada HTTP que retorna o JSON com o endereço do CEP, o objeto utilizado para isso é o “HTTP Client” que está localizado na pasta “Lookup”, adicione o mesmo ao fluxo já existente, ligando com o objeto “URL CorreioControl”. De um duplo clique no objeto adicionado para abrir as propriedades do mesmo e marque o check “Accept URL From field”. No campo “URL Field name” selecione o campo do passo anterior “cep_correiocontrol”. Mude para 0 os campos “Connection timeout”, “Socket timeout” e “Connection close wait time”. Caso a sua rede tenha proxy configure-o nos dois últimos campos da tela. Por questões de organização altere o nome do objeto para “Consulta CEP” ao final deste passo devemos ter as seguintes configurações:



Agora vamos tratar o JSON retornado pelo objeto HTTP Client, selecionamos o objeto “JSON Input” dentro da pasta “Input”, adicione e o ligue ao fluxo. Após inseri-lo ao fluxo edite suas propriedades e as deixe de acordo com as imagens.

Na aba “File” marque a opção “Source is defined in a field”, e no campo “Get source from field” escolha o campo “result”:



Na aba “Fields” adicione as linhas:

Name Path Type
bairro $..bairro String
logradouro $..logradouro String
cep $..cep String
uf $..uf String
localidade $..localidade String


A tela deverá ficar como a imagem a baixo:



As demais abas desse objeto não serão utilizadas nesse ETL. Com esse passo nós adicionamos ao fluxo os campos: bairro, logradouro, uf e localidade. Por questões de organização altere o nome do objeto para “Endereço em Json” e conclua clicando em “Ok”. Agora nosso fluxo deve ter essa aparência:



Ok, agora já conseguimos pegar os dados do CEP, falta ainda capturar a georeferência deste cep, vamos lá, adicione outro objeto javascript ao fluxo. Só para lembrar ele está na pasta “Scripting”. Nas propriedades do objeto adicione o seguinte JS (este JS remove caracteres indesejados e prepara o endereço para consultar ao Google Maps)


//Script here
var endereco = logradouro +', '+numero +', ' + localidade;

endereco = removeDiacritics(endereco);
endereco = endereco.replace(/ /gi, '%20');

var url_final = 'http://maps.google.com/maps/api/geocode/xml?sensor=false&address=' + endereco;

function removeDiacritics (str) {

  var defaultDiacriticsRemovalMap = [
    {'base':'A', 'letters':/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},
    {'base':'AA','letters':/[\uA732]/g},
    {'base':'AE','letters':/[\u00C6\u01FC\u01E2]/g},
    {'base':'AO','letters':/[\uA734]/g},
    {'base':'AU','letters':/[\uA736]/g},
    {'base':'AV','letters':/[\uA738\uA73A]/g},
    {'base':'AY','letters':/[\uA73C]/g},
    {'base':'B', 'letters':/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},
    {'base':'C', 'letters':/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},
    {'base':'D', 'letters':/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},
    {'base':'DZ','letters':/[\u01F1\u01C4]/g},
    {'base':'Dz','letters':/[\u01F2\u01C5]/g},
    {'base':'E', 'letters':/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},
    {'base':'F', 'letters':/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},
    {'base':'G', 'letters':/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},
    {'base':'H', 'letters':/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},
    {'base':'I', 'letters':/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},
    {'base':'J', 'letters':/[\u004A\u24BF\uFF2A\u0134\u0248]/g},
    {'base':'K', 'letters':/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},
    {'base':'L', 'letters':/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},
    {'base':'LJ','letters':/[\u01C7]/g},
    {'base':'Lj','letters':/[\u01C8]/g},
    {'base':'M', 'letters':/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},
    {'base':'N', 'letters':/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},
    {'base':'NJ','letters':/[\u01CA]/g},
    {'base':'Nj','letters':/[\u01CB]/g},
    {'base':'O', 'letters':/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},
    {'base':'OI','letters':/[\u01A2]/g},
    {'base':'OO','letters':/[\uA74E]/g},
    {'base':'OU','letters':/[\u0222]/g},
    {'base':'P', 'letters':/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},
    {'base':'Q', 'letters':/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},
    {'base':'R', 'letters':/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},
    {'base':'S', 'letters':/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},
    {'base':'T', 'letters':/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},
    {'base':'TZ','letters':/[\uA728]/g},
    {'base':'U', 'letters':/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},
    {'base':'V', 'letters':/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},
    {'base':'VY','letters':/[\uA760]/g},
    {'base':'W', 'letters':/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},
    {'base':'X', 'letters':/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},
    {'base':'Y', 'letters':/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},
    {'base':'Z', 'letters':/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},
    {'base':'a', 'letters':/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},
    {'base':'aa','letters':/[\uA733]/g},
    {'base':'ae','letters':/[\u00E6\u01FD\u01E3]/g},
    {'base':'ao','letters':/[\uA735]/g},
    {'base':'au','letters':/[\uA737]/g},
    {'base':'av','letters':/[\uA739\uA73B]/g},
    {'base':'ay','letters':/[\uA73D]/g},
    {'base':'b', 'letters':/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},
    {'base':'c', 'letters':/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},
    {'base':'d', 'letters':/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},
    {'base':'dz','letters':/[\u01F3\u01C6]/g},
    {'base':'e', 'letters':/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},
    {'base':'f', 'letters':/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},
    {'base':'g', 'letters':/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},
    {'base':'h', 'letters':/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},
    {'base':'hv','letters':/[\u0195]/g},
    {'base':'i', 'letters':/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},
    {'base':'j', 'letters':/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},
    {'base':'k', 'letters':/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},
    {'base':'l', 'letters':/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},
    {'base':'lj','letters':/[\u01C9]/g},
    {'base':'m', 'letters':/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},
    {'base':'n', 'letters':/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},
    {'base':'nj','letters':/[\u01CC]/g},
    {'base':'o', 'letters':/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},
    {'base':'oi','letters':/[\u01A3]/g},
    {'base':'ou','letters':/[\u0223]/g},
    {'base':'oo','letters':/[\uA74F]/g},
    {'base':'p','letters':/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},
    {'base':'q','letters':/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},
    {'base':'r','letters':/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},
    {'base':'s','letters':/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},
    {'base':'t','letters':/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},
    {'base':'tz','letters':/[\uA729]/g},
    {'base':'u','letters':/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},
    {'base':'v','letters':/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},
    {'base':'vy','letters':/[\uA761]/g},
    {'base':'w','letters':/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},
    {'base':'x','letters':/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},
    {'base':'y','letters':/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},
    {'base':'z','letters':/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}
  ];

  for(var i=0; i<defaultDiacriticsRemovalMap.length; i++) {
    str = str.replace(defaultDiacriticsRemovalMap[i].letters, defaultDiacriticsRemovalMap[i].base);
  }

  return str;

}


Após a inclusão deste texto, clique no botão “Get variables” para adicionar as variáveis ao fluxo, porém deixe apenas a variável url_final, removendo as outras variáveis. Renomeie o JS para “URL Maps”. No final o objeto terá essa aparência:



Clique em Ok e vamos ao próximo passo. Vamos agora fazer a consulta ao Google Maps passando a String “url_final” que montamos no passo anterior. Escolha novamente o objeto “HTTP Client” e o configure de acordo com a imagem abaixo, não esquecendo de mudar o nome do objeto para “Consulta MAPS”:



O retorno do google é em formato de XML, iremos utilizar o objeto “Get data from XML” encontrado dentro da pasta “Input”, ligue-o ao fluxo. Renomeio para “Coordenadas”. Faça as seguintes configurações:




  • Na aba “File”: marque o campo “XML source is defined in a field” e escolha no campo “get XML source from a field” o campo “result_1”.







  • Na aba “Content”: no campo Loop XPath adicione o texto /GeocodeResponse/result/geometry/location.







  • E por último na aba “Fields”: adicione os campos:


  • Name XPath Element Result type Type
    lat lat Node Value of String
    lng lng Node Value of String




    Pronto com isso já conseguimos pegar as coordenadas do seu endereço. Para concluir o processo vamos escolher os campos que queremos e depois criar um arquivo de texto com o resultado. Para escolher os campos que queremos salvar adicione ao fluxo o objeto chamado “Select values” que está contido na pasta “Transform”. Após adiciona-lo ao fluxo clique em “Get fields to select”, o pentaho irá trazer todos os campos que estão no fluxo, desde o cep e o número fornecidos para consulta até os resultados dos objetos HTTP Cliente, portanto, retire do fluxo as colunas que não desejar removendo as colunas e deixando-as de acordo com a imagem:



    Por fim escolha o objeto “Text file output” na pasta “Output” e o insira no fluxo.
    Na aba “File” clique no botão “Navega” para escolher o endereço onde o txt será salvo e o nome do arquivo.



    Na aba “Fields” clique em “Obtem campos” para pegar os campos que serão salvos no txt e clique em Ok para concluir.



    Ok, tudo pronto, hora de salvar o arquivo e testar. Para salvar sua transformação clique no meu “File -> Save”, e salve sua transformação em um local desejado dando um nome para a mesma, no meu caso escolhi o nome “ETL_ENDERECO_CEP”. No final de tudo a transformação ficou com essa aparência:



    Para rodar vá no menu "Action->Run". Na tela que abriu clique em "Launch". O resultado final deve ser a tela abaixo:



    Bom é isso, ficamos por aqui sobre esse assunto, qualquer dúvida ou sugestão é só dizer!

    22 comentários:

    1. Parabéns Amigo!! Post muito bom, excelente explicação, me ajudou muito. Abç

      ResponderExcluir
      Respostas
      1. Obrigado caro Eder, fico feliz em saber que consegui lhe ajudar, qualquer dúvida estou por aqui!

        Excluir
    2. Este comentário foi removido pelo autor.

      ResponderExcluir
      Respostas
      1. Opá Eder, infelizmente não, eu utilizo como ferramenta de front-end o OBIEE da Oracle, nunca trabalhei com o Ctools, infelizmente não poderei te ajudar.

        Excluir
    3. Fala Sergio, muito bom o seu passo a passo, muito obrigado.

      ResponderExcluir
    4. Estou tendo problemas no passo Consulta Cep , abaixo vou colocar o erro do log:

      Sabe o que pode ser?

      2015/10/13 17:31:41 - Spoon - Transformation opened.
      2015/10/13 17:31:41 - Spoon - Launching transformation [ETL_ENDERECO_CEP]...
      2015/10/13 17:31:41 - Spoon - Started the transformation execution.
      2015/10/13 17:31:41 - ETL_ENDERECO_CEP - Dispatching started for transformation [ETL_ENDERECO_CEP]
      2015/10/13 17:31:41 - Entrada do CEP.0 - Finished processing (I=0, O=0, R=0, W=1, U=0, E=0)
      2015/10/13 17:31:41 - URL CorreioControl.0 - Optimization level set to 9.
      2015/10/13 17:31:41 - URL CorreioControl.0 - Finished processing (I=0, O=0, R=1, W=1, U=0, E=0)
      2015/10/13 17:33:05 - Consulta CEP.0 - ERROR (version 5.4.0.1-130, build 1 from 2015-06-14_12-34-55 by buildguy) : Because of an error, this step can't continue:
      2015/10/13 17:33:05 - Consulta CEP.0 - Unable to get result from specified URL : http://cep.correiocontrol.com.br/13044620.json
      2015/10/13 17:33:05 - Consulta CEP.0 - Connection timed out: connect
      2015/10/13 17:33:05 - Consulta CEP.0 - Finished processing (I=0, O=0, R=1, W=0, U=0, E=1)
      2015/10/13 17:33:05 - ETL_ENDERECO_CEP - Transformation detected one or more steps with errors.
      2015/10/13 17:33:05 - ETL_ENDERECO_CEP - Transformation is killing the other steps!
      2015/10/13 17:33:05 - ETL_ENDERECO_CEP - ERROR (version 5.4.0.1-130, build 1 from 2015-06-14_12-34-55 by buildguy) : Errors detected!
      2015/10/13 17:33:05 - Spoon - The transformation has finished!!
      2015/10/13 17:33:05 - ETL_ENDERECO_CEP - ERROR (version 5.4.0.1-130, build 1 from 2015-06-14_12-34-55 by buildguy) : Errors detected!
      2015/10/13 17:33:05 - ETL_ENDERECO_CEP - ERROR (version 5.4.0.1-130, build 1 from 2015-06-14_12-34-55 by buildguy) : Errors detected!

      ResponderExcluir
      Respostas
      1. Tenho o mesmo problema, tenho um banco com vários CEPs e o mesmo consegue fazer 2 consultas e depois apresenta "Connection timed out: connect"

        Excluir
      2. Esses problemas são do webservice do correiocontrol, na época estava disponível, pode ser que hoje não estaja mais disponível, teremos que achar outro webservice pra consultar o cep.

        Excluir
    5. Este comentário foi removido pelo autor.

      ResponderExcluir
    6. Alguem conseguiu o novo endereço para retornar long e Lati ... baseado no endereço !?

      agradeço ajuda.

      ResponderExcluir
    7. Oi Pessoal. Eu também estou tendo problemas e acredito ser no step de consulta ao CorreioControl. Ele fica consultando e depois encerra. O outro pacote que não tem a consulta do correio control roda na boa, porém gostaria de saber de como fazer para que o arquivo final possua também os dados de endereço além das coordenadas. Obg.

      ResponderExcluir
      Respostas
      1. No exemplo ele já adiciona os outros campos no arquivo, adiciona um step "Select Values" ao fluxo e pede pra inserir os campos novos no botão ("Get Fields to select"). Segue abaixo o trecho que faz a escolha dos campos:
        Pronto com isso já conseguimos pegar as coordenadas do seu endereço. Para concluir o processo vamos escolher os campos que queremos e depois criar um arquivo de texto com o resultado. Para escolher os campos que queremos salvar adicione ao fluxo o objeto chamado “Select values” que está contido na pasta “Transform”. Após adiciona-lo ao fluxo clique em “Get fields to select”, o pentaho irá trazer todos os campos que estão no fluxo, desde o cep e o número fornecidos para consulta até os resultados dos objetos HTTP Cliente, portanto, retire do fluxo as colunas que não desejar removendo as colunas e deixando-as de acordo com a imagem: ...

        Excluir
    8. Pessoal, erro é esse:

      2016/05/23 14:49:34 - cfgbuilder - Warning: The configuration parameter [org] is not supported by the default configuration builder for scheme: sftp
      2016/05/23 15:09:55 - Spoon - Transformation opened.
      2016/05/23 15:09:55 - Spoon - Launching transformation [Retorna_Latitude_Longitude]...
      2016/05/23 15:09:55 - Spoon - Started the transformation execution.
      2016/05/23 15:11:20 - Spoon - The transformation has finished!!
      2016/05/23 15:26:25 - Retorna_Latitude_Longitude - Expedindo in�cio para transforma��o [Retorna_Latitude_Longitude]
      2016/05/23 15:26:25 - Entrada do CEP.0 - Finished processing (I=0, O=0, R=0, W=1, U=0, E=0)
      2016/05/23 15:26:25 - URL CorreioControl.0 - Optimization level set to 9.
      2016/05/23 15:26:25 - URL CorreioControl.0 - Finished processing (I=0, O=0, R=1, W=1, U=0, E=0)
      2016/05/23 15:27:49 - Consulta CEP.0 - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : Because of an error, this step can't continue:
      2016/05/23 15:27:49 - Consulta CEP.0 - Unable to get result from specified URL : http://cep.correiocontrol.com.br/80215020.json
      2016/05/23 15:27:49 - Consulta CEP.0 - Connection timed out: connect
      2016/05/23 15:27:49 - Consulta CEP.0 - Finished processing (I=0, O=0, R=1, W=0, U=0, E=1)
      2016/05/23 15:27:49 - Retorna_Latitude_Longitude - Transforma��o detectada
      2016/05/23 15:27:49 - Retorna_Latitude_Longitude - Transforma��o est� matando os outros steps!
      2016/05/23 15:27:49 - Endereço em Json.0 - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : Erro inesperado
      2016/05/23 15:27:49 - Endereço em Json.0 - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : java.lang.NullPointerException
      2016/05/23 15:27:49 - Endereço em Json.0 - at org.pentaho.di.trans.steps.jsoninput.JsonInput.prepareToRowProcessing(JsonInput.java:153)
      2016/05/23 15:27:49 - Endereço em Json.0 - at org.pentaho.di.trans.steps.jsoninput.JsonInput.processRow(JsonInput.java:101)
      2016/05/23 15:27:49 - Endereço em Json.0 - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)
      2016/05/23 15:27:49 - Endereço em Json.0 - at java.lang.Thread.run(Unknown Source)
      2016/05/23 15:27:49 - Endereço em Json.0 - Finished processing (I=0, O=0, R=0, W=0, U=0, E=1)
      2016/05/23 15:27:49 - Retorna_Latitude_Longitude - Transforma��o detectada
      2016/05/23 15:27:49 - Retorna_Latitude_Longitude - Transforma��o est� matando os outros steps!
      2016/05/23 15:27:49 - Retorna_Latitude_Longitude - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : Erros detectados!
      2016/05/23 15:27:49 - Spoon - The transformation has finished!!
      2016/05/23 15:27:49 - Retorna_Latitude_Longitude - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : Erros detectados!
      2016/05/23 15:27:49 - Retorna_Latitude_Longitude - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : Erros detectados!

      ResponderExcluir
      Respostas
      1. Esse erro deve ser algo do correio control mesmo. Limitação de acesso, serviço indisponível, etc!

        Excluir
      2. Desculpe Sérgio. Não me atentei na resposta anterior. Obrigado.

        Excluir
      3. Desculpe Sérgio. Não me atentei na resposta anterior. Obrigado.

        Excluir
    9. Oi Sérgio.
      Tentei usar o outro pacote que só acessa o google maps. Também está dando um erro. Pederia me ajudar? Segue:

      2016/05/24 15:08:56 - Spoon - Transformation opened.
      2016/05/24 15:08:56 - Spoon - Launching transformation [Retorna_Latitude_Longitude_ClientesApenas_Google]...
      2016/05/24 15:08:56 - Spoon - Started the transformation execution.
      2016/05/24 15:08:56 - Retorna_Latitude_Longitude_ClientesApenas_Google - Expedindo in�cio para transforma��o [Retorna_Latitude_Longitude_ClientesApenas_Google]
      2016/05/24 15:08:56 - Generate Rows.0 - Finished processing (I=0, O=0, R=0, W=1, U=0, E=0)
      2016/05/24 15:08:56 - URL Maps.0 - Optimization level set to 9.
      2016/05/24 15:08:56 - URL Maps.0 - Finished processing (I=0, O=0, R=1, W=1, U=0, E=0)
      2016/05/24 15:10:21 - Consulta MAPS.0 - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : Because of an error, this step can't continue:
      2016/05/24 15:10:21 - Consulta MAPS.0 - Unable to get result from specified URL : http://maps.google.com/maps/api/geocode/xml?sensor=false&address=Cruz%20Machado,%2070,%20Uniao%20da%20Vitoria
      2016/05/24 15:10:21 - Consulta MAPS.0 - Connection timed out: connect
      2016/05/24 15:10:21 - Consulta MAPS.0 - Finished processing (I=0, O=0, R=1, W=0, U=0, E=1)
      2016/05/24 15:10:21 - Retorna_Latitude_Longitude_ClientesApenas_Google - Transforma��o detectada
      2016/05/24 15:10:21 - Retorna_Latitude_Longitude_ClientesApenas_Google - Transforma��o est� matando os outros steps!
      2016/05/24 15:10:21 - Retorna_Latitude_Longitude_ClientesApenas_Google - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : Erros detectados!
      2016/05/24 15:10:21 - Spoon - The transformation has finished!!
      2016/05/24 15:10:21 - Retorna_Latitude_Longitude_ClientesApenas_Google - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : Erros detectados!
      2016/05/24 15:10:21 - Retorna_Latitude_Longitude_ClientesApenas_Google - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : Erros detectados!

      ResponderExcluir
      Respostas
      1. Boa tarde José Berilo, o link está correto, foi algum problema no webservice do google, ele retornou o xml corretamente. Por favor testa de novo. O erro foi "timed out" da conexão com o google!

        Excluir
      2. Boa Noite Sérgio. Obrigado. Vou testar.

        Excluir
      3. Fiz o que você sugeriu no post anterior. Eu coloquei os campos no step select e na saída do arquivo texto. Ele traz todos os dados mas, só põe cabeçalho nas coordenadas. Tem como resolver isso?

        Excluir
    10. Muito bom o tutorial!!! O webservice correiocontrol não está funcionando mais, utilizei o viacep

      ResponderExcluir