Data Warehouse简介与入门

正巧大后天就要考Data Warehouse(数据仓库)了,就凭借自己写一点基础的知识权当做一个考前的复习作用,以及作为一个基础的入门介绍吧


1. Motivation:

首先要明确为啥需要data warehouse,以及究竟什么是data warehouse。

没有数据仓库时,我们需要直接从业务数据库中取数据来做分析。业务数据库主要是为业务操作服务,虽然可以用于分析,但需要做很多额外的调整,在我看来,主要有以下几个问题:结构复杂,数据脏乱,难以理解,缺少历史,大规模查询缓慢。(OLTP) Online Transaction Processing

上面的问题,都可以通过一个建设良好的数据仓库来解决。

业务数据库是面向操作的,主要服务于业务产品和开发。而数据仓库则是面向分析的,主要服务于我们分析人员。评价数据仓库做的好不好,就看我们分析师用得爽不爽。因此,数据仓库从产品设计开始,就一直是站在分析师的立场上考虑的,致力于解决使用业务数据进行分析带来的种种弊端。(OLAP) Online Analytical Processing

What is data warehouse:

拿William H.Inmon’s 话来定义:

Data warehouse is subject-oriented, time varying, integrated, non volatile collection of data in support of management's decision analyse.

Subject-oriented: DW organised by several subject determined by requirements. 这句话我所理解的是因为数据仓库本书是没有数据的,所有数据来源都是来自不同的数据库,那么在建立的时候数据来源自然就由用户query时的需求所决定

integrated: the content results from the integration of data from multiple sources

time-varying: keeps track of data changes so that reports show evolution over time

non-volatile: new data can be added, but data is±never deleted nor updated. 实际上这也是olap和oltp主要的区别之一

现在市面上可以使用数据仓库主要通过以下产品:

Oracle,SAP,IBM,SQL server,teradata

open resource的有:

talend

下面这张图就详解的介绍了olap和oltp的区别:

可以简单的把oltp理解成原始的数据库,olap理解成数据仓库

2.数据仓库的基本架构和基本组成与模型:


由于传统的数据库中用的一般都是3NF的表,在BI显得过于复杂,故需要新的模型来支持data warehouse中的data

我们实际上利用Multi-dimensional model,由于它比较简单易懂,就是根据多个dimension将多个关系组成一个立方体(维度可以大于等于3)的形式。

在multi-dimensional model中的基本组成成分由下列几种:

Cube:指组成的那个立方体

Cell:交错的小方格

Fact:不为空的cell

Measure:不为空的cell的数值

Dimension:简单的讲就是组成cube的各个表

Facts:has a granularity = level of detail

主要分为两种fact:event(针对某个的时间或者地点),snapshot(强调在一定的时期范围内)

Dimension:是有层次之分的,比如有一个表中包含(Paris,Berlin,Lyon,London)可以对其做rollup使之聚类成为country层次的dimension, 本次均假设是线性的dimension,有个最大的层次ALL

Measure:有三种measure: additive 可加的意思上该measure在任何dimension均可相加并且有实际意义,semi-additive在某些维度可以相加有实际意义,non-additive 在任何维度均不可相加

对于multi-dimensional model有以下几种可能的操作形式:

ROLLUP(Cube,Dimension to Level, AggFunction(Measure)) 即刚才所说的向上聚合的过程

DRILLDOWN(Cube,Dimension to Level) 从高层次扩展到detail的过程

SLICE(Cube,Dimension, Level=value)

DICE(Cube,), with: boolean combination


3.数据仓库的基本存储形式

主要用三种形式来表达之前提到过的cube:

1.ROLAP:用relational database来存储数据 

ROLAP可以较好的支持现有的数据库,利用relational database来存储cube,可以fit memory,只存储非空的cell,可以支持语义,比较容易维护

2.MOLAP:用array来存储数据

比较容易得到某个特定的数据,可以使用不在relational database下其他指令,没必要存储每个点的坐标

3.HOLAP:结合以上两种

由于ROLAP有对于原本就有的数据库的支持,主要介绍以下ROLAP下的几种不同类型的表格

1.Star Schema:

由一个fact table以及多个dimension table组成

fact table:由事实和dimension table 的FK组成,在star schema 的形式下dimension table里不允许再出现FK

2.Snowflake Schema:

由一个fact table 以及多个dimension table组成

此时与star schema最大的区别就在于对于dimension table下可以存放字结构的FK,被连接的dimension table 被称为outrigger dimension 支撑向量

3. Starflake Schema:

结合了上述两种schema的表现形式

4. Galaxy:

相当于是star schema+多个fact table

可以存储arregate之后的结果


4 Fact table 与dimension attribute

在fact table中要避免dimension table 的FK为null

these nulls would automatically cause a referential integrity violation

在fact table中measure 的值可以为空

fact table有以下几种形式:

transaction fact tables

periodic snapshot fact table

accumulating snapshot fact table

factless fact table

aggregate fact table

consolidated fact table

Role-playing dimension:a dimension that participates several times in a fact table

意思就是某个dimension table 里面有多个FK,这些FK均可以连接到同一个Fact Table里。fact Table有多个FK可以指向同一个表

在dimension table中要避免简单的Y/N,最好写上具体意思


5. SCD

当我们需要改变属于OLAP的表格时,我们需要update数据。在DW中一般有以下几种方式:

type1: overwrite,直接覆盖旧数据

type2: with version

add column (effective,expiration,indicator)

insert the new value

