Fabric Data Warehouse에서 IDENTITY 열을 사용하세요

적용 대상: Microsoft Fabric의✅ Warehouse

이 튜토리얼은 Fabric Data Warehouse에서 IDENTITY 열을 사용하여 대리 키를 생성하고 관리하는 방법을 설명합니다. 식별 열이 있는 테이블 생성, 데이터 삽입, 명시적 값 IDENTITY_INSERT삽입 , 그리고 식별 범위를 DBCC CHECKIDENT다시 시드 하는 방법을 배웁니다.

필수 조건

  • 기여자 이상의 권한으로 작업 공간에 있는 창고 항목에 접근할 수 있습니다.
  • 쿼리 도구. 이 튜토리얼은 Microsoft Fabric 포털의 SQL 쿼리 편집기를 사용하지만, 어떤 T-SQL 쿼리 도구든 사용할 수 있습니다.
  • T-SQL에 대한 기본적인 이해.

IDENTITY 열이 무엇인가요?

IDENTITY 열은 새 행에 대한 고유 값을 자동으로 생성하는 숫자 열입니다. 이러한 동작 덕분에 각 행이 수동 입력 없이 고유한 식별자를 부여받기 때문에 대리 키를 구현하기에 이상적입니다.

IDENTITY 열 생성하기

열을 IDENTITY 정의하려면, T-SQL 문법의 CREATE TABLE 열 정의에서 키워드를 IDENTITY 지정하세요:

CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
    [column_name] BIGINT IDENTITY,
    [ ,... n ],
    -- Other columns here
);

IDENTITY 열이 있는 테이블 만들기

이 튜토리얼에서는 NY Taxi 오픈 데이터셋에서 테이블의 Trip 더 간단한 버전을 만들고 열을 TripIDIDENTITY 추가합니다. 각 새로운 행은 테이블에서 고유한 값을 부여받습니다 TripID .

  1. IDENTITY 열이 있는 테이블을 정의하세요.

     CREATE TABLE dbo.Trip
     (
         TripID               bigint IDENTITY,
         tpepPickupDateTime   datetime2(6),
         tpepDropoffDateTime  datetime2(6),
         passengerCount       int,
         tripDistance         float,
         fareAmount           float,
         totalAmount          float
     );
    
  2. 테이블에 데이터를 수집하려면 COPY INTO을 사용하세요. COPY INTO 컬럼과 함께 IDENTITY를 사용할 때는 컬럼 목록을 제공하고 이를 소스 데이터의 컬럼에 매핑하세요.

     COPY INTO dbo.Trip (tpepPickupDateTime, tpepDropoffDateTime, passengerCount, tripDistance, fareAmount, totalAmount)
     FROM 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=2013/puMonth=1/*.parquet'
     WITH( FILE_TYPE = 'PARQUET');
    
  3. 데이터와 열에 IDENTITY 할당된 값을 미리 확인해 보세요:

    SELECT TOP 10 *
    FROM Trip;
    

    출력에는 각 행에 대해 자동으로 생성된 TripID 값이 포함됩니다.

    택시 여정 데이터 세트의 처음 10개 행이 있는 테이블을 보여 주는 쿼리 결과의 스크린샷.

    중요합니다

    당신의 가치관은 이 글의 가치와 다를 수 있습니다. IDENTITY 열은 고유한 값을 생성하지만, 값이 반드시 순차적이거나 순서가 정해져 있지 않아 공백이 발생할 수 있습니다.

  4. INSERT INTO 사용하여 새 행을 수집:

     INSERT INTO dbo.Trip
     VALUES ('2026-01-01T00:00:00', '2013-01-01T00:12:00', 1, 2.4, 10.5, 13.0);
    
  5. INSERT INTO를 사용하면 열 목록은 선택 사항입니다. 입력 데이터를 제공하는 경우 IDENTITY 열을 제외한 모든 열의 이름을 지정하세요:

     INSERT INTO dbo.Trip (tpepPickupDateTime, tpepDropoffDateTime, passengerCount, tripDistance, fareAmount, totalAmount)
     VALUES ('2026-01-01T08:15:00', '2013-01-01T08:42:00', 2, 6.8, 24.5, 30.0);
    
  6. 삽입된 행을 검토하세요:

     SELECT *
     FROM dbo.Trip
     WHERE CAST(tpepPickupDateTime AS date) = '2026-01-01';    
    

    새 행에 할당된 값을 관찰합니다.

    택시 여행 데이터를 보여주는 두 행 여섯 열의 표 스크린샷입니다.

명시적인 값을 IDENTITY_INSERT로 삽입하세요

데이터 마이그레이션 시, 센티넬 값 채우기, 백업 데이터 복원 시 특정 값을 아이덴티티 열에 삽입해야 할 수도 있습니다. SET IDENTITY_INSERT을 사용해 이 인서트를 활성화하세요.

이 섹션에서는 차원 테이블 IDENTITY_INSERT 을 만들고 잘 알려진 키 값이 있는 센티넬 행을 추가합니다.

  1. IDENTITY 열이 있는 차원 테이블을 만드세요:

    CREATE TABLE dbo.DimCustomer
    (
        CustomerKey BIGINT IDENTITY,
        CustomerName VARCHAR(100),
        CustomerType VARCHAR(20)
    );
    
  2. 규칙적인 행을 삽입하세요. ID 값은 자동으로 생성됩니다:

    INSERT INTO dbo.DimCustomer (CustomerName, CustomerType)
    VALUES ('Contoso Ltd', 'Enterprise'),
           ('Fabrikam Inc', 'SMB'),
           ('Northwind Traders', 'Enterprise');
    
  3. 센티넬 값을 추가하려면 IDENTITY_INSERT을(를) 활성화하세요. IDENTITY_INSERT이 ON일 때 ID 열을 포함하는 열 목록을 제공합니다:

    SET IDENTITY_INSERT dbo.DimCustomer ON;
    
    INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName, CustomerType)
    VALUES (-1, 'Unknown', 'Sentinel'),
           (-2, 'Not Applicable', 'Sentinel');
    
    SET IDENTITY_INSERT dbo.DimCustomer OFF;
    
  4. 명시적 값을 삽입한 후, 식별 열 DBCC CHECKIDENT 을 다시 시드하여 앞으로 자동 생성된 값들이 삽입된 값과 충돌하지 않도록 합니다:

    DBCC CHECKIDENT('dbo.DimCustomer', RESEED);
    
  5. 센티넬 행이 자동으로 생성된 행과 함께 나타나는지 확인하세요:

    SELECT *
    FROM dbo.DimCustomer
    ORDER BY CustomerKey;
    
  6. 행을 삽입하고 자동으로 생성된 값이 충돌하지 않는지 확인하세요:

    INSERT INTO dbo.DimCustomer (CustomerName, CustomerType)
    VALUES ('Adventure Works', 'Enterprise');
    
    SELECT *
    FROM dbo.DimCustomer
    ORDER BY CustomerKey;
    

튜토리얼 리소스 정리하기

선택적으로, 이 튜토리얼에서 생성된 표를 삭제할 수도 있습니다:

DROP TABLE IF EXISTS dbo.Trip;
DROP TABLE IF EXISTS dbo.DimCustomer;
DROP TABLE IF EXISTS dbo.DimProduct;