Ссылка на внешние ключи с использованием SSIS-Lookup - PullRequest
0 голосов
/ 17 февраля 2020

Прошу помощи по следующим темам c. Я пытаюсь создать процесс ETL с двумя источниками данных Excel (S1 ~ 300 строк и S2 ~ 7000 строк). S1 содержит информацию о проекте и сведения о сотруднике, а S2 - количество часов, которое каждый сотрудник работал в каком проекте в метке времени.

Я хочу указать количество часов, которое каждый сотрудник работал в каждом проекте на временной отметке, в таблице фактов, ссылаясь на существующие первичные ключи в таблицах измерений. Если запись еще не присутствует в таблицах измерений, я хочу сначала добавить новую запись и использовать вновь созданный идентификатор. Структура таблицы назначения выглядит следующим образом (Хранилище данных, звездообразная схема): Структура таблицы назначения

В SSIS я создал три задачи «Поток данных» для заполнения таблиц измерений (проект, сотрудник и время) различными значениями (используя group by, так как S1 и S2 содержат много сначала дубликаты строк) и четвертая задача потока данных (см. изображение ниже) для вставки данных FactTable, и вот здесь я сталкиваюсь с проблемами:

Задача потока данных FactTable

Я использую три функции LookUp для извлечения ForeignKeys project_id, employee_id и time_id из таблиц измерений (используя имя проекта, номер сотрудника и метку времени). Если идентификатор найден, он передается до Merge Join 1 , если нет, создается новая запись измерения (скажем, проекта), и вместо этого передается сгенерированный project_id. То же самое относится и к сотруднику и времени соответственно.

Существует две проблемы с этим:

1) «Количество часов» (прошедшее Multicast four, см. Изображение выше) не совпадает в окончательный результат ( Нет совпадений )

2) Количество вставляемых строк постоянно увеличивается ( Бесконечное соединение , я верю из-за объединений слиянием).

То, что я пробовал:

  • Ранее я использовал один UNION вместо трех объединений слиянием, но это привело к тому, что внешние ключи были в отдельных строках, а не объединены вместе.
  • Я использовал Merge (вместо Merge Join) и объединил условия объединения и сортировки так, как я упал всеми возможными способами.

Я понимаю, что этот сценарий может сбить с толку всех остальных, но спасибо, что нашли время посмотреть на него! Любая помощь очень ценится.

1 Ответ

0 голосов
/ 18 февраля 2020

Решено

Для тех, у кого есть похожие проблемы:

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

Кроме того: Не запускайте функции LookUp параллельно, а один за другим и передавайте атрибуты. Сохраняет также ненужные слияния.

Подводя итог: четыре задачи потока данных, три для заполнения ТОЛЬКО таблиц измерений и одна для заполнения ТОЛЬКО таблиц фактов.

Загрузка нескольких таблиц с использованием служб SSIS с сохранением связей внешнего ключа Ответ, отправленный onupdatecascade в основном это.

Удачи!

...