Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:✅ Хранилище данных в 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;
Пример результата:
В этом примере выполняются 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_INSERT — ON:
- Для инструкции
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.