หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
นําไปใช้กับ:✅ 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;
ผลลัพธ์ตัวอย่าง:
ในตัวอย่าง 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