Načtení tabulek dimenzí

Dokončeno

Po přípravě dat dimenzí je můžete načíst do tabulek dimenzí pomocí SQL.

Použití příkazu CREATE TABLE AS (CTAS)

Jedním z nejjednodušších způsobů načtení dat do nové tabulky dimenzí je použití výrazu CREATE TABLE AS (CTAS). Tento příkaz vytvoří novou tabulku na základě výsledků příkazu 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;

Poznámka:

Při použití příkazu CTAS nemůžete použít IDENTITY k vygenerování jedinečné celočíselné hodnoty náhradního klíče, takže tento příklad používá ROW_NUMBER funkci k vygenerování čísla řádku pro každý řádek ve výsledcích seřazených obchodním klíčem ProductID ve fázovaných datech.

Pomocí příkazu CREATE TABLE AS (CTAS) můžete také načíst kombinaci nových a aktualizovaných dat do tabulky dimenzí a vytvořit novou tabulku, která UNION existující řádky z tabulky dimenzí s novými a aktualizovanými záznamy z pracovní tabulky. Po vytvoření nové tabulky můžete aktuální tabulku dimenzí odstranit nebo přejmenovat a novou tabulku přejmenovat, aby ji nahradila.

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;

I když je tato technika účinná při slučování nových a existujících dat dimenzí, nedostatek podpory sloupců IDENTITY znamená, že je obtížné vygenerovat náhradní klíč.

Tip

Další informace najdete v tématu CREATE TABLE AS SELECT (CTAS) v dokumentaci k Azure Synapse Analytics.

Použití příkazu INSERT

Pokud potřebujete načíst fázovaná data do existující tabulky dimenzí, můžete použít INSERT příkaz. Tento přístup funguje, pokud fázovaná data obsahují pouze záznamy pro nové entity dimenzí (ne aktualizace existujících entit). Tento přístup je mnohem méně komplikovaný než technika v poslední části, která vyžadovala UNION ALL objekty tabulky a následné přejmenování objektů tabulky.

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

Poznámka:

Za předpokladu, že je tabulka dimenzí DimCustomer definovaná sloupcem IDENTITY CustomerKey pro náhradní klíč (jak je popsáno v předchozí lekci), klíč se vygeneruje automaticky a zbývající sloupce se vyplní pomocí hodnot načtených z pracovní tabulky dotazem SELECT .