Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:✅ Хранилище данных в Microsoft Fabric
Суррогатные ключи — это идентификаторы, используемые в хранилище данных для уникального различения строк, независимо от их естественных ключей. В хранилище IDENTITY данных Fabric столбцы позволяют автоматически создавать эти суррогатные ключи при вставке новых строк в таблицу. В этой статье объясняется, как эффективно создавать суррогатные ключи и управлять ими с помощью IDENTITY столбцов в хранилище данных Fabric.
Зачем использовать столбец IDENTITY?
IDENTITY столбцы устраняют необходимость назначения ключей вручную, уменьшая риск ошибок и упрощая прием данных. Управляемые системой уникальные значения идеально подходят как суррогатные ключи и первичные ключи. По сравнению с ручным подходом к созданию суррогатных ключей столбцы обеспечивают более высокую производительность, IDENTITY так как уникальные ключи создаются автоматически без дополнительной логики запросов.
Тип данных bigint, необходимый для IDENTITY столбцов, может хранить до 9 223 372 036 854 775 807 положительных целых значений, гарантируя, что на протяжении всего существования таблицы каждая строка получает уникальное значение в своем IDENTITY столбце.
План переноса данных с суррогатными ключами с других платформ баз данных см. в разделе "Миграция столбцов IDENTITY" в хранилище данных Fabric.
Синтаксис
Чтобы определить столбец IDENTITY в хранилище данных Fabric, используется свойство 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 нельзя указать пользовательское начальное значение или добавочное значение; Система управляет значениями внутри системы, чтобы обеспечить уникальность.
IDENTITY столбцы всегда создают положительные целые значения. Каждая новая строка получает новое значение, и уникальность гарантируется до тех пор, пока таблица существует. После того как IDENTITY значение используется, то же значение не используется повторно, обеспечивая целостность ключа и уникальность. Пробелы могут отображаться в значениях, создаваемых столбцом IDENTITY .
Распределение значений
Из-за распределенной архитектуры движка IDENTITY хранилища это свойство не гарантирует порядок распределения суррогатных значений. Свойство IDENTITY предназначено для масштабирования между вычислительными узлами, чтобы максимально увеличить параллелизм, не влияя на производительность нагрузки. В результате диапазоны значений для различных задач приема могут иметь разные диапазоны последовательностей.
Чтобы проиллюстрировать это поведение, рассмотрим следующий пример:
-- Create a table with an IDENTITY column
CREATE TABLE dbo.T1(
C1 BIGINT IDENTITY,
C2 VARCHAR(30) NULL
)
-- Ingestion task A
INSERT INTO dbo.T1
VALUES (NULL), (NULL), (NULL), (NULL);
-- Ingestion task B
INSERT INTO dbo.T1
VALUES (NULL), (NULL), (NULL), (NULL);
-- Reviewing the data
SELECT * FROM dbo.T1;
Пример результата:
В этом примере Ingestion task A и Ingestion task B выполняются последовательно как независимые задачи. Хотя задачи выполняются последовательно, первые и последние четыре строки имеют разные диапазоны ключей идентификации в dbo.T1.C1. Помимо этого, как отмечается в этом примере, могут возникать пробелы между диапазонами, назначенными для задачи А и задачи B.
IDENTITY В хранилище данных Fabric гарантируется, что все значения столбца IDENTITY уникальны, но могут присутствовать пробелы в диапазонах, формируемых для конкретной задачи приема.
Системные представления
Представление каталога sys.identity_columns можно использовать для перечисления всех идентичных столбцов в хранилище. В следующем примере перечислены все таблицы, содержащие IDENTITY столбец в определении, с соответствующим именем схемы и именем столбца 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;
Ограничения
- Только тип данных bigint поддерживается для
IDENTITYстолбцов в хранилище данных Fabric. Попытка использования других типов данных приводит к ошибке. -
IDENTITY_INSERTне поддерживается в хранилище данных Fabric. Пользователи не могут обновлять или вручную вставлять значения в столбцы с идентификаторами в хранилище данных Fabric. - Определение
seedиincrementне поддерживается. В результате повторное изменение столбцаIDENTITYне поддерживается. - Добавление нового столбца
IDENTITYв существующую таблицу сALTER TABLEне поддерживается. Рекомендуется использовать CREATE TABLE AS SELECT (CTAS) или SELECT... INTO в качестве альтернативы для создания копии существующей таблицы, которая добавляетIDENTITYстолбец в его определение. - Некоторые ограничения применяются к тому, как сохраняются столбцы
IDENTITYпри создании новой таблицы в результате операции выбора из другой таблицы сCREATE TABLE AS SELECT (CTAS)илиSELECT... INTO. Дополнительные сведения см. в разделе "Типы данных" предложения SELECT — INTO (Transact-SQL).
Примеры
А. Создание таблицы со столбцом IDENTITY
CREATE TABLE Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
Эта инструкция создает таблицу Employees, в которой каждая новая строка автоматически получает уникальное EmployeeID значение в качестве значения типа bigint.
В. INSERT в таблице со столбцом идентификаторов
Если первый столбец является столбцом IDENTITY , его не нужно указывать в списке столбцов.
INSERT INTO Employees (FirstName, LastName) VALUES ('Ensi','Vasala')
Кроме того, можно вывести имена столбцов, если значения предоставляются для всех столбцов целевой таблицы (за исключением столбца удостоверения):
INSERT INTO Employees VALUES ('Quarantino', 'Esposito')
С. Создание таблицы с столбцом IDENTITY с помощью CREATE TABLE AS SELECT (CTAS)
Учитывая простую таблицу в качестве примера:
CREATE TABLE Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
Для создания копии этой таблицы можно использовать CREATE TABLE AS SELECT (CTAS), сохраняя IDENTITY свойство в целевой таблице:
CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees
Столбец целевой таблицы наследует свойство IDENTITY исходной таблицы. Список ограничений, применимых к данному сценарию, см. раздел «Типы данных» в пункте SELECT — INTO.
D. Создайте новую таблицу со столбцом IDENTITY с помощью SELECT... INTO
Учитывая простую таблицу в качестве примера:
CREATE TABLE dbo.Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Retired BIT
);
Мы можем использовать SELECT... INTO для создания копии этой таблицы, сохраняя IDENTITY свойство в целевой таблице:
SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE Retired = 1;
Столбец целевой таблицы наследует свойство IDENTITY исходной таблицы. Список ограничений, применимых к данному сценарию, см. раздел «Типы данных» в пункте SELECT — INTO.