> ## Documentation Index
> Fetch the complete documentation index at: https://base.bangwu.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Data warehouse

> Course notes on data warehousing covering OLTP vs OLAP, ETL pipeline design, star and snowflake schema modeling, and multidimensional OLAP operations.

<details>
  <summary>写在前面</summary>
  数据仓库按照老师上课的顺序来，这个顺序也是比较合理的  PS：每章的引言部分对理解章节很重要

  ![explorer\_OWvhwW5LOW](https://cdn.bangwu.top/img/202312231941201.webp)
</details>

# 一、从数据库到数据仓库

<details>
  <summary>引言👈</summary>

  <p>
    图灵奖获得者吉姆.格雷提出了一个经验定律，即
    网络环境下每18个月产生的数据量等于有史以来
    的数据量之和，仅仅依靠数据库管理系统的查询
    检索机制和统计分析方法，已经远远不能满足实
    际需求。
  </p>

  <p>
    如何有效地管理和利用数据库中的海量数据，以
    及如何发现其中潜在的知识，更好的发挥这些数
    据的潜能，数据仓库和数据挖掘技术应运而生。
  </p>
</details>

## 1.1数据仓库(Data Warehouse)产生的原因

数据处理大致可以分为两类：

* 操作型处理【也称`联机事务处理`（Online Transaction Process，**OLTP**），是数据库系统的主要应用。例如索引、日志、备份等技术】
* 分析型处理【对数据进行`统计分析`，得出有用的信息作为决策的依据和基础。就是有目的的进行查询等操作】

数据库系统的局限性：

1. `数据分散`【只处理本部门业务的数据，不是集成的】
2. `“蜘蛛网”`问题【对数据进行抽取式的集成，是数据访问相当复杂】
3. `数据不一致`【蜘蛛网问题导致了多个应用间的数据不一致。可以理解为每个抽取步骤的时间、内容不同】
4. `数据动态集成问题`【每次分析都需要集成，效率低】
5. 历史数据问题
6. 数据综合问题  （5、6两点不重要，且这部分比较繁琐）

**数据仓库的本质：**

单就其是数据的存储容器这一点而言，数据仓库与数据库并没有本质的区别。而且在更多的时候，是将数据仓库作为一个数据库应用系统来看待的。数据仓库是为了构建新的分析型处理环境而出现的一种数据存储和组织技术。👇

![chrome\_YpczEZjyRA](https://cdn.bangwu.top/img/202312241504448.webp)

## 1.2数据仓库的基本概念

定义：数据仓库是`面向主题的`、`集成的`、`不可更新的`、`随时间不断变化的`数据集合。**【必考】**

主题与`面向主题`：

* 主题是抽象概念，是在较高层次上将企业信息系统中的数据综合、归类并进行分析利用的抽象。
* 面向主题是相对于传统数据库的面向应用而言的。【面向主题就是围绕来进行的，例如建立“商品销售”主题，要抽取相关数据】

【例如，商品的推荐系统就是基于数据仓库设计的，商品的信息就是数据仓库所面向的主题。】

剩下的三个特征中，`集成的`是字面意思，从不同数据源来抽取、清洗

`不可更新的`：相对说法，是指不对原始的数据进行操作【操作仅限于初始导入和记录查询，不进行删除和修改】

`随时间不断变化的`：数据会不断从来源处更新，重新综合。

PS: 数据库 + **有目的的SELECT** = 数据仓库

## 1.3数据仓库的体系结构

数据仓库的结构包含了4部分，分别是`数据源`、`数据存储及管理`、`服务器`和`前端工具`。

![chrome\_2PzvDt7FUX](https://cdn.bangwu.top/img/202312241540515.webp)

> ETL和ELT：从上图可以看出两者的区别和适用情况。【一个是先T(转换)，一个是后T】

元数据：是数据仓库中所有描述性信息，分为商业元数据和技术元数据。

数据仓库和数据集市的比较：【数据集市数据粒度大】

| 对比项  | 数据仓库        | 数据集市             |
| ---- | ----------- | ---------------- |
| 范围   | 企业级         | 部门级              |
| 主题   | `企业主题`      | `部门或特殊的分析主题`     |
| 数据粒度 | 最小的粒度       | 较大的粒度            |
| 数据结构 | 规范化结构       | 星型模式、雪花型模式、或两者结合 |
| 历史数据 | 大量的历史数据     | 适度的历史数据          |
| 优化   | 处理海量数据、数据检索 | 便于访问和分析、快速分析     |

# 二、操作数据存储

<details>
  <summary>引言👈</summary>

  <p>
    DB~~DW结构解决了企业操作型数据和分析型数据
    的处理问题。然而，这种两层结构并不能有效的处
    理企业中所有的数据处理要求，为了解决多层次的
    数据处理需求，在DB~~DW两层体系中增加一个新
    的层次ODS，形成DB~~ODS~~DW的三层体系结构。
  </p>

  <p>
    ODS作为中间层，适合于辅助企业完成日常决策
    的数据分析处理。
  </p>
</details>

## 2.1ODS

操作性数据(Operational Data Store)，简称ODS：面向主题的（Subject Oriented）、集成的（Integrated）、细节的（Detailed）、可更新的 （Volatile）、当前的（Current valued）或接近当前的数据集合， 用于支持全局业务处理和日常管理控制操作。【是一种数据环境，适应某种层次的应用需求；仍属于操作型环境 （Operational Environment）】

## 2.2DB~~ODS~~DW体系

![chrome\_VbGNl0slqU](https://cdn.bangwu.top/img/chrome_VbGNl0slqU.webp)

【ODS是动态数据，实时更新的，但ODS中只存放当前和接近当前的细节数据，数据量较少】可以理解为DB经过实时转换后生成ODS，ODS再写入DW，充当“承上启下”的角色。

> ODS可以分为：同步ODS、即时ODS、延时ODS。【字面意思】

# 三、数据仓库中的数据

<details>
  <summary>引言👈</summary>

  <p>
    数据仓库中的数据都是按照一定的方式存储的，例如考虑到粒度的问题，以及数据组织、追加，元数据的作用等都是数据仓库里面数据的基本概念。数据仓库的组织形式直接影响到数据的有效性和可靠性。
  </p>
</details>

## 3.1数据仓库中的数据组织

> 数据仓库中存储着两类数据，业务数据和元数据。

**数据粒度**：粒度是指数据仓库的数据单位中保存数据的细化或综合程度的级别。【在数据仓库中的数据粒度与查询的详细程度之间要做 出权衡。 】

**数据分割**：数据分割是指将数据`分割到各自的物理单元`以便能够独立处理，提高数据处理效率。【垂直分割和水平分割】

数据分割后的数据单元称为分片，分片数据没有交叉。【数据分割有点确实很多，但是可能导致数据分配的不平衡】

数据分割时需要注意：分割均匀、用户的查询需求、数据的汇总方式。

> 数据粒度和数据分割设计得好，几乎所有的数据仓库设计和实现的问题都将迎刃而解。

## 3.2数据仓库中数据的追加

> 当数据仓库的数据初装完成以后，再向数据仓库输入（导入）数据的过程称为`数据追加`。

> 如何能够确切地感知究竟哪些数据是上一次追加过程以后新生成的，这项工作称为`变化数据的捕捉`。

**数据追加过程中实现变化数据的捕捉的方法**：

1. 时标【加上更新数据时的时间】
2. DELTA文件【A + DELTA A = A‘    DELTA是用来记录所改变的数据内容】
3. 前后快照文件【字面意思。 `快照`：**数据存储的某一时刻的状态记录**】
4. 日志文件

## 3.3数据仓库中的元数据

> `元数据`：是关于数据的数据。【元数据描述了数据的结构、来源、抽取和转换规则、存储，描述操纵数据的进程和应用程序的结构、功能等。】

元数据的**作用**：提供数据资源的全面指南。【在数据仓库中，元数据定义了数据仓库中的许多对象——表、列、查询、商业规则或是数据仓库内部的数据转移。】

> 元数据是数据仓库的重要构件，是数据仓库的指示图（roadmap）。

*ODS元数据和DW元数据均属于数据仓库元数据，是数据仓库系统的核心元数据。*

![wpspdf\_xLLu4UM8MS](https://cdn.bangwu.top/img/202312241732328.webp)

PS：本章节中含有`元数据分类`部分的知识没有进行说明，认为繁琐且用处不大，不是重点部分。

# 四、OLAP的概述及模型

<details>
  <summary>引言👈</summary>

  <p>
    关系数据库满足了联机事务处理(OLTP)的要求，但分析型应用无法适应，
    数据分析技术是在一定的数据基础之上进行分析的方式和方法，通常包括联机分析处理和数据挖掘等内容。
  </p>

  <p>
    数据分析执术不一定非要建立在数据仓库基础上，但有了数据仓库之后，数据分析的能力和效率将大大提高。
  </p>
</details>

## 4.1OLAP技术概述

> 联机分析处理（OLAP）是一种软件技术，可用于从不同的角度分析业务数据。【组织收集和存储来自多个数据源的数据，例如网站、应用程序、智能电表和内部系统。OLAP 将这些数据合并分为几类，为战略规划提供切实可行的见解。】

OLAP特点：快速、可分析、多维、及时。

> **OLAP与OLTP的区别**

联机分析处理 (OLAP) 系统的主要用途是分析聚合数据，而联机事务处理 (OLTP) 系统的主要用途是处理数据库事务。

【您使用 OLAP 系统来生成报告、执行复杂的数据分析和确定趋势。相比之下，您使用 OLTP 系统来处理订单、更新库存和管理客户账户。👇】

| 特征     | OLAP（Online Analytical Processing） | OLTP（Online Transaction Processing） |
| ------ | ---------------------------------- | ----------------------------------- |
| 目标     | 决策和分析                              | 日常交易处理                              |
| 数据操作方式 | 复杂查询和分析                            | 快速事务性数据处理                           |
| 数据模型   | 多维数据模型                             | 规范化的数据模型                            |
| 性能要求   | 高查询性能，相对低实时性                       | 高事务处理速度，相对高实时性                      |
| 数据量    | 大量历史数据                             | 大量短期交易数据                            |

## 4.2多维数据模型

多维数据模型的**基本概念**：

* 多维数据模型又称多维概念视图，是一个多维空间，通常用`Cube`来表示
* 多维数据模型用多维数组来表示，可以更加直观地表现现实中的复杂关系
* 多维数据模型基本组成：维、维成员、维层、度量（变量、指标）

【维成员：维的一个取值。】

> **星型模型、雪花型结构**【这两个不做太多解释，可以看[这篇文章](https://zhuanlan.zhihu.com/p/139656253)】

> **常用的多维分析操作**

1. *聚集*：多维分析的基础。【对数据进行综合，SUM，RANK，AVG，COUNT等】
2. 切片、切块、旋转、下钻、上卷【都是对Cube操作】
3. 维操作、属性操作

多维查询语言MDX（Mutiply Dimension Expression）：

```sql theme={"theme":{"light":"github-light","dark":"github-dark"}}
SELECT
 {[Region].[City].&[上海],[Region].[City].&[北京]}
ON Colums,
	[Time].[Month].[1] ON Rows
From [Mkas]
```

# 五、数据立方的存储、预计算和缩减

这章好像是概念章节，没有特意强调，接下来的实操也没有涉及到相关的知识，而且PDF中欠缺本部分内容。暂定不考。

不放心的可以去看[课件](https://alist.bangwu.top/%E9%98%BF%E9%87%8C%E4%BA%91-%E6%A3%92%E6%97%A0/%E8%AF%BE%E4%BB%B6/%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93/%E7%AC%AC%E4%BA%8C%E7%AF%87%E8%81%94%E6%9C%BA%E5%88%86%E6%9E%90%E5%A4%84%E7%90%86%E6%8A%80%E6%9C%AF.pdf)

# 六、数据仓库的设计

<details>
  <summary>引言👈</summary>

  <p>
    数据仓库是一个环境，而不是一件产品
  </p>

  <p>
    数据仓库技术是为了有效地吧操作数据集成到统一的环境中以提供决策型数据访问的各种技术和模块的总称。
  </p>

  <p>
    相对而言，数据仓库更加是一种思想，其基本粒子就是对数据库或者类似环境的“快照”，一个快照就是对一个时间点的截面，这样使得是数据仓库具有天然的历史属性，方便进行数据的挖掘处理。
  </p>
</details>

> 数据仓库建设的目标

* 数据仓库必须使组织机构的信息变得容易存取
* 数据仓库必须一致地展示组织机构的信息
* 数据仓库必须具有广泛的适应性和便于修该

> 数据仓库设计方法概述

1. DW设计与DB设计方法比较
   1. DB
      * SDLC（System Development Life Cycle） **应用需求驱动**
   2. DW
      * CLDS **数据驱动+需求驱动**

![wpspdf\_6NRGwQAGCk](https://cdn.bangwu.top/img/202312242330031.webp)

2. 明确需求
3. 设计的原则【坚持“以数据驱动为中心，数据驱动和需求驱动相结合”的原则】
4. 实际工程中的设计方法【确定范围与项目定义、应用系统及其数据的调研与分析、建设方法】
5. 数据驱动系统设计方法的基本思路
6. DW设计的三级数据模型【概念模型(ER图)=>逻辑模型=>物理模型】

![wpspdf\_5u8NSPRgp0](https://cdn.bangwu.top/img/202312251307477.webp)

> 剩下的基本就是实操方向的知识了，涉及的有[`窗口函数`](https://alist.bangwu.top/%E8%93%9D%E5%A5%8F%E4%BA%91-%E6%A3%92%E6%97%A0/%E7%AA%97%E5%8F%A3%E5%87%BD%E6%95%B0.pdf)、[`RFM`](https://alist.bangwu.top/%E9%98%BF%E9%87%8C%E4%BA%91-%E6%A3%92%E6%97%A0/%E4%B8%B4%E6%97%B6%E5%A4%87%E4%BB%BD/%E5%AE%9E%E9%AA%8C3-RFM%E5%88%86%E6%9E%90.pdf)、[`SSIS`](https://alist.bangwu.top/%E9%98%BF%E9%87%8C%E4%BA%91-%E6%A3%92%E6%97%A0/%E4%B8%B4%E6%97%B6%E5%A4%87%E4%BB%BD/SQL%20Server%20BI%EF%BC%881%EF%BC%89-SSIS%E6%93%8D%E4%BD%9C.pdf)、[`SSAS`](https://alist.bangwu.top/%E9%98%BF%E9%87%8C%E4%BA%91-%E6%A3%92%E6%97%A0/%E4%B8%B4%E6%97%B6%E5%A4%87%E4%BB%BD/SQL%20Server%20BI%EF%BC%882%EF%BC%89-SSAS%E6%93%8D%E4%BD%9C.pdf)、[`MDX`](https://alist.bangwu.top/%E9%98%BF%E9%87%8C%E4%BA%91-%E6%A3%92%E6%97%A0/%E4%B8%B4%E6%97%B6%E5%A4%87%E4%BB%BD/SQL%20Server%20BI%EF%BC%883%EF%BC%89-MDX.pdf)。这几个部分由于涉及到实操方面且是重点，就去看课件吧。最后提供一个[SQL代码](https://alist.bangwu.top/%E6%9C%AC%E6%9C%BA/SQL%E6%96%87%E6%A1%A3.sql)，用来检测语法知识。(上课时操作写的代码)
