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


Создание уникальных идентификаторов в таблице хранилища в Microsoft Fabric

Область применения: хранилище в Microsoft Fabric

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

Метод обходного решения

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

Шаг 1. Создание таблицы с столбцом идентификатора

Сначала необходимо создать таблицу, содержащую столбец, в который хранятся уникальные значения идентификаторов. Тип данных столбца должен иметь значение int или bigint в зависимости от объема данных, которые требуется хранить. Необходимо также определить столбец, NOT NULL чтобы убедиться, что каждая строка назначена идентификатору.

Следующий код создает пример таблицы с именем Orders_with_Identifier в схеме dbo .

--Drop a table named 'Orders_with_Identifier' in schema 'dbo', if it exists
IF OBJECT_ID('[dbo].[Orders_with_Identifier]', 'U') IS NOT NULL
    DROP TABLE [dbo].[Orders_with_Identifier];
GO

CREATE TABLE [dbo].[Orders_with_Identifier] (
    [Row_ID] BIGINT NOT NULL,
    [O_OrderKey] BIGINT NULL,
    [O_CustomerKey] BIGINT NULL,
    [O_OrderStatus] VARCHAR(1) NULL,
    [O_TotalPrice] DECIMAL(15, 2) NULL,
    [O_OrderDate] DATE NULL,
    [O_OrderPriority] VARCHAR(15) NULL,
    [O_Clerk] VARCHAR (15) NULL,
    [O_ShipPriority] INT NULL,
    [O_Comment] VARCHAR (79) NULL
);
GO

Шаг 2. Определение последнего значения идентификатора

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

Следующий код назначает последнее значение идентификатора переменной с именем @MaxID.

--Assign the last identifier value to a variable
--If the table doesn't contain any rows, assign zero to the variable
DECLARE @MaxID AS BIGINT;

IF EXISTS(SELECT * FROM [dbo].[Orders_with_Identifier])
    SET @MaxID = (SELECT MAX([Row_ID]) FROM [dbo].[Orders_with_Identifier]);
ELSE
    SET @MaxID = 0;

Шаг 3. Вставка уникальных значений идентификатора

При вставке строк в таблицу уникальные и последовательные числа вычисляются путем добавления значения переменной @MaxID в значения, возвращаемые функцией ROW_NUMBER . Эта функция представляет собой функцию окна, которая вычисляет последовательный номер строки, начиная с 1.

Следующий код, который выполняется в том же пакете, что и скрипт на шаге 2, вставляет строки в таблицу Orders_with_Identifier . Значения столбца Row_ID вычисляются путем добавления @MaxID переменной в значения, возвращаемые ROW_NUMBER функцией. Функция должна иметь ORDER BY предложение, определяющее логический порядок строк в результирующем наборе. Однако если задано SELECT NULLзначение , логический порядок не вводится, то есть значения идентификаторов произвольно назначаются. Это ORDER BY предложение приводит к более быстрому выполнению.

--Insert new rows with unique identifiers
INSERT INTO [dbo].[Orders_with_Identifier]
SELECT
    @MaxID + ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS [Row_ID],
    [src].[O_OrderKey],
    [src].[O_CustomerKey],
    [src].[O_OrderStatus],
    [src].[O_TotalPrice],
    [src].[O_OrderDate],
    [src].[O_OrderPriority],
    [src].[O_Clerk],
    [src].[O_ShipPriority],
    [src].[O_Comment]
FROM [dbo].[Orders] AS [src];