Как заполнить звездообразную схему с помощью Azure Datafactory v2 - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть несколько исходных каналов, из которых я хочу извлечь данные в традиционную базу данных схемы звезды (база данных SQL Azure) для целей OLAP, используя фабрику данных Azure v2.

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

Затем у меня есть другой канал, который в значительной степени соответствует таблице фактов.Многие идентификаторы соответствуют бизнес-ключам таблиц измерений.

В документации по фабрике данных Azure v2 для операции копирования рекомендуется, насколько это возможно, использовать (по умолчанию) BulkСкопируйте API для копирования данных в режиме добавления .

Итак, мои вопросы:

  1. Каков наилучший подход для синхронизации моих таблиц измерений.Я не хочу удалять свои существующие данные и повторно заполнять их, потому что это разрушит мои дополнительные ключи, на которые ссылается моя таблица фактов.Я думал использовать хранимую процедуру upsert , которая проверяет, существует ли уже строка, и выполняет обновление вместо вставки.Это будет что-то очень медленное?Есть ли лучший подход для этого (может быть, с помощью сценария preCopy каким-либо образом?).

  2. При заполнении таблицы фактов, я хочу просмотреть все соответствующие идентификаторы (Surragate ключи)измерения и преобразовать все бизнес-ключи в эти идентификаторы до вставки данных.Каков рекомендуемый подход для достижения этой цели?Снова хранимая процедура, вероятно, подойдет, но я боюсь, что она медленная.Есть ли лучший подход к этому?

1 Ответ

0 голосов
/ 06 февраля 2019

Лучший подход, который я (и некоторые из моих друзей) знаю, - это MERGE данные.

Для этого - создать промежуточную таблицу (ту же или другую базу данных на том же целевом сервере), которая имеетта же структура, что и у исходной таблицы + PK.Следовательно, процесс в ADF должен быть разбит на 2 шага:

  1. Усеченная целевая (промежуточная) таблица
  2. Вставить все данные из источника в промежуточную
  3. Запустить сохраненныйПроцедура, которая содержит оператор MERGE и всю необходимую логику.

При таком подходе вы сохраните:

  • наилучшую производительность при помещении данных в промежуточную таблицу (объем)
  • самый быстрый метод для сохранения (обновления / вставки) вашей целевой таблицы
  • возможность реализации сложной бизнес-логики
  • применение SCD (медленно меняющегося измерения) при необходимости
  • уменьшить объем работы с диском

Следующие посты могут помочь вам понять процесс и построить весь оператор MERGE: [https://sqlplayer.net/category/bi/data-warehousing/]

Это довольно распространенное явлениесценарий, так что вы дали мне идею для нового сообщения в блоге.Спасибо.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...