Laden von Dimensionstabellen

Abgeschlossen

Nach dem Stagen von Dimensionsdaten können Sie diese mithilfe von SQL in Dimensionstabellen laden.

Verwenden einer CREATE TABLE AS-Anweisung (CTAS)

Eine der einfachsten Möglichkeiten, Daten in eine neue Dimensionstabelle zu laden, ist die Verwendung eines CREATE TABLE AS-Ausdrucks (CTAS). Diese Anweisung erstellt eine neue Tabelle basierend auf den Ergebnissen einer SELECT-Anweisung.

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;

Hinweis

Sie können bei Verwendung einer CTAS-Anweisung IDENTITY nicht dazu nutzen, einen eindeutigen ganzzahligen Wert für den Ersatzschlüssel zu generieren. Daher wird in diesem Beispiel die Funktion ROW_NUMBER verwendet, um eine inkrementelle Zeilennummer für jede Zeile in den Ergebnissen zu generieren, die nach der ProductID des Geschäftsschlüssels in den gestageten Daten geordnet sind.

Sie können auch eine Kombination aus neuen und aktualisierten Daten in eine Dimensionstabelle laden, indem Sie eine CTAS-Anweisung (CREATE TABLE AS) verwenden, um eine neue Tabelle zu erstellen, die die vorhandenen Zeilen aus der Dimensionstabelle mit den neuen und aktualisierten Datensätzen aus der Stagingtabelle vereint. Nachdem Sie die neue Tabelle erstellt haben, können Sie die aktuelle Dimensionstabelle löschen oder umbenennen und die neue Tabelle umbenennen, um sie zu ersetzen.

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;

Diese Methode ist zwar beim Mergen neuer und vorhandener Dimensionsdaten effektiv, mangels Unterstützung für IDENTITY-Spalten ist es jedoch schwierig, einen Ersatzschlüssel zu generieren.

Tipp

Weitere Informationen finden Sie unter CREATE TABLE AS SELECT (CTAS) in der Azure Synapse Analytics-Dokumentation.

Verwenden einer INSERT-Anweisung

Wenn Sie gestagete Daten in eine vorhandene Dimensionstabelle laden müssen, können Sie eine INSERT-Anweisung verwenden. Dieser Ansatz funktioniert, wenn die gestageten Daten nur Datensätze für neue Dimensionsentitäten enthalten (nicht für Aktualisierungen vorhandener Entitäten). Dieser Ansatz ist viel weniger kompliziert als die Methode im letzten Abschnitt, für die ein UNION ALL-Tabellenobjekt erforderlich war und Tabellenobjekte umbenannt werden mussten.

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

Hinweis

Angenommen, die Dimensionstabelle DimCustomer ist mit einer CustomerKey-Spalte IDENTITY für den Surrogatschlüssel definiert (wie in der vorherigen Lerneinheit beschrieben). Dann wird der Schlüssel automatisch generiert, und die übrigen Spalten werden mit den Werten aufgefüllt, die über die Abfrage SELECT aus der Stagingtabelle abgerufen werden.