Consultar nome de arquivos FTP - SSIS
23/07/2015
0
Preciso saber como retornar uma lista de todos os arquivos de um FTP pelo SSIS,
A intenção é comprar com o que ja tenho, e baixar apenas o que tem de novo.
<b>OBS: Não posso utilizar o "SCRIPT TASK"</b>
Alguém pode me ajudar por favor?
Willian Siqueira
Posts
23/07/2015
Isaac Jose
tenho um SSIS que compara dados e traz somente os novos porem eu faço comparações em SQL e envio o resultado para uma outra tabela.
poste a estrutura que esta fazendo mais detalhadamente para ver se consigo te ajudar.
att. Isaac
23/07/2015
Willian Siqueira
Obrigado por responder!
Bem, o Ambiente é o seguinte:
Estava elaborando um projeto, onde eu cadastrava um fornecedor com dados de conexão para o FTP, e para cada fornecedor, eu cadastrava um nome que seria um padrão para os arquivos que eu tenho que baixar, por exemplo:
Vamos supor o fornecedor "DEVMEDIA", ele compartilha comigo arquivos no formato TXT com os seguintes nomes:
usuarios_201506.txt
assinantes_201506.txt
cursos_201506.txt
Por padrão, os nomes dos arquivos são, "NOME_AAAAMM" ou seja, o nome sege o padrão a que representa seguido de ANO e MES.
Bom.... Eu tinha um banco de dados onde eu cadastrava o fornecedor "DEVMEDIA" E OS ARQUIVOS PADRÃO "USUARIOS_", "ASSINANTES_", "CURSOS_"... e um script olhava pra mim o ultimo arquivo que deu cerga EX. "usuarios_201506" e calculava o que seria o proximo "usuarios_201507".
Com este nome em mãos eu conseguia conectar no FTP através da ferramenta "FTP TASK" e baixar o arquivo corretamente, cadastrando no banco e tudo mais....
Só que meu gestor olhou o sistema que eu estava fazendo e me disse "Vc está construindo uma ferrary, mas eu quero um fusca".
Bom, o que ele quer é, q eu cadastre o fornecedor e crie uma tabela de arquivos, onde se for a primeira carga do fornecedor, seja baixado todo o conteúdo do FTP, caso não seja, ele quer que eu baixe apenas o que tem de novo.
O Ambiente atual "O FUSCA" tem a tabela de fornecedor, e uma dabela onde vou guardar os nomes dos arquivos, e vou ter que baixar do FTP apenas os arquivos que não estiverem salvos nesta tabela (SEM UTILIZAR O SCRIPT TASK).
A minha duvida é, como vao saber, qual arquivo do FTP é novo, já que o "FTP TASK" não retorna nomes, ele precisa saber o que baixar para poder baixar, e não me retorna uma lista para eu fazer uma comparação, sei lá....
:/
23/07/2015
Isaac Jose
eu tenho alguns processos onde baixo diariamente porem faço insert ou update e recorto o arquivo para uma pasta de historico.
como é a estrutura das tabela de fornecedor e a de guarda? voce consegue altera-las?
23/07/2015
Willian Siqueira
Então o que ele quer que eu faça, é comparar o que já tenho e baixar o que tiver novo, vai ter cadastrado em uma tabela os nomes dos arquivos, todos, mesmo q não sigam o padrão, e também eles estarão em pastas locais, a dificuldade, é saber quais são os arquivos novos do FTP e baixar eles.
Pela minha logica, eu teria que conseguir uma lista de todos os arquivos do FTP e comparar, mas não sei como conseguir essa lista sem o SCRIPT TASK.
Não concordo com esse método, mas quem manda é ele né rs...
O anterior fazia isso o que vc disse!
23/07/2015
Isaac Jose
ele quer que vc guarde os nomes dos arquivos em uma coluna da tabela para vc ter um historico do que ja foi inserido legal.
agora se ele deve estar falando que nao quer em um script task é pq deve ter alguma task que faz isso. mais eu realmente nao lembro se tem mesmo.
me dis uma coisa quando vc fala scrip task é a tarefa SCRIPT certo.
a que eu te falei é um TAREFA EXECUTAR SQL... essa vc pode usar?
23/07/2015
Willian Siqueira
Eu to totalmente embrulhado e apertado! kkkkkk
Então... a tabela ele quer! uma tabela com o id_fornecedor e o nome do arquivo que baixou.
A tarefa que não posso utilizar, é a tarefa onde programamos em C#, VB.... ele tem pavor dessa tarefa, então não posso utilizar ela pra nada.
A tarefa Executar SQL eu posso utilizar normal, a que posso rodar uma query ou uma procedure e retornar um resultset e tal... essa eu posso!
23/07/2015
Isaac Jose
da pra montar o scrip em sql para ele listar os arquivos de um determinado local e em contra partida vc compara com a lista da sua tabela que contem o id_fornecedor e o nome do arquivo o que sobrar vc manda fazer um insert ..
23/07/2015
Isaac Jose
23/07/2015
Willian Siqueira
Meu E-mail é: willsancho@msn.com
Vc Salvaria minha vida desse louco q é meu gestor! rs....
23/07/2015
Isaac Jose
23/07/2015
Isaac Jose
os arquivos que vc tem são txt certo?.
vc vai precisar montar uma tabela com o id_fornecedor e o nome dos arquivos que vc tera que listar. isso vc consegue fazer com um foor loop
quando vc tiver essa tabela montada vc vai fazer um insert na sua tabela principal verificando se aquele id_fornec e nome_caminho nao existem.
uma vez com a sua table principal com esses dois campos inseridos vc vai montar o select.
select caminho from table_principal
where campo ex cnpj do fornecedor for null. isso vai listar os caras a serem inseridos os demais valores.
depois vc cria um fluxo de dados dentro do loop mandando o mesmo pegar um caminho no qual vc vai quer criado um conexão ate onde os arquivos estao criados e o resto do caminho vai ser passado atraves de um OLE DB de destino os campos restantes ..
vou ver se acho o que eu tenho ou se consigo montar um no meu pc particular pra te mandar..
24/07/2015
Willian Siqueira
Eu não entendi muito bem...
Ele não quer preenchimentos manuais, então a unica foisa q não tem jeito seria o fornecedor por que tem que colocar o endereço do FTP, usuario, senha e tal....
Mas os demais cadastros devem ser feitos de forma audomatica...
Esta primeira tabela do seu exemplo, eu devo preencher ela com os arquivos que estão no FTP certo? como eu faço isso? Eu não sei como conectar no ftp apenas para pegar os nomes dos arquivos.
24/07/2015
Isaac Jose
no foor loop container voce joga o nome da pasta ex c\teste\ftp em coleção e nos arquivos vc joga usuarios_*.txt ele vai listar todas os cara com esse nome.
no mapeamento de variaveis vc vai criar um variavel com o nome do parquivo com indice 0.
essa varivavel vai montar o nome c\teste\ftp usuarios_201501, c\teste\ftp usuarios_201502 etc esses nomes vc vai colocar em uma tabela para comparar com o que vc ja tem de historia o que sobrar vc atualiza. mata o container atualizar.
Clique aqui para fazer login e interagir na Comunidade :)