Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 SSIS: Получить атрибуты файла  [new]
Trurl
Member

Откуда:
Сообщений: 20
Здравствуйте.
Прошу помощи в реализации задачи для SSIS:
из переменной пакета Variable1 (string) берётся полный путь файла, в переменную пакета Variable2 (boolean) пишется признак File In Use, в переменную Variable3 (Int64) пишется размер файла в байтах.
Очевидно, что задача решается через Script Task.

Проблема - вообще не знаю С# и VB, копипаста нагугленных решений давала невозможность выполнения кода с целой россыпью ошибок.

Использую SSDT 2016
23 ноя 18, 21:38    [21743382]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
.Евгений
Member

Откуда:
Сообщений: 493
Trurl
признак File In Use

В отличие от остального, это нечеткая и не совсем уж тривиальная задача.

Впрочем, у вас есть простой путь: Execute Process Task + dir + Windows Sysinternals Handle.exe
24 ноя 18, 00:35    [21743461]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
aleks222
Member

Откуда:
Сообщений: 851
.Евгений
Trurl
признак File In Use

В отличие от остального, это нечеткая и не совсем уж тривиальная задача.

Да ладно те, попытка открыть файл с эксклюзивным доступом на запись.
Не открылся - File In Use.
24 ноя 18, 06:08    [21743511]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
.Евгений
Member

Откуда:
Сообщений: 493
aleks222
Да ладно те, попытка открыть файл с эксклюзивным доступом на запись.
Не открылся - File In Use.

Или файла установлен атрибут Read Only, или у пользователя недостаточно прав. У-упс, да?
24 ноя 18, 10:48    [21743544]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
aleks222
Member

Откуда:
Сообщений: 851
.Евгений
aleks222
Да ладно те, попытка открыть файл с эксклюзивным доступом на запись.
Не открылся - File In Use.

Или файла установлен атрибут Read Only, или у пользователя недостаточно прав. У-упс, да?

В чем разница, Зин?
24 ноя 18, 11:29    [21743553]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
.Евгений
Member

Откуда:
Сообщений: 493
aleks222
.Евгений
Или файла установлен атрибут Read Only, или у пользователя недостаточно прав. У-упс, да?

В чем разница, Зин?

Во всем, если нужно прочесть стабильный файл.
Во многом, если нужно дождаться окончания блокировки.

P.S.
- Твоя программа пишет, что файл заблокирован. Так?
- Да.
- Берем Handle, смотрим результат. Где блокировка файла?
- Ну, не знаю... значит, что-то еще мешает. Неправильно выгрузили файл...
- Смотри сюда. Передо мной бизнес поставил глобальную задачу: обработать файл. Благодаря твоему компоненту задача не выполняется. Частную задачу, поставленную тебе, твой компонент выполняет неправильно. Корректно указать на причину не может. Ты у нас джуниор, нет? Ну тогда извини, поздно тебя учить решать поставленные задачи вместо своих собственных.
24 ноя 18, 12:52    [21743603]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Trurl
Member

Откуда:
Сообщений: 20
Давайте разделим задачу на две независимых:
1) убедиться, что файл из сетевой папки никем не изменяется и может быть скопирован для дальнейшей обработки DTS-пакетом.
2) мы достоверно знаем, что файлом никто не пользуется. Нужно получить размер файла. (Чтобы при превышении порогового значения зазиповать файл и передать имя зип-архива в задачу отправки почты).
Да, можно это сделать через запуск команды dir с записью результатов в неструктурированный текстовый файл, построчный импорт содержимого этого файла в SQL и последующего анализа. Но это - не наш метод.
24 ноя 18, 18:07    [21743776]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
.Евгений
Member

Откуда:
Сообщений: 493
Trurl
Давайте разделим задачу на две независимых:
1) убедиться, что файл из сетевой папки никем не изменяется и может быть скопирован для дальнейшей обработки DTS-пакетом.
2) мы достоверно знаем, что файлом никто не пользуется. Нужно получить размер файла. (Чтобы при превышении порогового значения зазиповать файл и передать имя зип-архива в задачу отправки почты).
Да, можно это сделать через запуск команды dir с записью результатов в неструктурированный текстовый файл, построчный импорт содержимого этого файла в SQL и последующего анализа. Но это - не наш метод.

