Usar columnas "IDENTITY" en Fabric Data Warehouse

Esto se aplica a:✅ Almacén en Microsoft Fabric

Este tutorial explica cómo usar columnas IDENTITY en Fabric Data Warehouse para crear y gestionar claves sustitutas. Aprendes a crear tablas con columnas de identidad, insertar datos, insertar valores explícitos con IDENTITY_INSERT, y resembrar el rango de identidad con DBCC CHECKIDENT.

Prerrequisitos

  • Acceso a un elemento de almacén en un espacio de trabajo con permisos de Contributor o superiores.
  • Una herramienta de consulta. Este tutorial utiliza el editor de consultas SQL en el portal Microsoft Fabric, pero puedes usar cualquier herramienta de consulta T-SQL.
  • Una comprensión básica de T-SQL.

¿Qué es una columna IDENTITY?

Una IDENTITY columna es una columna numérica que genera automáticamente valores únicos para las nuevas filas. Este comportamiento lo hace ideal para implementar claves sustitutas porque cada fila recibe un identificador único sin necesidad de entrada manual.

Creación de una columna IDENTITY

Para definir una IDENTITY columna, especifique la IDENTITY palabra clave en la definición de columna de la CREATE TABLE sintaxis de T-SQL:

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

Creación de una tabla con una columna IDENTITY

En este tutorial, creas una versión más sencilla de la Trip tabla a partir del conjunto de datos abierto de NY Taxi y añades una TripIDIDENTITY columna. Cada nueva fila recibe un TripID valor único en la tabla.

  1. Defina una tabla con una IDENTITY columna:

     CREATE TABLE dbo.Trip
     (
         TripID               bigint IDENTITY,
         tpepPickupDateTime   datetime2(6),
         tpepDropoffDateTime  datetime2(6),
         passengerCount       int,
         tripDistance         float,
         fareAmount           float,
         totalAmount          float
     );
    
  2. Úsalo COPY INTO para ingir datos en la tabla. Cuando uses COPY INTO con una columna IDENTITY, proporciona la lista de columnas y asígnala a las columnas de los datos de origen.

     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. Vista previa de los datos y los valores asignados a la IDENTITY columna:

    SELECT TOP 10 *
    FROM Trip;
    

    La salida incluye el valor generado TripID automáticamente para cada fila.

    Captura de pantalla de los resultados de la consulta que muestra una tabla con las primeras 10 filas de un conjunto de datos de viajes en taxi.

    Importante

    Tus valores pueden diferir de los de este artículo. IDENTITY Las columnas producen valores que garantizan ser únicos, pero los valores no son necesariamente secuenciales u ordenados, y pueden aparecer huecos.

  4. Uso INSERT INTO para ingerir nuevas filas:

     INSERT INTO dbo.Trip
     VALUES ('2026-01-01T00:00:00', '2013-01-01T00:12:00', 1, 2.4, 10.5, 13.0);
    
  5. Una lista de columnas es opcional con INSERT INTO. Cuando proporciones uno, especifica los nombres de todas las columnas para las que proporcionas datos de entrada, excepto la IDENTITY columna:

     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. Revisa las filas insertadas:

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

    Observe los valores asignados a las nuevas filas:

    Captura de pantalla de una tabla con dos filas y seis columnas que muestran datos de viajes en taxi.

Inserta valores explícitos con IDENTITY_INSERT

Puede que necesites insertar valores específicos en una columna de identidad durante la migración de datos, al poblar valores centinela o al restaurar datos de una copia de seguridad. Utiliza SET IDENTITY_INSERT para habilitar estos insertos.

En esta sección, creas una tabla de dimensiones y la usas IDENTITY_INSERT para añadir filas centinela con valores clave bien conocidos.

  1. Crea una tabla de dimensiones con una IDENTITY columna:

    CREATE TABLE dbo.DimCustomer
    (
        CustomerKey BIGINT IDENTITY,
        CustomerName VARCHAR(100),
        CustomerType VARCHAR(20)
    );
    
  2. Inserta filas normales. Los valores de identidad se generan automáticamente:

    INSERT INTO dbo.DimCustomer (CustomerName, CustomerType)
    VALUES ('Contoso Ltd', 'Enterprise'),
           ('Fabrikam Inc', 'SMB'),
           ('Northwind Traders', 'Enterprise');
    
  3. Active IDENTITY_INSERT para añadir valores centinela. Cuando IDENTITY_INSERT es ON, proporciona una lista de columnas que incluye la columna identidad:

    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. Después de insertar valores explícitos, restablece la secuencia de la columna de identidad con DBCC CHECKIDENT para garantizar que los valores generados automáticamente en el futuro no entren en conflicto con los valores insertados:

    DBCC CHECKIDENT('dbo.DimCustomer', RESEED);
    
  5. Verifica que las filas centinela aparezcan junto a las filas generadas automáticamente:

    SELECT *
    FROM dbo.DimCustomer
    ORDER BY CustomerKey;
    
  6. Inserta una fila y confirma que el valor generado automáticamente no entra en conflicto:

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

Limpiar recursos del tutorial

Opcionalmente, elimina las tablas creadas durante este tutorial:

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