Načtení tabulek dimenzí
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
.