Не проще ли будет попытаться заархивировать файл? Ошибки обрабатывайте или транслируйте в лог, а при успехе работайте с архивом как вам заблагорассудится.
24 ноя 18, 18:59    [21743808]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Trurl
Member

Откуда:
Сообщений: 20
.Евгений
Не проще ли будет попытаться заархивировать файл? Ошибки обрабатывайте или транслируйте в лог, а при успехе работайте с архивом как вам заблагорассудится.


Проще. Но это решение другой задачи.

Моя задача формулируется так: есть большой пакет, который генерирует разнообразную отчётность.
Все отчёты представляют из себя csv-файлы.
Отчёты нужно отправлять пользователям электронной почтой.
Большие отчёты не пролезают сквозь фильтр корпоративной почты, так как отсекаются по объёму в 20 мегабайт.
Файл с отчётом нужно зазиповать только в том случае, если нельзя его отправить в незазипованном варианте.
24 ноя 18, 19:10    [21743810]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
.Евгений
Member

Откуда:
Сообщений: 493
Trurl
Моя задача формулируется так: есть большой пакет, который генерирует разнообразную отчётность.
Все отчёты представляют из себя csv-файлы.
Отчёты нужно отправлять пользователям электронной почтой.
Большие отчёты не пролезают сквозь фильтр корпоративной почты, так как отсекаются по объёму в 20 мегабайт.
Файл с отчётом нужно зазиповать только в том случае, если нельзя его отправить в незазипованном варианте.

Возможно ли модифицировать большой пакет, чтобы он поддерживал (читал/писал) наличие/отсутствие блокировки на файле (таблица со списком файлов в работе, файлы-дубли xxx.lck и т.п.? А в идеале - самостоятельно отправлял файлы, благо это дело нехитрое.
24 ноя 18, 20:37    [21743849]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Trurl
Member

Откуда:
Сообщений: 20
.Евгений
Возможно ли модифицировать большой пакет, чтобы он поддерживал (читал/писал) наличие/отсутствие блокировки на файле (таблица со списком файлов в работе, файлы-дубли xxx.lck и т.п.?

Так мне и нужна помощь по написанию компонента, который бы определял, есть на файле блокировки или нет.
Есть блокировка - завершить выполнение пакета. Нет блокировки - скопировать файл и начать тянуть из него данные.

.Евгений
А в идеале - самостоятельно отправлял файлы, благо это дело нехитрое.


Он и так сам отправляет. Задача - написать функцию, которая будет направлять поток по сценарию отправки оригинального файла либо по сценарию зипования и отправки зазипованного файла.
24 ноя 18, 21:34    [21743877]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
vikkiv
Member

Откуда: London
Сообщений: 2622
Trurl,

у тебя workflow с входным параметром пути и имени файла (т.е. полный путь)
поставь script task (проверки на lock файла) на выходе которого будет успешное окончание либо выход с ошибкой
например при помощи PowerShell код выхода ошибки будет 999, а 0 - это чистый/успешный выход без ошибок
powershell.exe -command "Try{[System.IO.File]::Open('C:\tmp\tst.xlsx','Open','Write').Close()}Catch{exit 999}"
естественно путь файла будет параметром из SSIS типа (User::my_file_full_path) т.е. всё выражение команды можно конструировать через expressions
24 ноя 18, 23:11    [21743910]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
.Евгений
Member

Откуда:
Сообщений: 493
Trurl,
кажется, мы друг друга не понимаем. Еще раз объясню свое мнение.
Большой пакет формирует отчетность. Если вся ее обработка находится в большом пакете, то модифицировать отчетность кому-то еще нет видимого смысла. Чтобы кто-то не совершил бессмысленное действие, такую возможность легко блокировать правами пользователя. Соответственно, конфликт отсутствует, проверка блокировок (сомнительным способом) не требуется.
25 ноя 18, 16:10    [21744143]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
Trurl
Так мне и нужна помощь по написанию компонента, который бы определял, есть на файле блокировки или нет.
Есть блокировка - завершить выполнение пакета. Нет блокировки - скопировать файл и начать тянуть из него данные.
Неверная постановка задачи.
Информация о заблокированности файла становится бессмысленной сразу после ее получения.
25 ноя 18, 16:52    [21744165]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Trurl
Member

Откуда:
Сообщений: 20
.Евгений
Trurl,
кажется, мы друг друга не понимаем. Еще раз объясню свое мнение.
Большой пакет формирует отчетность. Если вся ее обработка находится в большом пакете, то модифицировать отчетность кому-то еще нет видимого смысла. Чтобы кто-то не совершил бессмысленное действие, такую возможность легко блокировать правами пользователя. Соответственно, конфликт отсутствует, проверка блокировок (сомнительным способом) не требуется.


Мы точно не понимаем друг друга.
Есть две разных задачи:
1) получить размер файла,
2) получить сведения, что в файл не совершается запись.

