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

Откуда:
Сообщений: 1723
Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?

То есть каждую неделю в папку падает файл данных, у которого есть переменная часть - номер недели года. Как это обрабатывать?
21 июн 18, 19:23    [21510676]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
DaniilSeryi,

In this lesson, you will modify the simple ETL package created in Lesson 1 to take advantage of the Foreach Loop container. You will also set user-defined package variables to enable the tutorial package to iterate through all the flat files in the folder.
https://docs.microsoft.com/en-us/sql/integration-services/lesson-2-adding-looping-with-ssis?view=sql-server-2017
21 июн 18, 19:42    [21510691]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
DaniilSeryi
Member

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

Спасибо огромное!
21 июн 18, 20:12    [21510761]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
Так... доехали до переменной в соединении...

В общем так:
18409133
автор
Проблему случайно раскрыл.
Но в примере микрософта об это ни слова.
Соединение при создании является объектом проекта и это происходит по умолчанию.
В проекте может быть несколько пакетов и соединение проекта может использоваться в любом пакете.
Переменные создаются только в пакете и видны только внутри пакета, но не вне.
Соединение как объект проекта видит только параметры проекта, что и наблюдалось.
Поэтому соединение проекта не будет видеть переменные пакетов.
У соединения проекта в контектном меню есть такая команда: Перестроить в соединение пакета.
После этой команды в построителе выражений появляется узел Переменные и параметры уже не пустой.
В документации мне это не попадалось.
22 июн 18, 16:38    [21513746]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 308
DaniilSeryi,

Попробуйте File watcher task
http://www.sqlis.com/post/file-watcher-task.aspx
Я его юзал в одном проекте, вроде норм. работает.
У него есть OutputVariableName: The name of the variable into which the full file path found will be written on completion of the task.
22 июн 18, 17:29    [21513912]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
DaniilSeryi
Member

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

Спасибо, позже посмотрю. Пока стандартное решение устраивает.

У меня сейчас другая проблема возникла.
Надо в пакет засунуть команды распаковки pgp-файлов, их объединение и распаковка получившегося архива.

При этом ещё надо использовать конкретные утилиты - gpg, tar и gz.
23 июн 18, 10:35    [21514929]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
Владислав Колосов
Member

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

есть еще вариант - сделать контейнер цикла по файлам.
23 июн 18, 10:46    [21514941]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 553
DaniilSeryi
Так... доехали до переменной в соединении...

Так это не проблема. Есть минимум два способа решения.
1. Делаете Conn Manager уровня пакета (можете клонировать проектный) и там пользуетесь выражениями с переменными пакета.
2. Делаете параметр проекта. Далее - в expression Conn Manager используете данный параметр. При запуске пакета - указываете значение параметра проекта.
23 июн 18, 11:49    [21515012]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
Ferdipux
DaniilSeryi
Так... доехали до переменной в соединении...

Так это не проблема. Есть минимум два способа решения.
1. Делаете Conn Manager уровня пакета (можете клонировать проектный) и там пользуетесь выражениями с переменными пакета.
2. Делаете параметр проекта. Далее - в expression Conn Manager используете данный параметр. При запуске пакета - указываете значение параметра проекта.


Ну да, как раз первый вариант я и задействовал.

Владислав Колосов - он и используется.
23 июн 18, 22:01    [21515829]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
Подниму тему новым вопросом - как в SSIS выполнить набор команд для командной строки?
При условии, что этот набор команд не был заранее оформлен в виде .bat файла ?

Проблема в том, что задача «Выполнение процесса» / «Execute process» требует на вход .com, .exe. или .bat файл.
16 авг 18, 11:56    [21644217]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
Владислав Колосов
Member

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

Создать пакетный файл. Выполнить.
16 авг 18, 13:35    [21644434]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7762
+ удалить пакетный файл.
16 авг 18, 13:36    [21644436]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
Владислав Колосов
DaniilSeryi,

Создать пакетный файл. Выполнить.


а это при помощи какой задачи?
16 авг 18, 15:01    [21644615]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3248
DaniilSeryi
Владислав Колосов
DaniilSeryi,

Создать пакетный файл. Выполнить.


а это при помощи какой задачи?
Все три можно сделать в одной Script Task, на C#.

А если логика в оном файле прямолинейная, то возможно получится и без файла обойтись, вызывая оные команды непосредственно из шарпа.
16 авг 18, 15:53    [21644701]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
msLex
Member

Откуда:
Сообщений: 8091
Ennor Tiegael
А если логика в оном файле прямолинейная, то возможно получится и без файла обойтись, вызывая оные команды непосредственно из шарпа.

А если не линейна, то не получится?
16 авг 18, 16:56    [21644786]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3248
msLex
Ennor Tiegael
А если логика в оном файле прямолинейная, то возможно получится и без файла обойтись, вызывая оные команды непосредственно из шарпа.

