云端数据仓库构建与语义层解析
立即解锁
发布时间: 2025-08-24 00:38:18 阅读量: 1 订阅数: 2 


Azure数据与AI架构设计指南
### 云端数据仓库构建与语义层解析
#### 1. 数据仓库基础与类型转变
传统的数据仓库通常在本地使用 SQL 服务器中的数据库构建。迁移到云端后,可选择 Azure VMs 上的 SQL 服务器(基础设施即服务,IaaS)、Azure SQL 数据库或托管实例(平台即服务,PaaS) 。不过,数据仓库用于分析目的,与用于操作目的的数据库有不同需求:
- 操作数据库的查询频繁且简单(小读小写),而分析数据仓库的查询不频繁但复杂(常含大量连接和聚合)。
- 数据仓库通常是非易失性的,会尽可能长时间存储大量数据,使用 SQL 数据库成本可能很高,因此需要更廉价的存储层。
- 数据仓库中所有数据都有价值和分析意义,无论其结构如何,而 SQL 数据库只能存储结构化数据。
因此,现代数据仓库应运而生,常使用分布式计算引擎(如 Spark 集群或 SQL 池),并以数据湖作为存储层,基于数据湖构建的仓库称为湖仓(lakehouse)。Azure Data Lake Storage Gen2(ADLS Gen2)结合了 Azure Blob 存储(Azure 中最便宜的存储层)和第一代 Azure Data Lake 的分层命名空间,可存储非结构化(如图像、文本)和半结构化(如 CSV、JSON)文件。
#### 2. 使用 Azure SQL Database 构建传统数据仓库
数据仓库通常分为三层:
- **暂存层(Staging Layer)**:是来自各种源系统的传入数据的初始着陆区,主要用于以原始形式存储原始或最少处理的数据,可作为进一步处理前的临时存储区,也可作为源数据的备份。
- **富集层(Enriched Layer)**:是中间层,对数据进行处理、转换和添加额外信息,包括数据清理、质量检查、集成、合并以及应用业务规则或计算,有助于提高数据质量、一致性和可用性,再加载到精选层。
- **精选层(Curated Layer)**:也称为展示层,将数据结构转换为面向业务的流程,包括数据建模、聚合和汇总,以便进行高效查询和分析。
在传统数据仓库中,这些层是数据库的架构,可使用以下 SQL 语句创建架构:
```sql
CREATE SCHEMA stg;
GO
CREATE SCHEMA enr;
GO
CREATE SCHEMA cur;
GO
```
接下来为暂存层创建表,例如将一个系统的客户信息与另一个系统的客户地址数据合并。可使用 Azure Data Factory 将数据从源系统摄入到 Azure SQL 数据库数据仓库。在 SQL Server 中,通常使用 SQL Server Integration Services(SSIS)包完成此操作。在 Azure SQL 托管实例中,如果源系统是同一实例中的数据库,可使用跨数据库查询:
```sql
CREATE TABLE stg.System1DimCustomer
(
CustomerKey INT IDENTITY NOT NULL,
CustomerName NVARCHAR(80) NOT NULL,
EmailAddress NVARCHAR(50) NULL,
Phone NVARCHAR(25) NULL
);
GO
CREATE TABLE stg.System2DimCustomer
(
CustomerKey INT IDENTITY NOT NULL,
StreetAddress NVARCHAR(100),
City NVARCHAR(20),
PostalCode NVARCHAR(10),
CountryRegion NVARCHAR(20)
);
GO
```
在富集层,将这两个表合并形成数据仓库的完整客户维度表:
```sql
SELECT S1C.CustomerKey,
S1C.CustomerName,
S1C.EmailAddress,
S1C.Phone,
S2C.StreetAddress,
S2C.City,
S2C.PostalCode,
S2C.CountryRegion
INTO enr.DimCustomer
FROM stg.System1DimCustomer AS S1C
FULL OUTER JOIN stg.System2DimCustomer AS S2C
ON S1C.CustomerKey = S2C.CustomerKey
```
在富集层还会处理数据质量问题和不一致性。在精选层,可按不同财政年度和产品组聚合销售统计数据:
```sql
SELECT date.FiscalYear,
product.ProductGroup,
sales.Revenue
INTO cur.FactYearSales
FROM enr.FactSales AS sales
LEFT JOIN enr.DimDate AS date
ON date.DateKey = sales.DateKey
LEFT JOIN enr.DimProduct AS product
ON product.ProductKey = sales.ProductKey
GROUP BY date.FiscalYear, product.ProductGroup
```
#### 3. 使用 Synapse 无服务器 SQL 池构建现代数据仓库
Synapse 是基于数据湖(ADLS Gen2)构建的现代数据仓库示例,即湖仓。其理念是分离存储和
0
0
复制全文
相关推荐









