在Azure数据仓库中创建实体化视图SQL错误



我得到错误:

无法对视图"Sample.wwi.SalesByTerritory"创建聚集索引"SalesByTerritorial",因为它不聚合结果。请考虑更改视图定义

我正在尝试在Azure SQL数据仓库(现在的Azure Synapse(中创建一个物化视图。我只是想创建一个带有sales表的视图,并从另一个表中获取地区名称和日期。以下是我正在使用的代码:

CREATE MATERIALIZED VIEW wwi.SalesByTerritory  
WITH (distribution = hash([Sale Key]))
AS
SELECT Sale.[Sale Key],
Sale.[Description],
Sale.[Quantity],
Sale.[Profit],
City.[Sales Territory],
SaleDate.[Date],
SaleDate.[Fiscal Month Label]
FROM wwi.fact_Sale Sale 
JOIN wwi.dimension_City City ON Sale.[City Key] = City.[City Key]
JOIN wwi.dimension_Date SaleDate ON Sale.[Invoice Date Key] = SaleDate.[Date]

这可能是因为Azure Synapse(DW(物化视图只有在存在聚合时才能工作(可能是为了确保某些列的唯一性(。本页讨论了需要以下两个条件中的任何一个才能成立:

  1. SELECT列表包含一个聚合函数
  2. GROUP BY用于Materialized视图定义,GROUP BY中的所有列都包含在SELECT列表中。GROUP BY子句中最多可以使用32列

根据Microsoft针对Azure Synapse(以前的Azure SQL数据仓库(的官方文档,物化视图定义的SELECT列表中需要聚合函数。支持的聚合包括MAX、MIN、AVG、COUNT、COUNT_BIG、SUM、VAR和STDEV。

此外,物化视图定义中的SELECT列表至少需要满足以下两个标准之一:

  • SELECT列表包含一个聚合函数
  • GROUP BY用于Materialized视图定义,GROUP BY中的所有列都包含在SELECT列表中。GROUP BY子句中最多可以使用32列

最新更新