Carregar tabelas de dimensões

Concluído

Depois de preparar os dados de dimensão, você pode carregá-los em tabelas de dimensões usando SQL.

Usando uma instrução CREATE TABLE AS (CTAS)

Uma das maneiras mais simples de carregar dados em uma nova tabela de dimensões é usar uma expressão CREATE TABLE AS (CTAS). Essa instrução cria uma tabela com base nos resultados de uma instrução SELECT.

CREATE TABLE dbo.DimProduct
WITH
(
    DISTRIBUTION = REPLICATE,
    CLUSTERED COLUMNSTORE INDEX
)
AS
SELECT ROW_NUMBER() OVER(ORDER BY ProdID) AS ProdKey,
    ProdID as ProdAltKey,
    ProductName,
    ProductCategory,
    Color,
    Size,
    ListPrice,
    Discontinued
FROM dbo.StageProduct;

Observação

Você não pode usar IDENTITY para gerar um valor inteiro exclusivo para a chave alternativa ao usar uma instrução CTAS, portanto, este exemplo usa a função ROW_NUMBER para gerar um número de linha incrementado para cada linha nos resultados ordenados pela chave de negócios ProductID nos dados preparados.

Carregue também uma combinação de dados novos e atualizados em uma tabela de dimensões usando uma instrução CTAS (CREATE TABLE AS) para criar uma tabela que faça a junção das linhas existentes da tabela de dimensões e dos registros novos e atualizados da tabela de preparo. Depois de criar a tabela, você pode excluir ou renomear a tabela de dimensões atual e renomear a nova tabela para substituí-la.

CREATE TABLE dbo.DimProductUpsert
WITH
(
    DISTRIBUTION = REPLICATE,
    CLUSTERED COLUMNSTORE INDEX
)
AS
-- New or updated rows
SELECT  stg.ProductID AS ProductBusinessKey,
        stg.ProductName,
        stg.ProductCategory,
        stg.Color,
        stg.Size,
        stg.ListPrice,
        stg.Discontinued
FROM    dbo.StageProduct AS stg
UNION ALL  
-- Existing rows
SELECT  dim.ProductBusinessKey,
        dim.ProductName,
        dim.ProductCategory,
        dim.Color,
        dim.Size,
        dim.ListPrice,
        dim.Discontinued
FROM    dbo.DimProduct AS dim
WHERE NOT EXISTS
(   SELECT  *
    FROM dbo.StageProduct AS stg
    WHERE stg.ProductId = dim.ProductBusinessKey
);

RENAME OBJECT dbo.DimProduct TO DimProductArchive;
RENAME OBJECT dbo.DimProductUpsert TO DimProduct;

Embora essa técnica seja eficaz na mesclagem de dados de dimensão novos e existentes, a falta de suporte para colunas IDENTITY significa que é difícil gerar uma chave alternativa.

Dica

Para saber mais, consulte CREATE TABLE AS SELECT (CTAS) na documentação do Azure Synapse Analytics.

Usando uma instrução INSERT

Quando precisar carregar dados preparados em uma tabela de dimensões existente, você poderá usar uma instrução INSERT. Essa abordagem funcionará se os dados preparados contiverem apenas registros de novas entidades de dimensão (e não atualizações de entidades existentes). Essa abordagem é muito menos complicada do que a técnica mostrada na última seção, que exigia um UNION ALL e, em seguida, renomeava os objetos de tabela.

INSERT INTO dbo.DimCustomer
SELECT CustomerNo AS CustAltKey,
    CustomerName,
    EmailAddress,
    Phone,
    StreetAddress,
    City,
    PostalCode,
    CountryRegion
FROM dbo.StageCustomers

Observação

Supondo que a tabela de dimensões DimCustomer seja definida com uma coluna IDENTITYCustomerKey para a chave alternativa (conforme descrito na unidade anterior), a chave será gerada automaticamente e as colunas restantes serão preenchidas usando os valores recuperados da tabela de preparo pela consulta SELECT.