Consultar nome de arquivos FTP - SSIS

SQL Server

Modelagem

23/07/2015

Bom dia,

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

Willian Siqueira

Curtidas 0

Respostas

Isaac Jose

Isaac Jose

23/07/2015

Bom dia Amigo. trabalho com SSIS. porem para ajudar teria que saber mais sobre a sua estrutura de pacote, como vc pega essa informação se a armazena em tabelas etc.
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
GOSTEI 0
Willian Siqueira

Willian Siqueira

23/07/2015

Isaac, beleza?

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á....

:/
GOSTEI 0
Isaac Jose

Isaac Jose

23/07/2015

amigo voce nao consegue puxar esse arquivo txt verificando o ultimo nome disponivel e montando o nome novo pela task de arquivo de origem simples.?
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?
GOSTEI 0
Willian Siqueira

Willian Siqueira

23/07/2015

Eu fazia assim no sistema anterior que eu estava fazendo, (mas nem todos os arquivos seguem este padrão, e pode ser que algum venha com nome diferente - "são as palavras do meu gestor")...

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!
GOSTEI 0
Isaac Jose

Isaac Jose

23/07/2015

amigo vc esta enrolado. kkk.

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?
GOSTEI 0
Willian Siqueira

Willian Siqueira

23/07/2015

Enrolado??? hahahahah
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!
GOSTEI 0
Isaac Jose

Isaac Jose

23/07/2015

bom se pode usar a Tarefa executar sql ja nao esta mais tão enrrolado.
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 ..
GOSTEI 0
Willian Siqueira

Willian Siqueira

23/07/2015

Mas como eu listo os arquivos do FTP pelo SQL?
GOSTEI 0
Isaac Jose

Isaac Jose

23/07/2015

putz tenho uns exemplos que de scrip puxando XLS em pastas distintas com nomes distintos. mais estou em horario de almoço e minha maquina principal nao pode ser acessada se queizer posso te manda o exemplo que tenho perto das 4 ai vc tenta montar algo para ver se consegue resolver.
GOSTEI 0
Willian Siqueira

Willian Siqueira

23/07/2015

Isaac, Seria o máximo!!!!!

Meu E-mail é: willsancho@msn.com

Vc Salvaria minha vida desse louco q é meu gestor! rs....
GOSTEI 0
Isaac Jose

Isaac Jose

23/07/2015

mando sim e relaxa nao é por isso que vc vai morrer.. coisas piores viram kkkk
GOSTEI 0
Willian Siqueira

Willian Siqueira

23/07/2015

Hahahaha pior que vc tá certo!
GOSTEI 0
Isaac Jose

Isaac Jose

23/07/2015

Amigo não estou achando o pacote que tenho o exemplo vou ter que te explicar mais ou menos oque fiz ai vc vai tentando fazer por ai.
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..
GOSTEI 0
Willian Siqueira

Willian Siqueira

23/07/2015

Isaac, bom dia,

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.
GOSTEI 0
Isaac Jose

Isaac Jose

23/07/2015

bom dia.Will voce nao vai precisar fazer precisar preenchar manunal.

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.
GOSTEI 0
Willian Siqueira

Willian Siqueira

23/07/2015

então issac, neste caso eu pego os nomes que tenho no meu diretório local, nesse caso eu teria que listar os arquivos que estão no FTP certo? como eu faço essa conexão e com o FTP para poder listar os arquivos de lá?
GOSTEI 0
Isaac Jose

Isaac Jose

23/07/2015

vc cria uma conexão txt que vai ler a lista que vc passou.
ou sao FTP distintos e para cada um vc tem autenticar distintamente? se for ferrou. quantas conec vc tem se esse for o caso?
GOSTEI 0
Willian Siqueira

Willian Siqueira

23/07/2015

Não, pra cada fornecedor é um ftp, apesar que dentro dele posso pegar arquivos em diretórios diferentes, ou seja, imagine um ftp com a seguinte estrutura:

ftp.devmedia.com.....

no diretório raiz "/" eu teria os arquivos:

usuarios_201501.txt
usuarios_201502.txt
cursos_201501.txt
cursos_201502.txt
info_usu_201503.txt
inf_curso_201503.txt
receita_de_bolo_de_laranja.txt

e assim por diante...

no diretório "/complementar/"

tb_usuario_endereços_2008_201501.txt
usuario_enderecos_201502.txt
links_de_sites_patrocinadores.txt....


Bem, estas pastar dentro do FTP em que devo acessar!

os arquivos "ATUAIS" tem um padrão, por exempo "usuarios_AAAMM.txt", mas nem todos seguem ele, alguns vem como "info_usuario_201503.txt" ou "inf_uso_201503"...

Hj tem um padrão especificado, mas não podemos obrigar o fornecedor a seguir ele, então sempre pode vim alguma diferença no nome do mesmo arquivo...

Vai ser dificil disso acontecer, mas "A VIDA É DIFÍCIL E EU ESCREVI DIFERENTE ESSE MÊS" - Como diz o meu gestor sobre o fornecedor...

então eu precisaria baicar qualquer coisa que tenha nova no ftp, independente se o nome segue o padrão ou não.

Tipo, pela logica de programação é muito simples, faço uma lista do que tenho na minha pasta local, faço uma lista do que tem nas pastas do FTP do fornecedor, comparo e baixo só o que tem na lista do fornecedor e não tem nos meus diretórios locais.

mas pela logica do ETL eu não entendo como fazer isso, é muito diferente, rs....

Bom resumindo a explicação:

Conecto no FTP do Fornecedor, pego os arquivos de um ou mais diretórios (que eu ainda não tenha baixado) e baixo....
A ideia é simples... mas não conheço a ferramente o suficiente pra fazer isso rs....
A minha logica é a mesma da programação, mas não se aplica aqui rs....
GOSTEI 0
Isaac Jose

Isaac Jose

23/07/2015

me manda imagens do que vc tem em isaac_oliveralves@hotmail.com ai vamos vendo isso por email qualquer coisa tento montar algo por aqui.
GOSTEI 0
Sandrine Oliveira

Sandrine Oliveira

23/07/2015

Isac,
Eu guardo os arquivos FTP em tabelas, seria possivel implementar alertas para os arquivos que eventualmente eu precise receber e não tenha chegado?

Abs
GOSTEI 0
POSTAR