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


Столбцы идентификатора

Применимо к:✅ Хранилище данных в 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;

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

Таблица с двумя столбцами с меткой C1 и C2 с восемью строками данных. Столбец C1 содержит большие числовые значения. Столбец C2 содержит текст.

В этом примере 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.