SSIS — повторное использование источника Ole DB при двойном сопоставлении фактов с таблицей поиска

Я новичок в SSIS и BI в целом, поэтому, прежде всего, извините, если это вопрос новичка.

У меня есть исходные данные для таблицы фактов в формате csv, поэтому я хочу сопоставить идентификаторы с суррогатными ключами в таблицах поиска.

Структура данных в csv такая

... userId, OriginStationId, DestinyStationId,..

Я пытаюсь сопоставить данные с моей таблицей поиска. Итак, что я делаю, это

  1. Чтение данных поиска с использованием источника OLE DB
  2. Чтение моего CSV-файла
  3. Сортировка обоих входов по одному и тому же полю
  4. Выполнение левого соединения по идентификатору, чтобы получить 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 с двумя столбцами, которые используются для получения отдельных значений из одной и той же таблицы CodeTable. CodeTable имеет два поля Id и Description.

Поток данных имеет две задачи «Поиск». Первый объединяет атрибут Lookup1 с описанием, чтобы получить его идентификатор. Второй объединяет атрибут Lookup2 с описанием для получения другого идентификатора.

Вот поток данных: -

Поток данных

Обратите внимание, что «Преобразование данных» требовалось для преобразования строковых атрибутов из файла CSV в «строку Unicode [DT_WSTR]», чтобы их можно было соединить с атрибутом описания nvarchar(50) в таблице.

Вот преобразование данных: -

введите здесь описание изображения

Вот первый Lookup (второй присоединяется к «Копия Lookup2» к описанию): -

введите здесь описание изображения

Вот вывод средства просмотра данных с двумя производными идентификаторами CodeTableFirstId и CodeTableSecondId:

введите здесь описание изображения

Надеюсь, я понимаю вашу проблему, и это полезно для вас.

Ура Джон

person John    schedule 03.11.2015