負載維度資料表
暫存維度資料之後,您可以使用 SQL 來將其載入維度資料表。
使用 CREATE TABLE AS (CTAS) 陳述式
將資料載入新維度資料表的最簡單方式之一,就是使用 CREATE TABLE AS
(CTAS) 運算式。 此陳述式會根據 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;
注意
使用 CTAS 陳述式時,您無法使用 IDENTITY
來為代理索引鍵產生唯一的整數值,因此,此範例會使用 ROW_NUMBER
函數,為暫存資料中依 ProductID 商務索引鍵排序之結果中的每個資料列產生遞增資料列號碼。
您還可以使用 CREATE TABLE AS (CTAS) 陳述式將新資料和已更新資料的組合載入維度資料表,以建立一個新資料表,將維度資料表中的現有資料列與暫存表格中的新記錄和更新記錄進行 UNION。 建立新的資料表之後,您可以刪除或重新命名目前的維度資料表,並重新命名新的資料表來加以取代。
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;
雖然這項技術在合併新的和現有的維度資料方面有效,但缺乏 IDENTITY 資料行的支援表示很難產生 Surrogate 索引鍵。
提示
如需詳細資訊,請參閱 Azure Synapse Analytics 文件中的 CREATE TABLE AS SELECT (CTAS)。
使用 INSERT 陳述式
當您需要將暫存資料載入現有的維度資料表時,可以使用 INSERT
陳述式。 如果暫存資料只包含新維度實體的記錄 (不會更新到現有實體),則此方法就會有效。 這種方法比最後一節中的技術更複雜,這需要 UNION ALL
,然後重新命名資料表物件。
INSERT INTO dbo.DimCustomer
SELECT CustomerNo AS CustAltKey,
CustomerName,
EmailAddress,
Phone,
StreetAddress,
City,
PostalCode,
CountryRegion
FROM dbo.StageCustomers
注意
假設 DimCustomer 維度資料表是以代理索引鍵的 IDENTITY
CustomerKey 資料行所定義 (如上一個單元所述),該索引鍵將會自動產生,並透過 SELECT
查詢,使用從暫存資料表擷取的值來填入其餘資料行。