SSIS - Невозможно вставить повторяющийся ключ в объект 'dbo.FACT_TABLE'
Я знаю, что у нас не может быть повторяющихся записей в таблице фактов, но я очень новичок в службах интеграции SQL и ищу пакет, который может распознать это, если суррогатные ключи уже существуют в таблицах фактов...
На данный момент у меня есть этот пакет:
Каждый объект поиска получает бизнес-ключ каждого измерения в моем хранилище данных.
Сначала он работал очень хорошо, потому что в таблице фактов у меня нет записей, но затем я сделал тест и снова запустил те же данные (потому что в будущем я хочу запускать этот пакет каждые 10 минут, чтобы он получал одни и те же данные), и я получаю следующую ошибку (которую я очень хорошо понимаю, я хочу построить подход для автоматической обработки этого):
[Загрузить в dbo_DimCI [144]] Ошибка: код ошибки служб SSIS DTS_E_OLEDBERROR. Произошла ошибка OLE DB. Код ошибки: 0x80004005. Доступна запись OLE DB. Источник: "Собственный клиент Microsoft SQL Server 11.0". Hresult: 0x80004005 Описание: "Оператор завершен". Доступна запись OLE DB. Источник: "Собственный клиент Microsoft SQL Server 11.0". Результат: 0x80004005 Описание: "Нарушение ограничения PRIMARY KEY" PK_FACT_FACT_TABLE ". Невозможно вставить повторяющийся ключ в объект" dbo.FACT_TABLE ". Значение дублирующегося ключа равно (337, 44, 3, 19). 4682, 12)."
Какие объекты мне нужно вставить в мой пакет, чтобы справиться с этой ошибкой?
1 ответ
Я считаю, что вы намерены загружать только дельты в каждой загрузке.
Это означает, что если запись уже существует в таблице фактов, то запись не должна быть вставлена снова.
Вы можете достичь этого с помощью запроса слияния.
У меня нет примера для загрузки таблицы фактов, но я могу указать на пример поста, в котором говорится о загрузке таблицы 2 типа.
Проверьте эту ссылку: https://www.mssqltips.com/sqlservertip/2883/using-the-sql-server-merge-statement-to-process-type-2-slowly-changing-dimensions/
Вы должны иметь возможность использовать такое утверждение в своем пакете служб SSIS для обновления таблицы фактов.
С удовольствием отвечу на любые дополнительные вопросы.
Ура Нитин