Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
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
INSERTdeclaração. - Apenas uma tabela por sessão pode ter
IDENTITY_INSERTdefinido comoONem 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
IDENTITYno 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
IDENTITYcoluna a uma tabela existente comALTER TABLEnão é suportado. Considere usar CREATE TABLE AS SELECT (CTAS) ou SELECT... INTO para criar uma cópia de uma tabela existente e adicionar umaIDENTITYcoluna. - Aplicam-se limitações à forma como
IDENTITYas colunas são preservadas quando se cria uma tabela selecionando de outra tabela com CTAS ouSELECT...INTO. Para mais informações, consulte a secção Tipos de Dados da Cláusula SELECT - INTO (Transact-SQL). -
DBCC CHECKIDENTSuporta apenas aRESEEDopção. Especificar um valor de reseed personalizado ou usarNORESEEDnão é suportado. -
IDENTITYAs 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.