Compartilhar via


Colunas de Identidade

Aplica-se a:✅Armazém de dados no Microsoft Fabric

Chaves substitutas são identificadores usados no data warehousing para distinguir exclusivamente linhas, independentemente de suas chaves naturais. No Fabric Data Warehouse, IDENTITY as colunas permitem a geração automática dessas chaves substitutas ao inserir novas linhas em uma tabela. Este artigo explica como usar IDENTITY colunas no Fabric Data Warehouse para criar e gerenciar chaves substitutas com eficiência.

Por que usar uma coluna do tipo IDENTITY?

IDENTITY as colunas eliminam a necessidade de atribuição manual de chave, reduzindo o risco de erros e simplificando a ingestão de dados. Os valores exclusivos gerenciados pelo sistema são ideais como chaves substitutas e chaves primárias. Quando comparadas com abordagens manuais para produzir chaves substitutas, as colunas IDENTITY oferecem desempenho superior, já que as chaves exclusivas são geradas automaticamente, sem necessidade de lógica adicional nas consultas.

O tipo de dados bigint , necessário para IDENTITY colunas, pode armazenar até 9.223.372.036.854.775.807 valores inteiros positivos, garantindo que durante todo o tempo de vida de uma tabela, cada linha receba um valor exclusivo em sua IDENTITY coluna.

Para obter um plano para migrar dados com chaves substitutas (surrogate keys) de outras plataformas de banco de dados, consulte Migrar colunas IDENTITY para o Fabric Data Warehouse.

Sintaxe

Para definir uma IDENTITY coluna no Fabric Data Warehouse, a IDENTITY propriedade é usada com a coluna desejada. A sintaxe é a seguinte:

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

Como funcionam as colunas IDENTITY

No Fabric Data Warehouse, você não pode especificar um valor inicial personalizado ou incremento; o sistema gerencia os valores internamente para garantir a exclusividade. IDENTITY as colunas sempre produzem valores inteiros positivos. Cada nova linha recebe um novo valor e a exclusividade é garantida enquanto a tabela existir. Depois que um valor é usado, IDENTITY não usa esse mesmo valor novamente, preservando a integridade da chave e a exclusividade. As lacunas podem aparecer em valores que a IDENTITY coluna produz.

Alocação de valores

Devido à arquitetura distribuída do motor de armazenamento, a IDENTITY propriedade não garante a ordem na qual os valores substitutos são alocados. A IDENTITY propriedade foi projetada para escalar horizontalmente entre nós de computação para maximizar o paralelismo, sem afetar o desempenho de carga. Como resultado, intervalos de valor em diferentes tarefas de ingestão podem ter intervalos de sequência diferentes.

Para ilustrar esse comportamento, considere o seguinte exemplo:

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

Resultado de exemplo:

Uma tabela com duas colunas rotuladas como C1 e C2, mostrando oito linhas de dados. A coluna C1 contém valores numéricos grandes. A coluna C2 contém o texto.

Neste exemplo, Ingestion task A e Ingestion task B são executados sequencialmente, como tarefas independentes. Embora as tarefas tenham sido executadas consecutivamente, a primeira e a última quatro linhas têm intervalos de chave de identidade diferentes em dbo.T1.C1. Além disso, conforme observado neste exemplo, podem ocorrer lacunas entre os intervalos atribuídos à tarefa A e à tarefa B.

IDENTITY no Fabric Data Warehouse garante que todos os valores em uma IDENTITY coluna sejam exclusivos, mas pode haver lacunas nos intervalos produzidos para uma determinada tarefa de ingestão.

Exibições do sistema

A visão de catálogo sys.identity_columns pode ser usada para listar todas as colunas de identidade em um armazém. O exemplo a seguir lista todas as tabelas que contêm uma coluna chamada IDENTITY em sua definição, com seus respectivos nomes do esquema e o nome da IDENTITY coluna nessa tabela.

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;

Limitações

  • Somente o tipo de bigint data tem suporte para IDENTITY colunas no Fabric Data Warehouse. A tentativa de usar outros tipos de dados resulta em um erro.
  • IDENTITY_INSERT não há suporte no Fabric Data Warehouse. Os usuários não podem atualizar ou inserir valores em colunas de identidade do Fabric Data Warehouse manualmente.
  • A definição de um seed e increment não tem suporte. Como resultado, não é possível reseedear a coluna IDENTITY.
  • Não há suporte para adicionar uma nova IDENTITY coluna a uma tabela ALTER TABLE existente. Considere usar CREATE TABLE AS SELECT (CTAS) ou SELECT... INTO como alternativas para criar uma cópia de uma tabela existente que adiciona uma IDENTITY coluna à sua definição.
  • Algumas limitações se aplicam à forma como IDENTITY as colunas são preservadas ao criar uma nova tabela como resultado de uma seleção de uma tabela diferente com CREATE TABLE AS SELECT (CTAS) ou SELECT... INTO. Para obter mais informações, consulte a seção Tipos de Dados da Cláusula SELECT – INTO (Transact-SQL).

Exemplos

A. Criar uma tabela com uma coluna IDENTITY

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

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

B. INSERT em uma tabela que possui uma coluna de identificação

Quando a primeira coluna é uma IDENTITY coluna, você não precisa especificá-la na lista de colunas.

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

Também é possível emitir os nomes de coluna, se os valores forem fornecidos para todas as colunas da tabela de destino (exceto para a coluna de identidade):

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

C. Criar uma nova tabela com uma coluna IDENTITY usando CREATE TABLE AS SELECT (CTAS)

Considerando uma tabela simples como um exemplo:

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

Podemos usar CREATE TABLE AS SELECT (CTAS) para criar uma cópia desta tabela, mantendo a IDENTITY propriedade na tabela de destino:

CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees

A coluna na tabela alvo herda a IDENTITY propriedade da tabela fonte. Para uma lista de limitações que se aplicam a esse cenário, consulte a seção Tipos de Dados da cláusula SELECT - INTO.

D. Criar uma nova tabela com uma coluna IDENTITY usando SELECT... INTO

Considerando uma tabela simples como um exemplo:

CREATE TABLE dbo.Employees (
    EmployeeID BIGINT IDENTITY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Retired BIT
);

Podemos usar SELECT... INTO para criar uma cópia desta tabela, mantendo a IDENTITY propriedade na tabela de destino:

SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE Retired = 1;

A coluna na tabela alvo herda a IDENTITY propriedade da tabela fonte. Para uma lista de limitações que se aplicam a esse cenário, consulte a seção Tipos de Dados da cláusula SELECT - INTO.