А если не линейна, то не получится?
Ну если там IF'ы, или pipelining, или прочее из того же рода, то придется все это имитировать на шарпе. Теоретически написать можно все, другое дело что степень корявости и объем усилий такого результата могут сильно превзойти вариант "сохранить бат-файл, выполнить, удалить".
17 авг 18, 04:31    [21645283]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31356
DaniilSeryi
Владислав Колосов
DaniilSeryi,

Создать пакетный файл. Выполнить.


а это при помощи какой задачи?
Можно сделать Data Flow task, в котором источником будет SELECT с содержимым cmd-файла, а приёмником Flat File Destination
17 авг 18, 10:01    [21645450]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
Как понимаю, ещё можно из ScriptTask-a создать .bat файл?

В общем, остановился на варианте с запуском нужных команд при помощи "Выполнение процесса" (не помню сейчас, как название на заграничном будет).
27 авг 18, 12:45    [21654860]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4734
DaniilSeryi,

1) присвоить нужное имя файла переменной (Script Task)
2) Взять имя файла из переменной
27 авг 18, 14:55    [21655059]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
a_voronin
DaniilSeryi,

1) присвоить нужное имя файла переменной (Script Task)
2) Взять имя файла из переменной


Спасибо, так и сделал. Плюс For Each Loop над этим крутится.

Теперь другая проблема - в Visual Studio 2015 в Script Task-e с DTS.Variables проблем нет, всё сделано, значения переменных читаются / присваиваются, всё реализовано, проверено, внутреннее тестирование успешно пройдено, а вот в Visual Studio 2008 никак не пойму, как с DTS.Variables работать. Или там другой инструмент для работы с переменными пакета? При этом в обоих случаях все необходимые переменные в ReadOnlyVariables и ReadWriteVariables указаны.
27 авг 18, 16:04    [21655180]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 553
DaniilSeryi
...

Теперь другая проблема - в Visual Studio 2015 в Script Task-e с DTS.Variables проблем нет, всё сделано, значения переменных читаются / присваиваются, всё реализовано, проверено, внутреннее тестирование успешно пройдено, а вот в Visual Studio 2008 никак не пойму, как с DTS.Variables работать. Или там другой инструмент для работы с переменными пакета? При этом в обоих случаях все необходимые переменные в ReadOnlyVariables и ReadWriteVariables указаны.


Работа с переменными в SSIS 2008 такая же, объявляете при создании script task какие переменные нужно читать/писать и делаете это. Проекты со script task мигрировали с SSIS 2008 на 2014 без переписывания оных.
29 авг 18, 09:41    [21657159]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
Новая проблема образовалась: число файлов, подлежащих загрузке, достигает нескольких десятков. При этом объём каждого файла - несколько гигабайт и несколько десятков миллионов строк. Как можно ускорить процесс загрузки?
Кажется, мне уже советовали грузить файл в несколько потоков. То есть, первый поток грузит первые 4 миллиона строк, второй - следующие 4 миллиона, и т.д.
Правильно ли я понимаю, что для каждого потока надо будет создавать новый диспетчер подключения. При этом вся разница между этими диспетчерами будет только в диапазонах строк для загрузки?
И что будет, если число строк в файле окажется меньше, чем диапазон строк для загрузке в потоке?

Второй вопрос - можно ли аналогично ускорить выгрузку данных в текстовый файл?
18 сен 18, 14:21    [21678170]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
komrad
Member

Откуда:
Сообщений: 5244
DaniilSeryi
Новая проблема образовалась: число файлов, подлежащих загрузке, достигает нескольких десятков. При этом объём каждого файла - несколько гигабайт и несколько десятков миллионов строк. Как можно ускорить процесс загрузки?

http://henkvandervalk.com/speeding-up-ssis-bulk-inserts-into-sql-server
18 сен 18, 14:27    [21678183]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
DaniilSeryi
Member

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

Благодарю.
18 сен 18, 16:06    [21678353]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SSIS - как обрабатывать в пакете ситуацию, когда часть имени файла меняется?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31356
DaniilSeryi
Новая проблема образовалась: число файлов, подлежащих загрузке, достигает нескольких десятков. При этом объём каждого файла - несколько гигабайт и несколько десятков миллионов строк. Как можно ускорить процесс загрузки?
Кажется, мне уже советовали грузить файл в несколько потоков. То есть, первый поток грузит первые 4 миллиона строк, второй - следующие 4 миллиона, и т.д.
Правильно ли я понимаю, что для каждого потока надо будет создавать новый диспетчер подключения. При этом вся разница между этими диспетчерами будет только в диапазонах строк для загрузки?
И что будет, если число строк в файле окажется меньше, чем диапазон строк для загрузке в потоке?
Это сложно.
Проще загружать каждый файл в отдельном потоке.
18 сен 18, 19:10    [21678620]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить