Colunas IDENTITY em Fabric Data Warehouse

Aplica-se para:✅ Armazém no Microsoft Fabric

No Fabric Data Warehouse, IDENTITY as colunas geram automaticamente novos valores numéricos quando inseres novas linhas numa tabela.

As chaves substitutas são identificadores usados em data warehousing para distinguir linhas de forma única, independentemente das suas chaves naturais. Este artigo explica como criar e gerir chaves substitutas usando IDENTITY, incluindo a inserção de valores explícitos e a reseeding.

Porque usar uma coluna IDENTITY?

IDENTITY As colunas eliminam a atribuição manual de chaves, reduzindo o risco de erros e simplificando a ingestão de dados. Valores únicos geridos pelo sistema são ideais como chaves substitutas e primárias. Comparando com abordagens manuais, IDENTITY as colunas oferecem melhor desempenho porque chaves únicas são geradas automaticamente sem lógica de consulta adicional.

O tipo de dados bigint , necessário para IDENTITY colunas, pode armazenar até 9.223.372.036.854.775.807 valores inteiros positivos. Este intervalo garante que cada linha recebe um valor único na sua IDENTITY coluna ao longo da vida útil da tabela.

Para um plano de migração de dados com chaves substitutas a partir de outras plataformas de bases de dados, consulte Migrar colunas IDENTITY para Fabric Data Warehouse.

Sintaxe

Para definir uma coluna IDENTITY no Fabric Data Warehouse, utilize a propriedade IDENTITY na definição da coluna:

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

A coluna identidade não precisa de ser a primeira coluna na definição da tabela.

Como funcionam as colunas IDENTITY

No Fabric Data Warehouse, não podes especificar um valor inicial ou incremento personalizado. O sistema gere os valores internamente para garantir a unicidade. IDENTITY colunas produzem sempre valores inteiros positivos. Cada nova linha recebe um novo valor, e a unicidade é garantida enquanto a tabela existir. Uma vez que um valor é usado, IDENTITY não volta a usar esse mesmo valor. Podem surgir lacunas nos valores que a IDENTITY coluna produz.

Atribuição de valores

Devido à arquitetura distribuída do motor do armazém de dados, a propriedade IDENTITY não garante a ordem pela qual os valores de substituição são atribuídos. A propriedade expande-se por vários nós de computação para maximizar o paralelismo sem afetar o desempenho do carregamento. Como resultado, os intervalos de valor provenientes de diferentes tarefas de ingestão podem não ser sequenciais.

O exemplo a seguir ilustra esse comportamento:

-- 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;

Exemplo de resultado:

Captura de ecrã do conjunto de resultados de uma consulta a uma tabela com duas colunas rotuladas Colunha1 e Coluna 2, mostrando oito linhas de dados. A Coluna 1 contém valores numéricos grandes, a Coluna 2 contém o texto.

Neste exemplo, Ingestion task A e Ingestion task B executar sequencialmente como tarefas independentes. Embora as tarefas sejam executadas consecutivamente, as primeiras quatro e as últimas quatro linhas têm intervalos da chave de identidade diferentes em dbo.Table1.Column1. Podem também ocorrer lacunas entre os intervalos atribuídos à tarefa A e à tarefa B.

IDENTITY no Fabric Data Warehouse garante que todos os valores numa coluna IDENTITY são únicos, desde que IDENTITY_INSERT não seja utilizado, mas podem ocorrer lacunas nos intervalos gerados durante uma tarefa de ingestão.

Objetos de metadados do sistema

Os seguintes objetos de metadados do sistema estão disponíveis e são úteis ao desenhar e trabalhar com valores de identidade em Fabric Data Warehouse.

Lista as colunas de identidade com a vista do sistema sys.identity_columns

Use a vista de catálogo sys.identity_columns para listar todas as colunas de identidade num armazém. O exemplo seguinte lista todas as tabelas que contêm uma IDENTITY coluna, incluindo os nomes das colunas de esquema, tabela e identidade:

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;

No Fabric Data Warehouse, as colunas seed_value e increment_value de sys.identity_columns devolvem NULL e não são atualizadas depois de a coluna de identidade ser criada. A last_value coluna retorna NULL por defeito, mas muda permanentemente para -1 após a primeira operação de inserção de identidade na tabela.

Inserir valores com IDENTITY_INSERT

