Dimensietabellen laden
Nadat u dimensiegegevens hebt gefaseerd, kunt u deze laden in dimensietabellen met behulp van SQL.
Een INSTRUCTIE CREATE TABLE AS (CTAS) gebruiken
Een van de eenvoudigste manieren om gegevens in een nieuwe dimensietabel te laden, is door een CREATE TABLE AS
(CTAS)-expressie te gebruiken. Met deze instructie maakt u een nieuwe tabel op basis van de resultaten van een SELECT-instructie.
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;
Notitie
U kunt geen IDENTITY
unieke geheel getalwaarde genereren voor de surrogaatsleutel wanneer u een CTAS-instructie gebruikt. In dit voorbeeld wordt dus de ROW_NUMBER
functie gebruikt om een oplopend rijnummer te genereren voor elke rij in de resultaten die zijn geordend door de bedrijfssleutel ProductID in de gefaseerde gegevens.
U kunt ook een combinatie van nieuwe en bijgewerkte gegevens in een dimensietabel laden met behulp van een CTAS-instructie (CREATE TABLE AS) om een nieuwe tabel te maken waarmee unio's de bestaande rijen uit de dimensietabel worden gemaakt met de nieuwe en bijgewerkte records uit de faseringstabel. Nadat u de nieuwe tabel hebt gemaakt, kunt u de huidige dimensietabel verwijderen of de naam ervan wijzigen en de naam van de nieuwe tabel wijzigen om deze te vervangen.
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;
Hoewel deze techniek effectief is bij het samenvoegen van nieuwe en bestaande dimensiegegevens, betekent het ontbreken van ondersteuning voor IDENTITY-kolommen dat het moeilijk is om een surrogaatsleutel te genereren.
Tip
Zie CREATE TABLE AS SELECT (CTAS) in de documentatie van Azure Synapse Analytics voor meer informatie.
Een INSERT-instructie gebruiken
Wanneer u gefaseerde gegevens in een bestaande dimensietabel wilt laden, kunt u een INSERT
instructie gebruiken. Deze aanpak werkt als de gefaseerde gegevens alleen records voor nieuwe dimensieentiteiten bevatten (geen updates voor bestaande entiteiten). Deze benadering is veel minder ingewikkeld dan de techniek in de laatste sectie, waarvoor een UNION ALL
en vervolgens de naam van tabelobjecten is gewijzigd.
INSERT INTO dbo.DimCustomer
SELECT CustomerNo AS CustAltKey,
CustomerName,
EmailAddress,
Phone,
StreetAddress,
City,
PostalCode,
CountryRegion
FROM dbo.StageCustomers
Notitie
Ervan uitgaande dat de dimensietabel DimCustomer is gedefinieerd met een IDENTITY
CustomerKey-kolom voor de surrogaatsleutel (zoals beschreven in de vorige les), wordt de sleutel automatisch gegenereerd en worden de resterende kolommen ingevuld met behulp van de waarden die door de SELECT
query zijn opgehaald uit de faseringstabel.