我们新加入一行,这一行数据的surrogate key是不同的,但是natural key是与原数据一致,同时加入3列,用来指明该数据生效和失效的日期,并指明现在正在使用的数据对象的状态是effective还是expire

type3: with version

replace the old one,add a column(last version)

在这里我们将新加入一列用来指明之前的旧数据


6.query in DW

当我们实际在DW进行query查询操作时,以oracle为例:

with clause to do the recursive query:可以支持递归查询,第一行用来init 数据,union all之后的部分可以当作不断递归扩展的部分

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

rollup(a,b): (a,b),(a),() 属于group by的一部分,数据将会有(a,b),(a),()三个层次的区别。最后一个即对所有total层次的统计

cube(a,b):(a,b),(a),(b),()类似与rollup,但是增加了对b对象支持

grouping sets:可以讲想要的维度对象加入到其中

grouping(balba): 1 when the value is null, else 0 可以用来检测现在的层次的状态,归根结底还是为了避免出现null的情况做出的努力

grouping_ID(a,b,c): use the binary to store the situation. 当有多个元素时,grouping_ID出现的将会是以二进制的形式。 以a b c为例,1 0 0即当a层次为null,将会显示6

Group_ID: whether it is replicated or not and how many times it shows

显示数据重复次数

in the window function:

when the window function is a aggregated function then it must need group by operation

window function over(partition by.. [order by ...]):值得注意的是,当window function是arrogate的时候,一定需要加上group by( partition的对象)

rank() over (partition by.. order by ...): 从小(1)到大; 若有desc则是从大(1)到小排序,注意此时的order by是必须的,很好理解,没有order就没办法进行rank了

DenseRank():不允许出现rank排名有跳过的现象(1 2 2 3 4)

window function over(...... [row 2 preceding]):向上看2行

window function over(...... [range condition]):向上看logic offset 

LAG(expression, offset, default_value): 对每行数据进行expression中的操作,并利用offset中距离向上看,如果向上看的对象不存在则用default value代替

LEAD:一样,换成向下看


7. Partition


divide data (table, index) into pieces that can be manipulated independently.

partition的好处:

allows to handle very large relation

allows to parallelism

filter the partition when query optimisation

ez to maintenance

这是在物理的层面做优化要考虑的

何时考虑采用partition:

table size >2G more than 1M rows

historical data read only

multi media storages

partition主要分成两种 vertical partition horizontal partition。

horizontal partition主要分成以下三种基本类(它们可以自由组合): hash, range, list

Hash: 

好处: balance the partition, on non-temporal attribute, distribute the data on the physical storage

怎么选择hash时的对象:choose the column that is almost unique

怎么选择hash的值:take the power of 2 as number

in the partition wise join

Update:

DISABLE/ENABLE ROW MOVEMENT

row movement disabled (default): update fails if it would result in row migration

Enable row movement: updating the key may cause a row to move to another partition

Range

MAX VALUE can be used to specify the top range, otherwise: implicit integrity constraint on the table.

LIST:

Does not support multi-column partition keys.

Interval partitioning:

first by range

then use interval(...):

必须要明确定义第一行数据

Partition by reference:

PARTITIONBYREFERENCE(sales_item_fk)

-- requires named referential constraint toward partitioned table

Partitioning on virtual column


The other operation possible:

ADD

DROP: the fast way to remove large volume data, delete the index first, otherwise it will degrade the performance 

TRUNCATE: only delete the row data, the partition remains

SPLIT

MERGE

Partition exchange

Partition pruning:

RANGE, LISTIN, =, LIKE, range (<,. . . )

HASH IN, =

Partition-wise joins:

Parallelism within a query (principle):split the query in multiple subqueries over distinct parts of the data; process subqueries in parallel.

full: partition key on both table with the same (#partition in hash)

partial: (table 1 has the partition key, table 2 will (re)partitioned based on the reference table partition.)


8.Index

B-tree

B+-tree: 在range queries中效率比较高

B树和B+树的主要区别在于:B-tree could store the data in the node, in the B+ only the leaves could store the data

一个小例子:

imagine if there is table with k attribute and n rows

then use B+ tree will be need 64*k*n

bitmap是适合DW的一种索引方式

create a bitmap for the attribute

它的好处在于,good at the boolean operation,节省空间不需要存储ROW ID可以fit 在main memory

in that case it will be 3*k*n(3 is the coordinate of attribute k)

bitmap on join 只需要找到相同的join key再对相应的对象进行建立bitmap就可以了

STAR QUERY是非常快的,因为它先join需要有选择(select)操作的对象,再join无法select的大对象

在使用时必须要:STAR_TRANSFORMATION_ENABLED = true.

when using the star query, it need all the fk in based on bitmap

in the clustered-index:

Creating an index-organized table:

ORGANIZATION INDEX 指明这是index organized的情况

MAPPING TABLE // creates a table mapping logical rowids-- the mapping table is necessary to support bitmap indexes

Multidimensional clusting中也分为两种:

linear order

there is also something like interleaved order: 意味着以Z字形进行存储数据,例如对坐标(2,1,0)对象进行建立索引时将会为(100010)2=34

cluster的建立可以减少IO操作,无须像index那么的存储空间,可以提高压缩的程度



9. Bloom filter

to decide whether the element is in the table or not

Array A: mbit

Hash function

1.map(element in S) using the several hash function into A

2. A[h(s)]=0 then it doesn't in the S

else it is possible

improve the accuracy, A has more bits, making more hash functions..


10.Column-oriented DB

merge the dictionary, sorted it

replace the old one using the new dictionary to replace.

After the merge,

different buffer is empty but with the valid vector as 1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容