Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se para:✅ Armazém no Microsoft Fabric
As chaves substitutas são identificadores usados em data warehousing para distinguir linhas de forma única, independentemente das suas chaves naturais. No Fabric Data Warehouse, IDENTITY as colunas permitem a geração automática destas chaves substitutas ao inserir novas linhas numa tabela. Este artigo explica como usar IDENTITY colunas no Fabric Data Warehouse para criar e gerir chaves substitutas de forma eficiente.
Porque usar uma coluna IDENTITY?
IDENTITY As colunas eliminam a necessidade de 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. Quando comparadas com abordagens manuais para produzir chaves substitutas, IDENTITY as colunas oferecem desempenho superior, pois chaves únicas são geradas automaticamente sem 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 ao longo da vida útil de uma tabela, cada linha receba um valor único na sua IDENTITY coluna.
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 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, não pode 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, preservando tanto a integridade da chave como a unicidade. Podem surgir lacunas nos valores que a IDENTITY coluna produz.
Atribuição de valores
Devido à arquitetura distribuída do sistema de armazenamento, a propriedade IDENTITY não garante a ordem em que os valores substitutos são alocados. A IDENTITY propriedade foi concebida para escalar entre nós de computação para maximizar o paralelismo, sem afetar o desempenho da carga. Como resultado, intervalos de valores em diferentes tarefas de ingestão podem ter intervalos de sequência diferentes.
Para ilustrar este 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;
Exemplo de resultado:
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 diferentes intervalos de chave de identidade em dbo.T1.C1. Além disso, como observado neste exemplo, podem ocorrer intervalos entre os intervalos atribuídos à tarefa A e à tarefa B.
IDENTITY no Fabric Data Warehouse garante que todos os valores numa IDENTITY coluna são únicos, mas podem existir lacunas nos intervalos produzidos para uma dada tarefa de ingestão.
Vistas de sistema
A vista de catálogo sys.identity_columns pode ser usada para listar todas as colunas de identidade num armazém. O exemplo seguinte lista todas as tabelas que contêm uma IDENTITY coluna na sua definição, com o respetivo nome 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
- Apenas bigint é suportado como tipo de dados para as colunas
IDENTITYno Fabric Data Warehouse. Tentar usar outros tipos de dados resulta num erro. -
IDENTITY_INSERTnão é suportado no Fabric Data Warehouse. Os utilizadores não podem atualizar ou inserir manualmente valores de coluna nas colunas de identidade no Fabric Data Warehouse. - Definir
seedeincrementnão é suportado. Como resultado, redefinir a sequência da colunaIDENTITYnão é suportado. - Adicionar uma nova
IDENTITYcoluna a uma tabela existente comALTER TABLEnão é suportada. 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 aplicam-se à forma como as colunas
IDENTITYsão preservadas ao criar uma nova tabela como resultado de uma seleção numa tabela diferente comCREATE TABLE AS SELECT (CTAS)ouSELECT... INTO. Para mais informações, consulte a secção de Tipos de Dados da cláusula SELECT - INTO (Transact-SQL).
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 tabela Employees onde cada nova linha recebe automaticamente um valor único EmployeeID como bigint .
B. INSERT numa tabela com uma coluna de identidade
Quando a primeira coluna é uma IDENTITY coluna, não precisas de a especificar na lista de colunas.
INSERT INTO Employees (FirstName, LastName) VALUES ('Ensi','Vasala')
Também é possível emitir os nomes das colunas, se forem fornecidos valores para todas as colunas da tabela de destino (exceto para a coluna identidade):
INSERT INTO Employees VALUES ('Quarantino', 'Esposito')
C. Crie uma nova tabela com uma coluna IDENTIDADE usando CREATE TABLE AS SELECT (CTAS)
Considerando uma tabela simples como 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 alvo:
CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees
A coluna na tabela alvo herda a IDENTITY propriedade da tabela de origem. Para uma lista de limitações que se aplicam a este cenário, consulte a secção de Tipos de Dados da cláusula SELECT - INTO.
D. Crie uma nova tabela com uma coluna IDENTITY usando SELECT... INTO
Considerando uma tabela simples como 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, persistindo 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 de origem. Para uma lista de limitações que se aplicam a este cenário, consulte a secção de Tipos de Dados da cláusula SELECT - INTO.