Ch06 OLAP
Yang Haoran 11/30/2021 DataData warehouseOLAP
# OLAP
# Online Analytic Processing
- 一种临时分析技术,不要求用户有programming language要求
- 用户可以自己建立分析,而不是局限于限定的报告

- Slice:restrict one dimension to a range of values

- Dice: restrict on several dimensions

- Roll up and drill down

- Pivot and rotate

- drill through: 回归原始表来获取更详细的信息

# Evaluation


OLAP cube的存储:如:一个cube(Table a[n][m][p])就是某天,某家商店,某个商品的销售数据集合
- relational:把一个cube view映射到star 或 snowflake schema,用户查询的时候要先把请求映射成sql,然后查询结果映射到cube structure,用户才能看见
- multidimensional:直接把数据存储到一个n维数组中,可以不用映射到star shema等中,但是可能会出现稀疏cube,并且需要query查询语法才能查询
使用relational storage:哪一个部分的商品的销量在某个月(用户选择)比上个月高出最多?
- 第一步:当月的销量

- 第二步:前一个月的销量

- 第三步:比较

- 第四步:展示

使用multidimensional arrays,会有high storage,high processing的问题,因为有conformed dimension
- measure: 是被totalled的东西,比如销量

- 计算存储的下标值:|Di|是维度的大小

- 使用Query查询Multidimensional arrays:
- 维度排列对查询性能很重要
- direct access 只要读5个
- sequencial access 要读10个
- 维度排列对查询性能很重要
- partitioning: 对某个区间的值感兴趣,可以把cube分割成多个subcube
- l 表示 low bound
- u 表示 upper bound
- 有几种定义partitioning的方式:第二种partitioning比如按照地区

- Sparse cubes:
- 先用partitioning分割成很多subcube,然后用索引结构,如B树 来存储稀疏的维度,用array来存储密集的维度,只指向存在的subcube
- Multidimensional Query Language: MDX
- where选的dimension不会出现在最终结果中https://blog.csdn.net/hc1017/article/details/108410110








- where内交外并

- 结果自动aggregate
- where选的dimension不会出现在最终结果中https://blog.csdn.net/hc1017/article/details/108410110
# OLAP data存储和处理:SQL只能用在relational database

- 服务端的存储方式的三种结构:注意方向

- MOLAP: 把数据extract过来之后进行处理,存储方式:multidimensional DBMS
- ROLAP:对数据进行query来获取结果,展示给用户, 存储方式:relational DBMS
- HOLAP:Hybird,对于详细的数据在relational DBMS中,对于聚合过的数据在multidimensional DBMS中
- 对比:

# OLAP 整合 sql
# roll up 操作


- roll up 和 grouping sets最后的结果都是一样的,表示方法不一样(不是随意组合,有顺序的!!)
- 1的结果是黄色的行
- 2的结果是每块蓝色的第一行
- 3的结果是把2的结果再aggregate一下,是每块蓝色的第二行
- 4的结果是把3的结果再aggregate一下,是每块蓝色的第三行
# Grouping关键字:Null值一般来自aggregation

- 为了区别null值是否来自源数据,可以使用grouping 关键字,多加两列,如果是aggregate的结果,那么值为1,不是的话值为0
# Cube关键字:把所有group的排列组合都算一遍,有2的n次方种



# window关键字:https://blog.csdn.net/xishining/article/details/116408314


定义:

order by:

window framing:有两种


- example:

rank,Percent_rank(6 个里面排第二名:(2-1)/(6-1)),CUME_DIST(6个里面排第二名:2/6)


dense_rank(), row_number()

聚合窗口函数:可以不用sum,用其他的函数


- 例:当前行与前面n行一起算平均值,n=2的话总共算3行

Filter: 在聚合之前对数据进行筛选
