Столбцы IDENTITY в Fabric Data Warehouse

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

В Fabric Data Warehouse столбцы IDENTITY автоматически генерируют новые числовые значения при вставке новых строк в таблицу.

Суррогатные ключи — это идентификаторы, используемые в хранилище данных для уникального различения строк, независимо от их естественных ключей. В этой статье объясняется, как создавать суррогатные ключи и управлять ими с использованием IDENTITY, включая вставку явных значений и сброс начального значения.

Зачем использовать столбец IDENTITY?

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

Тип данных bigint , необходимый для IDENTITY столбцов, может хранить до 9 223 372 036 854 775 807 положительных целочисленных значений. Этот диапазон гарантирует, что каждая строка получает уникальное значение в столбце IDENTITY на протяжении всего срока службы таблицы.

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

Синтаксис

Чтобы определить IDENTITY столбец в Fabric Data Warehouse, используйте свойство IDENTITY из определения столбца:

CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
    [ column_name ] BIGINT IDENTITY ,
    [ ,...n ]
    -- Other columns here
);

Столбец идентичности не обязательно должен быть первым столбцем в определении таблицы.

Как работают столбцы IDENTITY

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

Распределение значений

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

Это демонстрируется в приведенном ниже примере.

-- Create a table with an IDENTITY column
CREATE TABLE dbo.Table1(
    Column1 BIGINT IDENTITY,
    Column2 VARCHAR(30) NULL
)

-- Ingestion task A
INSERT INTO dbo.Table1
VALUES (NULL), (NULL), (NULL), (NULL);

-- Ingestion task B
INSERT INTO dbo.Table1
VALUES (NULL), (NULL), (NULL), (NULL);

-- Review the data
SELECT * FROM dbo.Table1;

Пример результата:

Скриншот результатов набора запроса к таблице с двумя столбцами, обозначающими Column1 и Column2, показывающих восемь строк данных. Столбец 1 содержит большие числовые значения, столбец 2 содержит текст.

В этом примере выполняются Ingestion task AIngestion task B последовательно как независимые задачи. Хотя задачи выполняются последовательно, первая и последние четыре строки имеют разные диапазоны тождественных ключей в dbo.Table1.Column1. Также могут возникать пробелы между диапазонами, назначенными задачам A и задаче B.

IDENTITY в Fabric Data Warehouse гарантирует, что все значения в столбце IDENTITY уникальны, если не используется IDENTITY_INSERT, однако в диапазонах, создаваемых для задачи приема данных, могут возникать разрывы.

Объекты метаданных системы

Следующие объекты системных метаданных доступны и полезны при проектировании и работе с идентичностными значениями в Fabric Data Warehouse.

Перечислите столбцы идентификаторов с помощью системного представления sys.identity_columns

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

SELECT
    s.name AS SchemaName,
    t.name AS TableName,
    c.name AS IdentityColumnName
FROM
    sys.identity_columns AS ic
INNER JOIN
    sys.columns AS c ON ic.[object_id] = c.[object_id]
    AND ic.column_id = c.column_id
INNER JOIN
    sys.tables AS t ON ic.[object_id] = t.[object_id]
INNER JOIN
    sys.schemas AS s ON t.[schema_id] = s.[schema_id]
ORDER BY
    s.name, t.name;

В Fabric Data Warehouse столбцы seed_value и increment_valuesys.identity_columns return NULL и не обновляются после создания столбца идентичности. Столбец last_value по умолчанию возвращает NULL, но после первой операции вставки значения идентификатора в таблицу навсегда переключается на -1.

Вставка значений с использованием IDENTITY_INSERT

По умолчанию нельзя вставлять значения в колонку IDENTITY . Однако, возможно, потребуется вставлять определённые значения во время миграции данных, восстановления после катастрофы или при заполнении значений Sentinel, например -1 , для «Неизвестно» в таблицах размеров.

Используйте SET IDENTITY_INSERT , чтобы временно разрешить явные вставки в столбец идентичности:

SET IDENTITY_INSERT dbo.DimCustomer ON;

INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName, Email)
VALUES (-1, 'John Doe', 'john@contoso.com');

SET IDENTITY_INSERT dbo.DimCustomer OFF;

Когда IDENTITY_INSERTON:

  • Для инструкции INSERT требуется список столбцов.
  • В одной сессии только для одной таблицы одновременно можно установить IDENTITY_INSERT в значение ON.

Это важно

После отключения IDENTITY_INSERTперезаседайте значения идентичности с помощью DBCC CHECKIDENT.

