как пропустить строки динамического заголовка в ssis - PullRequest
2 голосов
/ 21 сентября 2019

Привет У меня есть одно сомнение в SSIS, я хочу загрузить несколько CSV-файлов в таблицу сервера SQL с помощью пакета SSIS.во время загрузки нам нужно учитывать данные из заголовков в палатах.

Путь к исходному файлу содержит 3 файла csv с фиксированными столбцами заголовков с данными, но каждый файл имеет информацию о описании файла и дате создания до заголовков, а одно описание файла - 2row и заголовкиначало строки с 4-го ряда с данными.Другое описание файла поступает из 1 строки и 9 строки в палатах с заголовками с данными, а другой файл будет содержать описание файла из 5 строк, а строки заголовков начинаются с 7-й строки.Заголовки столбцов фиксируются во всех файлах csv

Расположение файлов:

  1. C: \ test \ a.csv
  2. C: \ test \ b.csv
  3. C: \ test \ c.csv

Данные файла a.csv, как показано ниже:

here descritpion and dates comes 2and 3 row.actual data start from 4th row onwards
descritiion:empinfromationforhydlocation
creadeddate:2018-04-20

id |name|loc
1  |a   |hyd

Данные файла b.csv, как показано ниже:

here descritpion and dates comes 1and 2 row.actual data start from 9th row onwards
descritiion:empinfromationforhydlocation
creadeddate:2018-04-21

id |name|loc
10  |b   |chen

c.csv file data like below :

here descritpion and comes 5 and 6 row.actual data start from 9th row onwards
descritiion:empinfromationforhydlocation
creadeddate:2018-04-21

id |name|loc
20  |c   |bang

На основе вышеуказанного файла 3 я хочу загрузить данные в таблицу целевого сервера sql emp:

id  | Name |Sal
1   |a     |hyd
2   |b     |chen
3   |c     |bang

здесь я попытался, как показано ниже в стороне пакета:

  1. создать переменную:
    • путь к файлу: C: \ test \
    • имя файла: C: \ test \ a.csv
  2. перетащить и отпуститьконтейнер цикла for-each:
    • выберите тип перечислителя для перечислителя файлов for-each *
    • каталог: c: \ test
    • отображение переменных: имя файла, его настройка.
    • тип файла: * .csv
    • извлечение имени файла: имя файла и расширение
  3. Внутри контейнера каждого цикла я перетаскиваю задачу потока данных исоздать соединение с плоским файлом, здесь используется один из файлов конфигурацииПропущена строка с заголовком и строкой 1 и используется требуемый столбец для преобразования данных и настройки для таблицы назначения OLE DB и создания динамического выражения соединения для соединения с плоским файлом для динамической передачи имени файла.

После выполнения пакета 2-й файлне удалось из-за описания и информации о датах:

  • описание и даты не постоянно появляются с фиксированными строками Файлы на следующий день
  • описание и даты будут идти с разными строками

Можно ли найти динамически, сколько строк будет пропущено, и этот счет будет пропущен в строке заголовка skip.is это возможно в SSIS.

Скажите, пожалуйста, как выполнить эту задачу в SSIS

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Обходной путь

  1. В диспетчере соединений с плоскими файлами снимите флажок с заголовка чтения из первой строки, затем перейдите на вкладку "Дополнительно" и определите метаданные столбцов вручную (имя столбца, длина ...)
  2. В задаче «Поток данных» добавьте компонент сценария
  3. В редакторе компонентов сценария перейдите на вкладку «Вход и выход» и добавьте столбец «Вывод» типа boolean
  4. .Редактор сценариев, продолжайте проверять, равно ли значение первого столбца заголовку столбца, в то время как это условие не выполняется, всегда устанавливайте значение выходного столбца равным false, когда значение столбца равно заголовку столбца, затем устанавливайте значение выходного столбцадля всех оставшихся строк - True
  5. . Рядом с компонентом «Сценарий» добавьте условное разбиение к строке фильтра на основе созданного значения столбца (строки со значением False должны игнорироваться)
0 голосов
/ 24 сентября 2019

Если у вас есть постоянное количество строк, которые вы должны пропустить, попробуйте зайти на utube и найти это видео: Удалить первые N строк из плоского файла в пакете служб SSIS .
Если вам все еще нужночтобы найти эту сумму, а вы не знаете, что пытаетесь записать в переменную сумму для бесполезных строк, а затем вставить это значение для обработки пакета.

...