Поделиться через


Переход на столбцы IDENTITY в хранилище данных Fabric

Применимо к:✅ Хранилище данных в Microsoft Fabric

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

Перенос баз данных в хранилище данных Fabric представляет уникальные проблемы для организаций, использующих существующие суррогатные столбцы, такие как IDENTITY или SEQUENCE функции в ядре СУБД SQL:

  • В отличие от традиционных сред SQL Server, хранилище данных Fabric использует распределенную модель для создания значений идентификаторов, что гарантирует уникальность, но не гарантирует последовательный порядок.
    • IDENTITY В хранилище данных Fabric не поддерживается IDENTITY_INSERT. Невозможно напрямую вставить существующие значения.
    • IDENTITY в хранилище данных Fabric не поддерживает конфигурацию SEED или INCREMENT. IDENTITY значения являются уникальными и автоматически управляемыми.
  • Только тип данных bigint поддерживается для IDENTITY столбцов в хранилище данных Fabric.
  • Хранилище данных Fabric не применяет ограничения ключей.

Пошаговый процесс миграции

Чтобы проиллюстрировать подход, описанный в этой статье, рассмотрим две таблицы: Customers таблицу и таблицу Orders . Таблица Orders ссылается на таблицу Customers с помощью столбца CustomerID .

Диаграмма Entity-Relationship с двумя таблицами:

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

  1. Загрузите данные из исходных таблиц в промежуточные таблицы в хранилище данных Fabric, не использующие IDENTITY столбцы.
  2. Загрузите данные из промежуточных таблиц в конечные таблицы, использующие IDENTITY столбец, но скопируйте исходные данные столбца идентификатора из промежуточной таблицы в новый временный столбец в окончательных таблицах.
  3. UPDATE ссылки в связанных таблицах.

Пример. Перенос данных из таблиц, использующих столбцы IDENTITY, в хранилище данных Fabric

В следующих шагах описывается, как эту стратегию можно выполнить с помощью IDENTITY столбцов в хранилище данных Fabric.

Шаг 1. Загрузка исходных данных в промежуточные таблицы

Начните с создания промежуточных таблиц в хранилище данных Fabric, которые отражают схему ваших исходных таблиц, но при этом создайте промежуточные таблицы со столбцами IDENTITY.

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

Шаг 2. Вставка данных в целевые таблицы и сопоставление устаревших значений IDENTITY

Затем вставьте данные из промежуточных таблиц в целевые таблицы в хранилище.

Целевая таблица должна использовать IDENTITY в ключевом столбце.

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

Схема, показывающая миграцию данных из

Например, при миграции таблицы Customers можно использовать, например, такой оператор:

-- Pseudo code: replace ... with your own column list
INSERT INTO dbo.Customers (Name, Email, ... , LegacyCustomerID)
SELECT s.Name, s.Email, ..., s.CustomerID
FROM dbo.Staging_Customers AS s;

Этот подход сохраняет исходное значение удостоверения в столбце LegacyCustomerID для последующего использования.

Повторите этот шаг для всех таблиц в хранилище, использующих IDENTITY столбцы.

Шаг 3. Обновление связей внешнего ключа с использованием значений устаревших идентификаторов

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

Схема потока данных, показывающая миграцию с

Например, при переносе Orders таблицы, ссылающейся на клиентов:

INSERT INTO dbo.Orders (OrderDate, ... , CustomerID)
SELECT o.OrderDate, ..., c.CustomerID
FROM dbo.Staging_Orders AS o
INNER JOIN dbo.Customers AS c
ON o.CustomerID = c.LegacyCustomerID; 

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

Шаг 4 (необязательно): очистка временных столбцов

После подтверждения правильности сопоставлений всех связей и целостности данных при необходимости можно удалить устаревшие столбцы идентификаторов из целевых таблиц:

ALTER TABLE Orders 
DROP COLUMN LegacyCustomerID;

При необходимости сохраняйте столбцы, такие как LegacyCustomerID в конечной таблице для будущих аудитов, родословной или устранения неполадок.