Как обрабатывать данные в ssis - PullRequest
0 голосов
/ 05 ноября 2018

Нужно конвертировать данные из нижеуказанного формата

С

1,Delivery Confirmation Email
5,11/09/2018 07:10
7,OOLU1939921
9,S00224239

К

Event: Delivery Confirmation Email;
Date: 11/09/2018 07:10;
Container: OOLU1939921;
Job: S00224239

или в табличном формате как

Event                          Date              Container        Job         
Delivery Confirmation Email    11/09/2018 07:10  OOLU1939921      S00224239

Возможно ли это через pivot в ssis?

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Вот аналогичный вопрос с ответами, предлагающими сценарий или подход ELT

Преобразование SSIS (почти как точка)

Вы можете попробовать преобразовать скрипт, если хотите. Лично я предпочитаю подход ELT

  1. Создание промежуточной таблицы с тремя столбцами:

.

CREATE TABLE DeliveryConfirmationStaging
(
ID INT NOT NULL,
StringValue VARCHAR(50) NOT NULL,
DTInserted DATETIME2(0) DEFAULT(GETDATE())
)
  1. Загрузите текстовый файл в эту таблицу с источником CSV и назначением ADO SQL Server в потоке данных.

  2. Добавить сценарий SQL перед потоком данных с TRUNCATE TABLE DeliveryConfirmationStaging; в нем

  3. Наконец, добавьте этот сценарий SQL после потока данных, который преобразует его с помощью SQL (заимствование @GordonLinoff answer)

.

insert into yourfinaltable (event, date,container,job)
select max(case when col1 = 1 then col2 end) as event,
       TRY_CAST(max(case when col1 = 5 then col2 end) as datetime) as [date],
       max(case when col1 = 7 then col2 end) as container,
       max(case when col1 = 9 then col2 end) as job
from DeliveryConfirmationStaging;

Вы не упоминаете, что это за формат даты. Это 11 сентября или 9 ноября?

0 голосов
/ 07 ноября 2018

Исправлена ​​проблема с преобразованием Pivot в ssis.

0 голосов
/ 05 ноября 2018

Я думаю, что вы можете использовать условное агрегирование:

select max(case when col1 = 1 then col2 end) as event,
       max(case when col1 = 5 then col2 end) as date,
       max(case when col1 = 7 then col2 end) as container,
       max(case when col1 = 9 then col2 end) as job
from t;
...