Carga de tablas de dimensiones

Completado

Después de almacenar los datos de dimensiones de almacenamiento provisional, puede cargarlos en tablas de dimensiones mediante SQL.

Uso de una instrucción CREATE TABLE AS (CTAS)

Una de las formas más sencillas de cargar datos en una nueva tabla de dimensiones es usar una expresión CREATE TABLE AS (CTAS). Esta instrucción crea una nueva tabla en función de los resultados de una instrucción 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;

Nota

No se puede usar IDENTITY para generar un valor entero único para la clave suplente cuando se utiliza una instrucción CTAS, por lo que en este ejemplo se usa la función ROW_NUMBER para generar un número de fila incremental para cada fila de los resultados ordenados por la clave empresarial ProductID en los datos almacenados provisionalmente.

También puede cargar una combinación de datos nuevos y actualizados en una tabla de dimensiones mediante una instrucción CREATE TABLE AS (CTAS) para crear una nueva tabla que UNA las filas existentes de la tabla de dimensiones y los registros nuevos y actualizados de la tabla de almacenamiento provisional. Después de crear la nueva tabla, puede eliminar o cambiar el nombre de la tabla de dimensiones actual y cambiar el nombre de la nueva tabla para reemplazarla.

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;

Aunque esta técnica es eficaz para combinar datos de dimensión nuevos y existentes, la falta de compatibilidad con las columnas IDENTITY implica que sea difícil generar una clave suplente.

Sugerencia

Para más información, consulte CREATE TABLE AS SELECT (CTAS) en la documentación de Azure Synapse Analytics.

Uso de una instrucción INSERT

Cuando necesite cargar datos almacenados provisionalmente en una tabla de dimensiones existente, puede usar una instrucción INSERT. Este enfoque funciona si los datos almacenados provisionalmente solo contienen registros para nuevas entidades de dimensiones (no actualizaciones de entidades existentes). Este enfoque es mucho menos complicado que la técnica de la última sección, que requería un elemento UNION ALL y, a continuación, cambiar el nombre de los objetos de tabla.

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

Nota

Suponiendo que la tabla de dimensiones DimCustomer se defina con una columna IDENTITY CustomerKey para la clave suplente (como se describe en la unidad anterior), la clave se generará automáticamente y las columnas restantes se rellenarán con los valores recuperados de la tabla de almacenamiento provisional para la consulta SELECT.