Всем мои объяснения, как я это планирую использовать, не влияют на формулировку задач.

Вот здесь предлагается решение:
[url=]http://microsoft-ssis.blogspot.com/2011/03/get-file-properties-with-ssis.html[/url]

Я все варианты повторяю в в своей Visual Studio, но всегда получаю одинаковую ошибку

К сообщению приложен файл. Размер - 39Kb
25 ноя 18, 17:46    [21744188]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Trurl
Member

Откуда:
Сообщений: 20
invm
Неверная постановка задачи.
Информация о заблокированности файла становится бессмысленной сразу после ее получения.


В моём случае верная.
Поставщик данных выкладывает архивные файлы одной порцией на наш FTP-сервер рано утром.
После того, как передача всех данных завершена, в эти файлы уже никто писать не будет.
Мне нужно узнать, что передача файлов завершена и я могу начать извлекать из этих архивов файлы с данными.
25 ноя 18, 17:55    [21744192]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
.Евгений
Member

Откуда:
Сообщений: 493
Trurl
Поставщик данных выкладывает архивные файлы одной порцией на наш FTP-сервер рано утром.
После того, как передача всех данных завершена, в эти файлы уже никто писать не будет.
Мне нужно узнать, что передача файлов завершена и я могу начать извлекать из этих архивов файлы с данными.

Смотрите наличие установленных FTP соединений.
25 ноя 18, 20:05    [21744251]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Trurl
Поставщик данных выкладывает архивные файлы одной порцией на наш FTP-сервер рано утром.
После того, как передача всех данных завершена, в эти файлы уже никто писать не будет.
Мне нужно узнать, что передача файлов завершена и я могу начать извлекать из этих архивов файлы с данными.

