Microsoft Fabric의 웨어하우스 테이블에서 고유 식별자 생성
적용 대상:✅ Microsoft Fabric 내 웨어하우스
Data Warehouse에서는 테이블의 각 행에 고유 식별자를 할당하는 것이 일반적인 요구 사항입니다. SQL Server 기반 환경에서는 일반적으로 테이블에 ID 열을 만들어서 수행되지만 현재 이 기능은 Microsoft Fabric의 웨어하우스에서 지원되지 않습니다. 대신 해결 방법을 사용해야 합니다. 우리는 두 가지 대안을 제시한다.
이 문서에서는 웨어하우스 테이블에서 고유 식별자를 생성하는 해결 방법을 설명합니다.
방법 1
이 메서드는 ID 값을 만들어야 하는 경우에 가장 적용할 수 있지만 값의 순서는 중요하지 않습니다(비순차적 값은 허용됨).
고유 값은 테이블에 데이터를 삽입하는 코드에서 생성됩니다.
이 메서드를 사용하여 고유한 데이터를 만들려면 고유 식별자 값을 저장하는 열을 포함하는 테이블을 만듭니다. 열 데이터 형식은 bigint로 설정해야 합니다. 또한 모든 행에 식별자가 할당되도록 열을
NOT NULL
로 정의해야 합니다.다음 T-SQL 코드 샘플에서는 열이 고유 키 역할을 하는 스키마에
dbo
명명Orders_with_Identifier
된Row_ID
예제 테이블을 만듭니다.--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 );
T-SQL 스크립트 또는 애플리케이션 코드를 통해 테이블에 행을 삽입하거나 그렇지 않으면 함수를
NEWID()
사용하여Row_ID
고유한 데이터를 생성합니다. 이 함수는 uniqueidentifier 형식의 고유 값을 생성하여 bigint로 캐스팅하고 저장할 수 있습니다.다음 코드는 테이블에 행을 삽입합니다
dbo.Orders_with_Identifier
. 열의Row_ID
값은 함수에서 반환된 값을 변환하여 계산됩니다newid()
. 함수에는 절이ORDER BY
필요하지 않으며 각 레코드에 대한 새 값이 생성됩니다.--Insert new rows with unique identifiers INSERT INTO [dbo].[Orders_with_Identifier] SELECT CONVERT(BIGINT, CONVERT(VARBINARY, CONCAT(NEWID(), GETDATE()))) 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];
방법 2
이 메서드는 순차 ID 값을 만들어야 하는 경우에 가장 적합하지만 대체 메서드보다 느려질 수 있으므로 더 큰 데이터 세트에 주의해서 사용해야 합니다. 중복 값으로 이어질 수 있으므로 동시에 데이터를 삽입하는 여러 프로세스에 대해서도 고려해야 합니다.
이 메서드를 사용하여 고유한 데이터를 만들려면 고유 식별자 값을 저장하는 열을 포함하는 테이블을 만듭니다. 열 데이터 형식은 저장하려는 데이터의 양에 따라 int 또는 bigint로 설정해야 합니다. 또한 모든 행에 식별자가 할당되도록 열을
NOT NULL
로 정의해야 합니다.다음 T-SQL 코드 샘플에서는 열이 고유 키 역할을 하는 스키마에
dbo
명명Orders_with_Identifier
된Row_ID
예제 테이블을 만듭니다.--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
테이블에 행을 삽입하기 전에 테이블에 저장된 마지막 식별자 값을 결정해야 합니다. 최대 식별자 값을 검색하여 이를 수행할 수 있습니다. 다음 단계에서 테이블 행을 삽입할 때 참조할 수 있도록 이 값을 변수에 할당해야 합니다.
다음 코드는 마지막 식별자 값을
@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;
테이블에 행을 삽입하면
@MaxID
변수의 값을 ROW_NUMBER 함수에서 반환된 값 에 더하여 고유하고 순차적인 숫자가 계산됩니다. 이 함수는 .로 시작하는 순차 행 번호를 계산하는 창 함수입니다1
.2단계의 스크립트와 동일한 일괄 처리로 실행되는 다음 T-SQL 코드는 테이블에 행을 삽입합니다
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];