Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Esto se aplica a:✅ Almacén en Microsoft Fabric
En Fabric Data Warehouse, IDENTITY las columnas generan automáticamente nuevos valores numéricos cuando insertas nuevas filas en una tabla.
Las claves suplentes son identificadores usados en el almacenamiento de datos para distinguir filas de forma única, independientemente de sus claves naturales. Este artículo explica cómo crear y administrar claves subrogadas mediante IDENTITY, incluida la inserción de valores explícitos y la reinicialización.
¿Por qué usar una columna IDENTITY?
IDENTITY Las columnas eliminan la asignación manual de teclas, reduciendo el riesgo de errores y simplificando la ingestión de datos. Los valores únicos administrados por el sistema son ideales como claves suplentes y claves principales. En comparación con los enfoques manuales, IDENTITY las columnas ofrecen mejor rendimiento porque las claves únicas se generan automáticamente sin lógica de consulta adicional.
El tipo de dato bigint , requerido para IDENTITY columnas, puede almacenar hasta 9.223.372.036.854.775.807 valores enteros positivos. Este rango garantiza que cada fila reciba un valor único en su IDENTITY columna a lo largo de la vida útil de la tabla.
Para obtener un plan para migrar datos con claves suplentes de otras plataformas de base de datos, consulte Migración de columnas IDENTITY a Fabric Data Warehouse.
Syntax
Para definir una IDENTITY columna en Fabric Data Warehouse, utilice la IDENTITY propiedad en la definición de columna:
CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
[ column_name ] BIGINT IDENTITY ,
[ ,...n ]
-- Other columns here
);
La columna identidad no tiene por qué ser la primera columna en la definición de la tabla.
Funcionamiento de las columnas IDENTITY
En Fabric Data Warehouse, no puedes especificar un valor inicial o incremento personalizado. El sistema gestiona los valores internamente para garantizar la singularidad.
IDENTITY las columnas siempre generan valores enteros positivos. Cada nueva fila recibe un nuevo valor y se garantiza la unicidad siempre que exista la tabla. Una vez que se usa un valor, IDENTITY no vuelve a usar ese mismo valor. Pueden aparecer huecos en los valores que produce la IDENTITY columna.
Asignación de valores
Debido a la arquitectura distribuida del motor del almacén de datos, la propiedad IDENTITY no garantiza el orden en que se asignan los valores subrogados. La propiedad se escala entre los nodos de cómputo para maximizar el paralelismo sin afectar al rendimiento de la carga. Como resultado, los rangos de valor de diferentes tareas de ingestión pueden no ser secuenciales.
En el siguiente ejemplo, se muestra este comportamiento:
-- Create a table with an IDENTITY column
CREATE TABLE dbo.Table1(
Column1 BIGINT IDENTITY,
Column2 VARCHAR(30) NULL
)
-- Ingestion task A
INSERT INTO dbo.Table1
VALUES (NULL), (NULL), (NULL), (NULL);
-- Ingestion task B
INSERT INTO dbo.Table1
VALUES (NULL), (NULL), (NULL), (NULL);
-- Review the data
SELECT * FROM dbo.Table1;
Resultado de ejemplo:
En este ejemplo, Ingestion task A y Ingestion task B se ejecutan secuencialmente como tareas independientes. Aunque las tareas se ejecutan consecutivamente, la primera y la última cuatro filas tienen diferentes rangos de clave identidad en dbo.Table1.Column1. También pueden aparecer intervalos entre los rangos asignados a la tarea A y la tarea B.
IDENTITY En Fabric Data Warehouse se garantiza que todos los valores de una columna IDENTITY sean únicos siempre que no se use IDENTITY_INSERT, pero pueden producirse huecos en los intervalos generados para una tarea de ingestión.
Objetos de metadatos del sistema
Los siguientes objetos de metadatos del sistema están disponibles y son útiles al diseñar y trabajar con valores de identidad en Fabric Data Warehouse.
Enumerar columnas de identidad con la vista de sistema sys.identity_columns
Utiliza la vista de catálogo sys.identity_columns para listar todas las columnas de identidad en un almacén. El siguiente ejemplo enumera todas las tablas que contienen una IDENTITY columna, incluyendo los nombres de esquema, tabla e identidad de las columnas:
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;
En Fabric Data Warehouse, las columnas seed_value y increment_value de sys.identity_columns devuelven NULL y no se actualizan después de que se crea la columna de identidad. La last_value columna regresa NULL por defecto, pero cambia permanentemente a -1 después de la primera operación de inserción de identidad en la tabla.
Insertar valores con IDENTITY_INSERT
Por defecto, no puedes insertar valores en una IDENTITY columna. Sin embargo, puede que necesites insertar valores específicos durante la migración de datos, la recuperación ante desastres o cuando se llenan valores centinela, como -1 para "Desconocido" en las tablas de dimensiones.
Utiliza SET IDENTITY_INSERT para permitir temporalmente inserciones explícitas en una columna identidad:
SET IDENTITY_INSERT dbo.DimCustomer ON;
INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName, Email)
VALUES (-1, 'John Doe', 'john@contoso.com');
SET IDENTITY_INSERT dbo.DimCustomer OFF;
Cuándo IDENTITY_INSERT es ON:
- Se requiere una lista de columnas junto con la
INSERTdeclaración. - Solo una tabla por sesión puede tener
IDENTITY_INSERTestablecido enONal mismo tiempo.
Importante
Después de desactivar IDENTITY_INSERT, restablece los valores de identidad con DBCC CHECKIDENT.
Restablecer los valores de identidad con DBCC CHECKIDENT
Después de insertar valores explícitos con IDENTITY_INSERT, utiliza DBCC CHECKIDENT para restablecer la columna de identidad. La RESEED operación escanea todos los rangos de identidad utilizados y reservados entre los nodos de cómputo distribuidos para determinar los siguientes valores correctos, asegurando la unicidad y evitando colisiones clave.
DBCC CHECKIDENT('dbo.DimProduct', RESEED);
En Fabric Data Warehouse, DBCC CHECKIDENT solo admite la RESEED opción. El almacén determina automáticamente los rangos de valor correctos a continuación, y no puedes especificar un valor de reseed personalizado. Para más información, consulte DBCC CHECKIDENT.
Limitaciones
Para más información, consulte columnas IDENTIDAD, IDENTIDAD (Transact-SQL) y Crear tablas en el Almacén en Microsoft Fabric.
- Solo se admite el tipo de datos bigint para columnas en
IDENTITYFabric Data Warehouse. Otros tipos de datos provocan un error. - No se admite definir una semilla y un valor de incremento. El sistema gestiona los valores internamente.
- No se admite añadir una columna
IDENTITYa una tabla existente conALTER TABLE. Considera usar CREATE TABLE AS SELECT (CTAS) o SELECT... INTO para crear una copia de una tabla existente y añadir unaIDENTITYcolumna. - Hay limitaciones en cómo se conservan las columnas
IDENTITYcuando se crea una tabla a partir de otra tabla con CTAS oSELECT...INTO. Para más información, consulte la sección de Tipos de datos de la cláusula SELECT - INTO (Transact-SQL). -
DBCC CHECKIDENTSolo admite laRESEEDopción. No se admite especificar un valor de reseed personalizado ni usarNORESEED. -
IDENTITYLas columnas producen valores que garantizan ser únicos, pero los valores no son necesariamente secuenciales u ordenados, y pueden aparecer huecos.
Examples
A. Creación de una tabla con una columna IDENTITY
CREATE TABLE Employees (
EmployeeID BIGINT IDENTITY,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
Esta sentencia crea una Employees tabla donde cada nueva fila recibe automáticamente un valor único EmployeeID como bigint .
B. Insertar filas en una tabla con una columna de identidad
Cuando proporcionas valores para cada columna no identidad en su orden definido, no necesitas especificar una lista de columnas:
INSERT INTO Employees VALUES ('Quarantino', 'Esposito');
También puedes proporcionar una lista de columnas que omita la columna de identidad:
INSERT INTO Employees (FirstName, LastName)
VALUES ('Ensi', 'Vasala');
C. Inserta valores explícitos con IDENTITY_INSERT
SET IDENTITY_INSERT dbo.Employees ON;
INSERT INTO dbo.Employees (EmployeeID, FirstName, LastName)
VALUES (100, 'Sentinel', 'Row');
SET IDENTITY_INSERT dbo.Employees OFF;
D. Insertar valores explícitos con COPY INTO
La instrucción COPY INTO admite la opción IDENTITY_INSERT para incorporar valores explícitos en el comando.
COPY INTO las opciones anulan cualquier configuración a nivel de sesión para IDENTITY_INSERT.
COPY INTO dbo.Employees (EmployeeID 1, FirstName 2, LastName 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
IDENTITY_INSERT = 'ON'
);
E. Resembrar una tabla tras insertos explícitos
DBCC CHECKIDENT('dbo.Employees', RESEED);
F. Crear una tabla con CREATE TABLE AS SELECT
Utiliza CTAS para crear una copia de una tabla y mantener la IDENTITY propiedad en la tabla objetivo:
CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees;
La columna de la tabla destino hereda la IDENTITY propiedad de la tabla fuente. Para limitaciones, consulte la sección de Tipos de datos de la cláusula SELECT - INTO.
G. Crear una tabla con SELECT...INTO
Úsate SELECT...INTO para crear una copia de una tabla y persistir la IDENTITY propiedad en la tabla objetivo:
SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE LastName = 'Esposito';
La columna de la tabla destino hereda la IDENTITY propiedad de la tabla fuente. Para limitaciones, consulte la sección de Tipos de datos de la cláusula SELECT - INTO.