แชร์ผ่าน


คอลัมน์ IDENTITY

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

คีย์ตัวแทนเป็นตัวระบุที่ใช้ในคลังข้อมูลเพื่อแยกแยะแถวโดยไม่ขึ้นกับคีย์ธรรมชาติ ใน Fabric Data Warehouse IDENTITY คอลัมน์จะเปิดใช้งานการสร้างคีย์ตัวแทนเหล่านี้โดยอัตโนมัติเมื่อแทรกแถวใหม่ลงในตาราง บทความนี้อธิบายวิธีการใช้ IDENTITY คอลัมน์ใน Fabric Data Warehouse เพื่อสร้างและจัดการคีย์ตัวแทนอย่างมีประสิทธิภาพ

เหตุใดจึงต้องใช้คอลัมน์ IDENTITY

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

ชนิดข้อมูล bigint ที่จําเป็นสําหรับ IDENTITY คอลัมน์ สามารถจัดเก็บค่าจํานวนเต็มบวกได้สูงสุด 9,223,372,036,854,775,807 ค่า เพื่อให้มั่นใจว่าตลอดอายุการใช้งานของตาราง แต่ละแถวจะได้รับค่าที่ไม่ซ้ํากันใน IDENTITY คอลัมน์

สําหรับแผนการโยกย้ายข้อมูลด้วยคีย์ตัวแทนจากแพลตฟอร์มฐานข้อมูลอื่น โปรดดู โยกย้ายคอลัมน์ IDENTITY ไปยัง Fabric Data Warehouse

วากยสัมพันธ์

เมื่อต้องการกําหนด IDENTITY คอลัมน์ใน Fabric Data Warehouse คุณสมบัติจะถูก 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 Data Warehouse คุณไม่สามารถระบุค่าเริ่มต้นหรือการเพิ่มแบบกําหนดเองได้ ระบบจัดการค่าภายในเพื่อให้มั่นใจถึงความเป็นเอกลักษณ์ 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 นอกจากนั้น ตามที่สังเกตในตัวอย่างนี้ ช่องว่างระหว่างช่วงที่กําหนดสําหรับงาน A และงาน B อาจเกิดขึ้นได้

IDENTITY ใน Fabric Data Warehouse รับประกันว่าค่า IDENTITY ทั้งหมดในคอลัมน์ไม่ซ้ํากัน แต่อาจมีช่องว่างในช่วงที่สร้างขึ้นสําหรับงานการนําเข้าที่กําหนด

มุมมองของระบบ

มุมมองแค็ตตาล็อก sys.identity_columns สามารถใช้เพื่อแสดงรายการคอลัมน์ข้อมูลประจําตัวทั้งหมดในคลังสินค้า ตัวอย่างต่อไปนี้แสดงรายการตารางทั้งหมดที่มี IDENTITY คอลัมน์ในข้อกําหนด พร้อมชื่อ Schema ที่เกี่ยวข้อง และชื่อของ 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;

Limitations

  • เฉพาะชนิดข้อมูล bigint เท่านั้นที่ได้รับการสนับสนุนสําหรับ IDENTITY คอลัมน์ใน Fabric Data Warehouse การพยายามใช้ข้อมูลชนิดอื่นส่งผลให้เกิดข้อผิดพลาด
  • IDENTITY_INSERT ไม่ได้รับการสนับสนุนใน Fabric Data Warehouse ผู้ใช้ไม่สามารถอัปเดตหรือแทรกค่าคอลัมน์บนคอลัมน์ข้อมูลประจําตัวใน Fabric Data Warehouse ด้วยตนเองได้
  • การกําหนด a 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 ที่ไม่ซ้ํากันโดยอัตโนมัติ

B. แทรกบนตารางที่มีคอลัมน์ข้อมูลประจําตัว

เมื่อคอลัมน์แรกเป็น IDENTITY คอลัมน์ คุณไม่จําเป็นต้องระบุคอลัมน์นั้นในรายการคอลัมน์

INSERT INTO Employees (FirstName, LastName) VALUES ('Ensi','Vasala')

นอกจากนี้ยังสามารถส่งชื่อคอลัมน์ได้หากมีการระบุค่าสําหรับคอลัมน์ทั้งหมดของตารางปลายทาง (ยกเว้นคอลัมน์ข้อมูลประจําตัว):

INSERT INTO Employees VALUES ('Quarantino', 'Esposito')

C. สร้างตารางใหม่ด้วยคอลัมน์ 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 Clause

D. สร้างตารางใหม่ด้วยคอลัมน์ IDENTITY โดยใช้ SELECT... กลายเป็น

พิจารณาตารางอย่างง่ายเป็นตัวอย่าง:

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 Clause