Извлечение данных из плоского файла через SSIS с именем столбца и данными в тех же строках - PullRequest
1 голос
/ 25 июня 2019

Я должен извлечь данные из нескольких папок. Каждая папка может иметь несколько текстовых файлов.

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

Имя файла: Product-ABC.txt (префикс " Product " будет общим для всех файлов в папках)

  • Образец данных:

xyzrryyywe # ** Root , Столбец 2: 00-1234, Столбец 3: Нет, Столбец 4: Да, Столбец 5: 55, Столбец 6: 07/17/19

aaauuuuye # Перевод , столбец 5: 88, столбец 6: 07/18/19

xyzrryyywe # Secure , столбец 2: 00-12gfr-04, столбец 5: 8, столбец 6: 07/19/19

ttyyyyyywe # Root , столбец 2: 00-134, столбец 3: нет, столбец 4: да, столбец 5: 34, столбец 6: 17.04.19 **

Каждое имя столбца строки и данные включены.

  1. Теперь мне нужно сначала разделить имя столбца и данные
  2. тогда придется обрабатывать несогласованные столбцы данных для каждой строки. (Каждая строка может быть Root, Transfer или Secure, как в примере выше). Может быть несколько корневых строк, одинаковых для передачи и корневых строк. Они могут быть несколько раз

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

Пожалуйста, посоветуйте мне, как мне поступить.

Спасибо Ritesh

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Я бы использовал комбинацию преобразования скрипта (мой ответ охватывает это) и преобразования SQL (Вы можете развернуть в SQL множество ответов по этому вопросу):

Сначала прочитайте всю строку в один столбец:

xyzrryyywe # Root, Колонка 2: 00-1234, Колонка 3: Нет, Колонка 4: Да, Колонка 5: 55, Колонка 6: 07/17/19

Вы можете видеть согласованное форматирование (то есть группы значений, разделенные столбцами)

Разделить это на массив:

string[] FirstSplit = Row.Col1.Split(',');

Примечание: в этом случае у вас будет массив из 6 предметов. Первый пункт, я думаю, продукт и Действие или что-то еще, но это будет повторяться для каждого столбца. Так что давайте сохраним это.

string[] FirstCol = FirstSplit[0].Split('#');
string Product = FirstCol[0]; //Should be xyzrryyywe
string Action = FirstCol[1]; //Should be Root

Теперь давайте разберемся с оставшимися столбцами, имеющими шаблон ColumnName: ColumnValue.

for (int i = 1; i <= FirstSplit.Length-1; i++)
        {
            string[] cols = FirstSplit[i].Split(':');
            //Now write it out back to SSIS for loading
            Output1Buffer.AddRow();
            Output1Buffer.Product = Product;
            Output1Buffer.Action = Action;
            Output1Buffer.ColumnName = cols[0];
            Output1Buffer.ColumnValue = cols[1];
        }

Pics:

Настройка вывода:

Output Setup

Результаты:

Sample data output for First Two Rows

0 голосов
/ 26 июня 2019

Я предлагаю использовать SQL-сервер в формате JSON.импортировать все ваши данные в одну таблицу с 3 столбцами:

  1. какое имя папки.
  2. какое имя файла.
  3. и данные строки в формате JSON.

поэтому у вас очень простая задача написать SSIS для чтения файлов.

после этого вы должны начать писать t-SQL для проверки ваших данных и применения ваших условий.

...