Caricare tabelle delle dimensioni

Completato

Dopo la fase di staging dei dati delle dimensioni, è possibile caricarli nelle tabelle delle dimensioni usando SQL.

Uso di un'istruzione CREATE TABLE AS (CTAS)

Uno dei modi più semplici per caricare i dati in una nuova tabella delle dimensioni consiste nell'uso di un'espressione CREATE TABLE AS (CTAS), che crea una nuova tabella in base ai risultati di un'istruzione 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;

Nota

Quando si esegue un'istruzione CTAS, non è possibile usare IDENTITY per generare un valore intero univoco per la chiave sostitutiva. Pertanto, in questo esempio viene usata la funzione ROW_NUMBER per generare un numero incrementale per ogni riga dei risultati ordinati in base alla chiave business ProductID nei dati di staging.

È anche possibile caricare una combinazione di dati nuovi e aggiornati in una tabella delle dimensioni consiste nell'uso di un'istruzione CREATE TABLE AS (CTAS) (CREA NUOVA TABELLA COME) per creare una nuova tabella che UNISCA le righe esistenti dalla tabella delle dimensioni con i record nuovi e aggiornati dalla tabella di staging. Dopo aver creato la nuova tabella, è possibile eliminare o rinominare la tabella delle dimensioni corrente e rinominare la nuova tabella per sostituirla.

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;

Sebbene questa tecnica sia efficace per unire dati di dimensione nuovi ed esistenti, la mancanza di supporto per le colonne IDENTITY significa che è difficile generare una chiave surrogata.

Suggerimento

Per altre informazioni, vedere CREATE TABLE AS SELECT (CTAS) nella documentazione di Azure Synapse Analytics.

Uso di un'istruzione INSERT

Per caricare dati di staging in una tabella delle dimensioni esistente, è possibile usare un'istruzione INSERT. Questo approccio funziona se i dati di staging contengono solo record per le nuove entità di dimensione (e non aggiornamenti alle entità esistenti). Questo approccio è molto meno complesso della tecnica nell'ultima sezione, che richiede un UNION ALL e quindi ridenominazione degli oggetti tabella.

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

Nota

Supponendo che la tabella delle dimensioni DimCustomer sia definita con una colonna IDENTITY CustomerKey per la chiave sostitutiva, come descritto nell'unità precedente, la chiave verrà generata automaticamente e le colonne rimanenti verranno popolate con i valori recuperati dalla tabella di staging tramite la query SELECT.