Таблицы измерений нагрузки

Завершено

Подготовив данные измерений, вы сможете загрузить их в таблицы измерений с помощью 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;

Примечание.

Вы не сможете использовать IDENTITY с оператором CTAS для создания уникального целочисленного значения суррогатного ключа, поэтому в нашем примере применяется функция 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 означает, что трудно создать суррогатный ключ.

Совет

Дополнительные сведения см. в CREATE TABLE AS SELECT (CTAS) документации по Azure Synapse Analytics.

Использование инструкции INSERT

Если вам нужно загрузить промежуточные данные в существующую таблицу измерений, можно использовать инструкцию INSERT. Такой подход работает, если промежуточные данные содержат только записи для новых сущностей измерения (без обновления существующих сущностей). Этот подход гораздо менее сложный, чем метод в последнем разделе, который требовал UNION ALL, а затем переименования объектов таблицы.

INSERT INTO dbo.DimCustomer
SELECT CustomerNo AS CustAltKey,
    CustomerName,
    EmailAddress,
    Phone,
    StreetAddress,
    City,
    PostalCode,
    CountryRegion
FROM dbo.StageCustomers

Примечание.

Если таблица измерений DimCustomer определена столбцом IDENTITYCustomerKey для суррогатного ключа (как описано в предыдущем уроке), ключ будет создан автоматически, а остальные столбцы будут заполнены с помощью значений, полученных из промежуточной таблицы SELECT запросом.