Молодой человек, Вы делаете мне смешно. Поставщик выкладывает текстовый файлик info.txt, в котором последней строкой идет хэш от даты и времени создания этого файла (ну или просто текстовый "EOF"), а до этого для каждого выложенного файла идет md5 хэш (или sha-1) и название файла.
Вы читаете маленький файлик, парсите, получаете список того, что НУЖНО таки обработать. Нет файла из списка - передача по FTP не завершена.
Если файлики на месте - циклом читаете содержимое, от него сразу вычисляете хэш, при несовпадении с нужным значением из массива помечаете (или отправляете сообщение "Ой-вей, все плохо, или bad sectors, или nonECC memory error, или повредился файл при передаче из-за сбойной сетевой карты, или запись в файл ЕЩЕ не завершена, все еще идет передача) и переходите к следующему. Если все без ошибок - еще отдельное письмо "Файлики кошерные, таки все хорошо!".

ВСЁ. Не нужно изобретать велосипед. Нужно уметь работать с поставщиком данных. Ему тоже важно выгрузить на Ваш FTP свои файлики в целости и сохранности.

Соединений может не быть. Активных. Пришел сисадмин, вырубил файерволлом все коннекты, файл оборвался на середине. НИЧЕГО не держит такой файл на запись, но тем не менее файлом пользоваться НЕЛЬЗЯ.

Понимаете теперь "всю глубину наших глубин" (с) ?
26 ноя 18, 01:00    [21744390]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
.Евгений
Trurl
Поставщик данных выкладывает архивные файлы одной порцией на наш FTP-сервер рано утром.
После того, как передача всех данных завершена, в эти файлы уже никто писать не будет.
Мне нужно узнать, что передача файлов завершена и я могу начать извлекать из этих архивов файлы с данными.

Смотрите наличие установленных FTP соединений.

Отсутствие FTP соединений означает не то, что передача всех файлов завершена. Это может означать, что первую порцию передали, потом сделали долгую паузу, закрыв соединения, потом продолжили передача оставшейся части.

Не нужно советовать так оптимистично. Ведь коллега послушает Ваш совет - и так и сделает. Желательно сразу указывать на подводные камни. То есть в целом Ваш совет неплох - но не для данного конкретного случая.
26 ноя 18, 01:02    [21744393]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Trurl
Member

Откуда:
Сообщений: 20
Andy_OLAP,

откуда у Вас уверенность, что файл info.txt есть?
У меня такой уверенности нет.
Опять же, функции вычисления хэшей файлов в SSIS нет.
Реализация моей задачи не средствами SQL Server Integration Services вообще не имеет отношения к текущему разделу форума.
26 ноя 18, 01:15    [21744395]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
Trurl
откуда у Вас уверенность, что файл info.txt есть?
Если подобного файла нет, то вы сами себе злобные буратины вместе с поставщиком.
Trurl
Опять же, функции вычисления хэшей файлов в SSIS нет.
Script Component придется таки освоить.
26 ноя 18, 01:21    [21744399]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Trurl
Andy_OLAP,

откуда у Вас уверенность, что файл info.txt есть?
У меня такой уверенности нет.
Опять же, функции вычисления хэшей файлов в SSIS нет.
Реализация моей задачи не средствами SQL Server Integration Services вообще не имеет отношения к текущему разделу форума.

Вы таки не поняли. У меня уверенность, что такого файла нет. Но он должен быть. Вы решаете проблему передвижения путем попытки запрять корову сзади телеги. А нужно взять лошадь и запрячь спереди телеги. Понимаете аналогию?
Нужно решать правильную проблему. Ту, которую можно и нужно решить. А не ту, которую Вам задали решать - а тут даже не так, а просто проблему, которую Вы считаете нужной для решения.

Не нужно гадать про файлы. Передаются, не передаются, открыты на запись, есть коннекты. Это все лишнее. Получили список файлов, получили список хэшей, начали обрабатывать. Нет файла на месте, а название в перечне есть - все, проблема. Есть файл, но сумма не совпадает - все, проблема. А кто его на запись держит или обрубилась передача на полпути - это уже раскопки по результату проблемы.

Того, кому нужно СОДЕРЖИМОЕ файла, не интересуют FTP коннекты. Ему важно - это информация или свалка байтов. Понимаете?
26 ноя 18, 01:21    [21744400]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Trurl
Member

Откуда:
Сообщений: 20
Andy_OLAP,

отбросим все мои объяснения на тему зачем мне решать мою задачу.

Мне нужно знать, как средствами SSIS получить в переменные пакета два атрибута файла - размер и FileInUse.
Ваша квалификация позволяет дать ответ на этот конкретный вопрос?
26 ноя 18, 01:42    [21744405]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
Trurl
Мне нужно знать, как средствами SSIS получить в переменные пакета два атрибута файла - размер и FileInUse.
Хорош фантазировать, нет у файла атрибута FileInUse, в NTFS забыли предусмотреть.
26 ноя 18, 02:05    [21744414]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: Получить атрибуты файла  [new]
vikkiv
Member

Откуда: London
Сообщений: 2622
Trurl,

SSIS всего лишь контейнер WorkFlow с некоторыми стандартизированными блоками
он вовсе не покрывает абсолютно весь спектр возможных задач (как и любой другой инструмент)
так что остальное только скриптами и прочими кастомными блоками.

да хоть через SQL (xp_dirtree, xp_cmdshell, xp_fileexist и т.д.) можешь запросить
что там в директории происходит и в каком состоянии находится, никто ведь не запрещает.

для работы с файлами - лучше использовать для этого предназначенные инструменты, в самом
Windows есть куча утилит как GUI так и API (.bat скриптовые, .vb, .NET и пр.) для решения таких вопросов
вызвать их из SSIS - всегда было довольно просто.

кстати переименование файла на котором стоит Lock : вывалится с ошибкой,
это свойство успешно и можно использовать в SSIS для проверки
(а дальше : ошибка - одна ветвь алгоритма, ок - другая).

в общем вопрос фантазии и опыта реализации.

если отбросить завесу мутности и примитивности некоторых персонажей
то в остальном тебе дали достаточно широкий спектр потенциальных направлений решений
дальше - вопрос личных предпочтений.
26 ноя 18, 02:06    [21744416]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить