Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
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
IDENTITYcolunas no Fabric Data Warehouse. A tentativa de usar outros tipos de dados resulta em um erro. -
IDENTITY_INSERTnã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
seedeincrementnão tem suporte. Como resultado, não é possível reseedear a colunaIDENTITY. - Não há suporte para adicionar uma nova
IDENTITYcoluna a uma tabelaALTER TABLEexistente. Considere usar CREATE TABLE AS SELECT (CTAS) ou SELECT... INTO como alternativas para criar uma cópia de uma tabela existente que adiciona umaIDENTITYcoluna à sua definição. - Algumas limitações se aplicam à forma como
IDENTITYas colunas são preservadas ao criar uma nova tabela como resultado de uma seleção de uma tabela diferente comCREATE TABLE AS SELECT (CTAS)ouSELECT... 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.