Por defeito, não podes inserir valores numa IDENTITY coluna. No entanto, pode ser necessário inserir valores específicos durante a migração de dados, recuperação de desastres ou quando preencher valores sentinela, como -1 para "Desconhecido" nas tabelas de dimensões.

Utilize SET IDENTITY_INSERT para permitir temporariamente inserções explícitas numa coluna de identidade:

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;

Quando IDENTITY_INSERT é ON:

  • É necessária uma lista de colunas com a INSERT declaração.
  • Apenas uma tabela por sessão pode ter IDENTITY_INSERT definido como ON em simultâneo.

Importante

Depois de desligar IDENTITY_INSERT , reseme os valores de identidade com o DBCC CHECKIDENT.

Repor os valores de identidade com DBCC CHECKIDENT

Depois de inserir valores explícitos com IDENTITY_INSERT, use DBCC CHECKIDENT para redefinir o valor inicial da coluna de identidade. A RESEED operação analisa todos os intervalos de identidade usados e reservados entre nós de computação distribuídos para determinar os valores corretos seguintes, garantindo a unicidade e prevenindo colisões de chaves.

DBCC CHECKIDENT('dbo.DimProduct', RESEED);

Em Fabric Data Warehouse, DBCC CHECKIDENT suporta apenas a RESEED opção. O armazém de dados determina automaticamente os intervalos seguintes de valores corretos, e não é possível especificar um valor de reinicialização personalizado. Para obter mais informações, consulte DBCC CHECKIDENT.

Limitações

Para mais informações, consulte as colunas IDENTITY, IDENTITY (Transact-SQL) e Criar tabelas no Warehouse em Microsoft Fabric.

  • Apenas bigint é suportado como tipo de dados para as colunas IDENTITY no Fabric Data Warehouse. Outros tipos de dados resultam num erro.
  • A definição de um valor inicial e de um incremento não é suportada. O sistema gere os valores internamente.
  • Adicionar uma IDENTITY coluna a uma tabela existente com ALTER TABLE não é suportado. Considere usar CREATE TABLE AS SELECT (CTAS) ou SELECT... INTO para criar uma cópia de uma tabela existente e adicionar uma IDENTITY coluna.
  • Aplicam-se limitações à forma como IDENTITY as colunas são preservadas quando se cria uma tabela selecionando de outra tabela com CTAS ou SELECT...INTO. Para mais informações, consulte a secção Tipos de Dados da Cláusula SELECT - INTO (Transact-SQL).
  • DBCC CHECKIDENT Suporta apenas a RESEED opção. Especificar um valor de reseed personalizado ou usar NORESEED não é suportado.
  • IDENTITY As colunas produzem valores que são garantidamente únicos, mas os valores não são necessariamente sequenciais ou ordenados, e podem ocorrer lacunas.

Examples

A. Crie uma tabela com uma coluna IDENTIDADE

CREATE TABLE Employees (
    EmployeeID BIGINT IDENTITY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50)
);

Esta instrução cria uma Employees tabela onde cada nova linha recebe automaticamente um valor único EmployeeID como bigint .

B. Inserir linhas numa tabela com uma coluna de identidade

Quando fornece valores para cada coluna não-identidade na sua ordem definida, não precisa de especificar uma lista de colunas:

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

Também pode fornecer uma lista de colunas que omita a coluna de identidade:

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

C. Insira valores explícitos com 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. Inserir valores explícitos com COPY INTO

A COPY INTO instrução suporta a IDENTITY_INSERT opção de ingerir valores explícitos dentro do comando. COPY INTO As opções sobrepõem-se a qualquer definição de nível de sessão 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. Resemear uma tabela após inserções explícitas

DBCC CHECKIDENT('dbo.Employees', RESEED);

F. Crie uma tabela com CREATE TABLE AS SELECT

Use o CTAS para criar uma cópia de uma tabela e persista a IDENTITY propriedade na tabela alvo:

CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees;

A coluna na tabela de destino herda a IDENTITY propriedade da tabela de origem. Para limitações, consulte a secção de Tipos de Dados da cláusula SELECT - INTO.

G. Criar uma tabela com SELECT...INTO

Use SELECT...INTO para criar uma cópia de uma tabela e persistir a IDENTITY propriedade na tabela alvo:

SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE LastName = 'Esposito';

A coluna na tabela de destino herda a IDENTITY propriedade da tabela de origem. Para limitações, consulte a secção de Tipos de Dados da cláusula SELECT - INTO.

Passo seguinte