SSIS - Повторно използване на източника на Ole DB при двукратно съпоставяне на факт срещу справочна таблица

Аз съм доста нов в SSIS и BI като цяло, така че преди всичко съжалявам, ако това е въпрос за начинаещ.

Имам моите изходни данни за таблицата с факти в csv, така че искам да съпоставя идентификаторите със сурогатните ключове в справочните таблици.

Структурата на данните в csv е такава

... userId, OriginStationId, DestinyStationId,..

Това, което се опитвам да постигна, е да съпоставя данните с моята справочна таблица. Така че това, което правя, е

  1. Четене на данни за търсене с помощта на OLE DB източник
  2. Четене на моя csv файл
  3. Сортиране на двата входа по едно и също поле
  4. Извършване на ляво присъединяване по Id, за да получите SK

По този начин, ако няма съвпадение (известен още като не мога да намеря сурогатния ключ), мога да го пренасоча към отхвърлен csv и да го обработвам по-късно.

нещо като това:

Присъединете се

(съжалявам за испанския!)

Правя това за всяко измерение, така че мога да се справя с всяко едно с различни кодове за грешка.

Тъй като OriginStationId и DestinyStationId са две стойности от едно и също измерение (и двете съвпадат с една и съща справочна таблица), исках да знам дали има начин да избегна четенето на два пъти данните от таблицата (имам предвид да не използвам две ole db източници за четене два пъти на данните от една и съща таблица).

Опитах се да добавя втори изход към сортирането, но не ми е позволено. Същото важи и за добавянето на друг изход от OLE DB Source.

Виждам, че има "опция за кеширане", най-добрият начин ли е? (Въпреки че би означавало създаването на друг OLE DB source.. нали?)

Третата опция, за която се сетих, беше обединяването чрез двете полета, но тъй като има само едно поле в справочната таблица (същото поле), получавам грешка, когато се опитвам да съпоставя двете колони от моя csv срещу една и съща колона в моя Таблица за справки

Има липсващи колони с ред на сортиране 2 към 2

Какъв е най-добрият начин за това? Или си мисля нещо грешно? Ако нещо не е ясно, уведомете ме и ще актуализирам въпроса си


person Gonzalo.-    schedule 02.11.2015    source източник
comment
Можете да използвате Multicast след всеки компонент, за да създадете множество изходи.   -  person Tab Alleman    schedule 02.11.2015
comment
Не съм чувал за този компонент, но сега, когато го чета, изглежда, че прави това, което исках да постигна. Ще го проверя през нощта, но според този mssqltips.com/sqlservertip/2047/ изглежда отговаря на моята ситуация. Трябва да го публикувате като отговор   -  person Gonzalo.-    schedule 02.11.2015


Отговори (2)


Всеки път, когато пожелаете да имате няколко изхода от компонент, който позволява само един, всичко, което трябва да направите, е да следвате този компонент с компонента Multicast, чиято единствена цел е да раздели поток от данни на множество изходи.

person Tab Alleman    schedule 02.11.2015

Гонсало

Току-що използвах тази статия за това как да извлека колони за сграда на хранилище за данни: - Как да попълните таблица с факти с помощта на SSIS (част 1).

Използвайки това, създадох прост пакет, който чете CSV файл с две колони, които се използват за извличане на отделни стойности от една и съща кодова таблица. Кодовата таблица има две полета Id и Description.

Потокът от данни има две задачи „Търсене“. Първият се присъединява към атрибута Lookup1 срещу описанието, за да извлече неговия идентификатор. Вторият се присъединява към атрибута Lookup2 срещу описанието, за да извлече различен идентификатор.

Ето потока от данни: -

Поток от данни

Обърнете внимание, че „Преобразуването на данни“ беше необходимо за преобразуване на атрибутите на низ от CSV файла в „Unicode низ [DT_WSTR]“, така че да могат да бъдат присъединени към атрибута на описанието nvarchar(50) в таблицата.

Ето преобразуването на данни: -

въведете описание на изображението тук

Ето първото търсене (второто се присъединява към „Копие на Lookup2“ към описанието): -

въведете описание на изображението тук

Ето изхода на Data Viewer с до два извлечени идентификатора CodeTableFirstId и CodeTableSecondId:-

въведете описание на изображението тук

Надяваме се, че разбирам проблема ви и това е полезно за вас.

Наздраве Джон

person John    schedule 03.11.2015