ディメンション テーブルを読み込む

完了

ディメンション データをステージングした後は、SQL を使ってそれをディメンション テーブルに読み込むことができます。

CREATE TABLE AS (CTAS) ステートメントの使用

新しいディメンション テーブルにデータを読み込む最も簡単な方法の 1 つは、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) ステートメントを使用して、ディメンション テーブルの既存の行と、ステージング テーブルの新しいレコードと更新されたレコードを結合する新しいテーブルを作成することによって、新しいデータと更新されたデータの組み合わせをディメンション テーブルに読み込むこともできます。 新しいテーブルを作成した後、現在のディメンション テーブルを削除するか名前を変更し、新しいテーブルの名前を変更して置き換えることができます。

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 列のサポートがないため、代理キーを生成することは困難です。

ヒント

詳しくは、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

Note

DimCustomer ディメンション テーブルが、(前のユニットで説明したように) 代理キーとして IDENTITY CustomerKey 列を使って定義されているとすると、キーは自動的に生成され、残りの列は SELECT クエリによってステージング テーブルから取得された値を使って設定されます。