Laden von Dimensionstabellen
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.