ใช้คอลัมน์ IDENTITY ใน Fabric คลังข้อมูล

นําไปใช้กับ:✅ Warehouse ใน Microsoft Fabric

บทเรียนนี้อธิบายวิธีใช้คอลัมน์ IDENTITY ใน Fabric คลังข้อมูล เพื่อสร้างและจัดการกุญแจตัวแทน คุณจะได้เรียนรู้วิธีสร้างตารางที่มีคอลัมน์ระบุตัวตน แทรกข้อมูล แทรกค่าที่ชัดเจนด้วย IDENTITY_INSERT, และรีซีดช่วงตัวตนด้วย DBCC CHECKIDENT.

ข้อกําหนดเบื้องต้น

  • การเข้าถึงรายการคลังสินค้าในพื้นที่ทํางานด้วยสิทธิ์ Contributor หรือสูงกว่า
  • เครื่องมือค้นหา บทเรียนนี้ใช้ตัวแก้ไขคําสั่ง SQL ในพอร์ทัล Microsoft Fabric แต่คุณสามารถใช้เครื่องมือค้นหา T-SQL ใดก็ได้
  • ความเข้าใจพื้นฐานเกี่ยวกับ T-SQL

คอลัมน์ IDENTITY คืออะไร

IDENTITYคอลัมน์คือคอลัมน์ตัวเลขที่สร้างค่าที่ไม่ซ้ํากันสําหรับแถวใหม่โดยอัตโนมัติ พฤติกรรมนี้ทําให้เหมาะสําหรับการใช้งานคีย์ตัวแทน เพราะแต่ละแถวจะได้รับตัวระบุเฉพาะโดยไม่ต้องกรอกข้อมูลด้วยตนเอง

สร้างคอลัมน์ IDENTITY

เพื่อกําหนด IDENTITY คอลัมน์ ให้ระบุ IDENTITY คําสําคัญในคําจํากัดความคอลัมน์ของ CREATE TABLE ไวยากรณ์ T-SQL:

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

สร้างตารางด้วยคอลัมน์ IDENTITY

ในบทเรียนนี้ คุณจะสร้างเวอร์ชันที่ง่ายขึ้นของ Trip ตารางจาก ชุดข้อมูลเปิดของ NY Taxi และเพิ่ม 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 INTOIDENTITYคอลัมน์ ให้ระบุรายการคอลัมน์และแมปกับคอลัมน์ในข้อมูลต้นทาง

     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

คุณอาจต้องแทรกค่าที่ระบุไว้ในคอลัมน์ระบุตัวตนระหว่างการย้ายข้อมูล เมื่อเติมค่าของ sentinel หรือเมื่อกู้คืนข้อมูลจากข้อมูลสํารอง ใช้ SET IDENTITY_INSERT เพื่อเปิดใช้งานการแทรกเหล่านี้

ในส่วนนี้ คุณจะสร้างตารางมิติและใช้เพื่อเพิ่ม IDENTITY_INSERT แถวเซนทิเนลที่มีค่าคีย์ที่รู้จักกันดี

  1. สร้างตารางมิติที่มี IDENTITY คอลัมน์:

    CREATE TABLE dbo.DimCustomer
    (
        CustomerKey BIGINT IDENTITY,
        CustomerName VARCHAR(100),
        CustomerType VARCHAR(20)
    );
    
  2. แทรกแถวปกติ ค่าตัวตนจะถูกสร้างขึ้นโดยอัตโนมัติ:

    INSERT INTO dbo.DimCustomer (CustomerName, CustomerType)
    VALUES ('Contoso Ltd', 'Enterprise'),
           ('Fabrikam Inc', 'SMB'),
           ('Northwind Traders', 'Enterprise');
    
  3. เปิดใช้งาน IDENTITY_INSERT เพื่อเพิ่มค่าของ Sentinel เมื่อเป็น IDENTITY_INSERTON, ให้รายการคอลัมน์ที่รวมคอลัมน์เอกลักษณ์:

    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. หลังจากแทรกค่าที่ชัดเจนแล้ว ให้ reseed คอลัมน์ identity ด้วย เพื่อให้แน่ใจว่า 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;