Migrar colunas IDENTITY para o Fabric Data Warehouse

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

Este artigo descreve como usar o SET IDENTITY_INSERT e o DBCC CHECKIDENT para preservar valores de identidade existentes durante a migração de SQL Server, Base de Dados SQL do Azure ou Azure Synapse Analytics, e garantir a integridade referencial.

Principais diferenças em relação a outras plataformas

Antes de migrar, compreenda estas diferenças na implementação do IDENTITY Fabric Data Warehouse:

  • IDENTITY as colunas suportam apenas o tipo de dados bigint .
  • Os parâmetros SEED e INCREMENT não são suportados. O sistema gere os valores internamente.
  • Os valores são garantidos únicos, mas não necessariamente sequenciais. Podem ocorrer lacunas devido à arquitetura de computação distribuída.
  • O Fabric Data Warehouse não impõe restrições principais.

Estratégia de migração

Ao utilizar o suporte para IDENTITY_INSERT, pode migrar valores de identidade diretamente para tabelas do Fabric Data Warehouse que utilizam colunas IDENTITY:

  1. Cria tabelas de destino em Fabric Data Warehouse com IDENTITY colunas.
  2. Use SET IDENTITY_INSERT ON para inserir dados históricos com os valores originais de identidade preservados.
  3. Executa DBCC CHECKIDENT com RESEED para realinhar o intervalo de identidade após a migração.
  4. Atualize as referências de chaves estrangeiras, se necessário.

Esta abordagem preserva os valores de identidade originais, mantém a integridade referencial entre tabelas e permite Fabric Data Warehouse retomar a geração de valores únicos após a migração.

Exemplo: migrar tabelas com colunas IDENTITY

O exemplo seguinte migra uma Orders tabela de uma plataforma de origem para Fabric Data Warehouse preservando os valores de identidade.

Passo 1: Criar uma tabela de destino com uma coluna IDENTIDADE

Cria a tabela de destinos no Fabric Data Warehouse. A coluna principal de chave utiliza IDENTITY:

CREATE TABLE dbo.Orders (
    OrderID BIGINT IDENTITY,
    OrderDate DATE,
    CustomerID BIGINT,
    TotalAmount DECIMAL(18, 2)
);

Passo 2: Migrar dados com IDENTITY_INSERT

Use SET IDENTITY_INSERT para inserir dados históricos com os valores originais de identidade. Este método preserva IDs existentes para que as relações entre tabelas permaneçam intactas.

-- Migrate Orders with original IDs
SET IDENTITY_INSERT dbo.Orders ON;

INSERT INTO dbo.Orders (OrderID, OrderDate, CustomerID, TotalAmount)
VALUES (101, '2025-01-15', 1, 5000.00),
       (102, '2025-02-20', 2, 3200.00),
       (103, '2025-03-10', 1, 7800.00),
       (104, '2025-04-05', 3, 1500.00);

SET IDENTITY_INSERT dbo.Orders OFF;

Para conjuntos de dados maiores, pode usar COPY INTO com IDENTITY_INSERT:

COPY INTO dbo.Orders (OrderID 1, OrderDate 2, CustomerID 3, TotalAmount 4)
FROM 'https://storage.blob.core.windows.net/migration/orders.csv'
WITH (
    FILE_TYPE = 'CSV',
    IDENTITY_INSERT = 'ON'
);

Passo 3: Reseed das colunas de identidade

Depois de migrar os dados, execute DBCC CHECKIDENT com RESEED em cada tabela. Esta operação analisa todos os intervalos de identidade utilizados e ajusta o valor seguinte para evitar colisões com dados migrados:

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

Passo 4: Verificar a migração e testar novos inserts

Confirme que os dados migrados estão intactos e que os novos inserts recebem valores gerados automaticamente que não se sobrepõem aos valores migrados:

-- Verify migrated data
SELECT * FROM dbo.Orders ORDER BY OrderID;

-- Insert a row that receives an automatically generated ID
INSERT INTO dbo.Orders (OrderDate, CustomerID, TotalAmount)
VALUES ('2025-05-01', 1, 2500.00);

-- Verify that new IDs don't overlap with migrated data
SELECT * FROM dbo.Orders ORDER BY OrderID;

Melhores práticas

  • Sempre resemear após a migração. Execute DBCC CHECKIDENT('table_name', RESEED) após cada migração de tabela para evitar colisões de valores de identidade.
  • Use COPY INTO para conjuntos de dados grandes. Para a migração em massa de tabelas grandes, COPY INTO com IDENTITY_INSERT ON proporciona um melhor desempenho do que instruções INSERT executadas linha a linha.
  • Valide a integridade referencial. Após a migração, verifique se os valores de chave estrangeira nas tabelas filhas referenciam linhas válidas nas tabelas principais.