2014-02-25 1 views
0

Считайте этот сценарий:Объединить данные с помощью службы интеграции

У меня есть таблица в моей базе данных. Я хочу переместить эти данные в мою базу данных OLAP с помощью SSIS. Я могу переместить всю запись из своей таблицы в базу данных OLAP. Проблема в том, что я не знаю, как я могу применить изменения в среде OLAP. Например, если всего 100 записей моей таблицы были изменены, как я могу применить эти изменения. НЕ копируйте все записи с нуля.

Как я могу объединить эти две таблицы?

благодаря

+0

Как вы оцениваете данные как измененные: на основе столбца datetime в соответствующей таблице? – Deepshikha

+0

Является ли наша база данных OLAP реляционной базой данных или кубом SSAS? –

+0

Это рациональная база данных, в которой я создал свой куб на основе этого – Arian

ответ

5

Есть два основных подхода к этому:

  • Lookup Transformation -> OLE DB Command/OLE DB Destination
  • Загрузить все данные в таблицу промежуточной и выполнить MERGE с помощью SQL.

Мое предпочтение относится к последнему, потому что обновление основано на SET, но я использую первое, где знаю, что оно будет преимущественно вставляться.

С первым вы будете в конечном итоге с чем-то задача потока данных, как:

enter image description here

Это является OLE DB Источник из базы данных OLTP, который затем смотрит вверх против вашей базы данных OLAP, чтобы получить суррогатный ключ. Там, где нет совпадения, простая вставка новой записи в OLE DB Destination, когда есть совпадение, она выполняет условное разделение, если какие-либо поля были изменены, она будет использовать команду OLE DB для обновления таблицы OLAP.

Очевидно, что это намного сложнее, чем это, но это охватывает простейший пример.

Вы можете также использовать медленно изменяющуюся Transformation Dimension, чтобы открыть мастера для создания потока данных для вас, который снова становится немного более сложной:

enter image description here

Как было упомянуто, хотя, мое предпочтение для промежуточной таблицы и обновления на основе набора, потому что команда OLE DB выполняется в строке за строкой, поэтому, если вы обновляете миллионы записей, это займет много времени. Вы можете просто создать промежуточную таблицу на базе данных OLAP и переместить данные с использованием простого OLE DB Source и Destination, а затем использовать MERGE для обновления OLAP таблицы:

MERGE OLAP o 
USING Staging s 
    ON o.BusinessKey = s.BusinessKey 
    AND o.Type2SCD = s.Type2SCD  
    AND o.Active = 1 
WHEN MATCHED AND o.Type1SCD != s.Type1SCD THEN 
    UPDATE 
    SET Type1SCD = s.Type1SCD 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (BusinessKey, Type1SCD, Type2SCD, Active, EffectiveDate) 
    VALUES (s.BusinessKey, s.Type1SCD, s.Type2SCD, 1, GETDATE()) 
WHEN NOT MATCHED BY SOURCE AND o.Active = 1 THEN 
    UPDATE 
    SET Active = 0; 

выше предполагает, что вы один активную запись на бизнес-ключ и медленно изменяющиеся параметры типа 1 и типа 2, он будет вставлять новую запись, где нет совпадений в BusinessKey и Type2SCD, кроме того, она будет устанавливать любые несогласные записи в исходной таблице в неактивные. Когда есть совпадение, но SCD ​​типа 1 отличается, это будет обновляться.

Стоит отметить, что MERGE has it's downsides, и вы можете захотеть написать набор, основанный на upserts, как отдельные инструкции INSERT и UPDATE.Одна из основных проблем, с которыми я столкнулся, заключается в том, что во всех моих таблицах измерений у меня есть уникальный отфильтрованный индекс на моем BusinessKey поле WHERE Active = 1, чтобы убедиться, что есть только одна активная запись, которую MERGE, я написал, должен работать нормально, но не так подробная информация находится в this connect item. Хотя не конец света должен был добавить OPTION (QUERYTRACEON 8790); до конца всех заявлений MERGE в моем ETL, это было не идеально.

1

Похоже, вы хотите использовать добавочные нагрузки.

Первые пять учебных пособий on this page должны указывать на вас в правильном направлении - я нашел их действительно полезными в прошлом.

Смежные вопросы