Сброс начального значения столбца IDENTITY с помощью DBCC CHECKIDENT

После вставки явно заданных значений с помощью IDENTITY_INSERT используйте DBCC CHECKIDENT, чтобы заново установить значение столбца IDENTITY. Операция RESEED сканирует все используемые и зарезервированные диапазоны идентичности между распределёнными вычислительными узлами для определения правильных следующих значений, обеспечивая уникальность и предотвращая коллизии ключей.

DBCC CHECKIDENT('dbo.DimProduct', RESEED);

В Fabric Data Warehouse поддерживает DBCC CHECKIDENT только опциюRESEED. Хранилище данных автоматически определяет корректные диапазоны последующих значений, и вы не можете указать пользовательское значение повторной инициализации. Дополнительные сведения см. в статье DBCC CHECKIDENT.

Ограничения

Дополнительные сведения см. в столбцах IDENTITY, IDENTITY (Transact-SQL) и Создание таблиц на складе в Microsoft Fabric.

  • Только тип данных bigint поддерживается для IDENTITY столбцов в хранилище данных Fabric. Другие типы данных приводят к ошибке.
  • Определение начального значения и шага приращения не поддерживается. Система управляет ценностями внутри компании.
  • Добавление IDENTITY столбца в существующую таблицу с ALTER TABLE не поддерживается. Рассмотрите возможность использования CREATE TABLE AS SELECT (CTAS) или SELECT... INTO для создания копии существующей таблицы и добавления IDENTITY столбца.
  • Существуют ограничения, связанные с тем, как IDENTITY сохраняются столбцы при создании таблицы на основе выборки из другой таблицы с помощью CTAS или SELECT...INTO. Для получения дополнительной информации см. раздел «Типы данных» в клаузе SELECT - INTO (Transact-SQL).
  • DBCC CHECKIDENT Поддерживает только вариант RESEED . Указание пользовательского значения для повторной инициализации или использование NORESEED не поддерживается.
  • IDENTITY Столбцы дают значения, которые гарантированно уникальны, но значения не обязательно последовательны или упорядоченные и могут возникать пробелы.

Примеры

А. Создание таблицы со столбцом IDENTITY

CREATE TABLE Employees (
    EmployeeID BIGINT IDENTITY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50)
);

Эта инструкция создаёт таблицу Employees, в которой каждая новая строка автоматически получает уникальное значение EmployeeID типа bigint.

В. Вставьте строки в таблицу с столбцем идентичности

Когда вы указываете значения для каждого неидентичного столбца в их определённом порядке, вам не нужно указывать список столбцов:

INSERT INTO Employees VALUES ('Quarantino', 'Esposito');

Вы также можете предоставить список столбцов, в котором отсутствует столбец идентичности:

INSERT INTO Employees (FirstName, LastName)
VALUES ('Ensi', 'Vasala');

С. Вставьте явно заданные значения с помощью IDENTITY_INSERT

SET IDENTITY_INSERT dbo.Employees ON;

INSERT INTO dbo.Employees (EmployeeID, FirstName, LastName)
VALUES (100, 'Sentinel', 'Row');

SET IDENTITY_INSERT dbo.Employees OFF;

D. Вставьте явные значения с помощью COPY INTO

Оператор COPY INTO поддерживает параметр IDENTITY_INSERT, позволяющий указывать явные значения непосредственно в команде. COPY INTO Параметры имеют приоритет над любыми настройками на уровне сеанса для IDENTITY_INSERT.

COPY INTO dbo.Employees (EmployeeID 1, FirstName 2, LastName 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
    FILE_TYPE = 'CSV',
    IDENTITY_INSERT = 'ON'
);

E. Переседать таблицу после явных вставок

DBCC CHECKIDENT('dbo.Employees', RESEED);

F. Создайте таблицу с помощью CREATE TABLE AS SELECT

Используйте CTAS, чтобы создать копию таблицы и сохранить свойство IDENTITY в целевой таблице:

CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees;

Столбец в целевой таблице наследует свойство IDENTITY исходной таблицы. Для ограничений см. раздел «Типы данных» в клаузе SELECT - INTO.

G. Создайте таблицу с помощью SELECT... INTO

Используйте SELECT...INTO для создания копии таблицы и сохранения свойства IDENTITY в целевой таблице:

SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE LastName = 'Esposito';

Столбец в целевой таблице наследует свойство IDENTITY исходной таблицы. Для ограничений см. раздел «Типы данных» в клаузе SELECT - INTO.

Следующий шаг