在 Fabric 数据仓库中使用 IDENTITY 列创建代理键

适用于:Microsoft Fabric 中的✅ 仓库

本教程介绍了如何在 Fabric 数据仓库中使用列来高效创建和管理代理键。

先决条件

  • 在工作区中访问具有参与者或更高权限的仓库项目。
  • 选择查询工具。 本教程介绍了 Microsoft Fabric 门户中的 SQL 查询编辑器,但可以使用任何 T-SQL 查询工具。
  • 基本了解 T-SQL。

什么是 IDENTITY 列?

IDENTITY 是一个数值列,可自动生成新行的唯一值。 这使得它非常适合实现代理项键,因为它可确保每一行在不使用手动输入的情况下接收唯一标识符。

创建 IDENTITY 列

若要定义IDENTITY列,请在 T-SQL 语法的IDENTITY列定义中指定关键字CREATE TABLE

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

注释

在 Fabric 数据仓库中, bigint 是唯一支持的列数据类型 IDENTITY 。 此外,seedincrement不支持 T-SQL IDENTITY 的属性。 有关详细信息,请参阅 IDENTITY 列IDENTITY(Transact-SQL)。 有关创建表的详细信息,请参阅 Microsoft Fabric 中的仓库中创建表

使用 IDENTITY 列创建表

在本教程中,我们将从 Trip创建更简单的表版本,并向其添加新TripIDIDENTITY列。 每次插入新行时, TripID 都会使用表中唯一的新值进行分配。

  1. 定义一个带有 IDENTITY 列的表:

     CREATE TABLE dbo.Trip
     (
         TripID BIGINT IDENTITY,
         DateID int,
         MedallionID int,
         HackneyLicenseID int,
         PickupTimeID int,
         DropoffTimeID int
     );
    
  2. 接下来,我们将用于 COPY INTO 将一些数据引入此表。 在与列一起使用COPY INTOIDENTITY时,必须提供列清单,将其映射到源数据中的列。

    COPY INTO Trip (DateID 1, MedallionID 2, HackneyLicenseID 3, PickupTimeID 4, DropoffTimeID 5)
    FROM 'https://nytaxiblob.blob.core.windows.net/2013/Trip2013'
    WITH
    (
        FILE_TYPE = 'CSV',
        FIELDTERMINATOR = '|',
        COMPRESSION = 'GZIP'
    );
    
  3. 可以使用简单的查询预览分配给 IDENTITY 列的数据和值:

    SELECT TOP 10 * 
    FROM Trip;
    

    输出包括每行TripID列的自动生成值。

    查询结果的屏幕截图,其中显示了包含出租车行程数据集前 10 行的表。

    重要

    你的值可能与本文中观察到的值不同。 IDENTITY 列生成的随机值保证唯一,但序列中可能存在间隙,同时,值可能不按顺序排列。

  4. 您还可以使用 INSERT INTO 在表中引入新行。

    INSERT INTO dbo.Trip
    VALUES (20251104, 3524, 28804, 51931, 52252);
    
  5. 可以提供INSERT INTO列列表,但这不是必须的。 在提供列列表时,请指定所有需要提供输入数据的列的名称,但不包括 IDENTITY 列。

    INSERT INTO dbo.Trip (DateID, MedallionID, HackneyLicenseID, PickupTimeID, DropoffTimeID)
    VALUES (20251104, 8410, 24939, 74609, 49583);
    
  6. 我们可以通过一个简单的查询来查看已插入的行:

    SELECT *
    FROM dbo.Trip
    WHERE DateID = 20251104;
    

观察分配给新行的值:

包含两行和六列的表,其中显示了出租车行程数据。