------------恢复内容开始------------

数据仓库为什么要分层? 层次越多说明越复杂

1,把复杂问题简单化,

将一个复杂的任务分解成多个步骤来完成,每一层处理单一的步骤,比较简单,方便定位问题

2,减少重复开发

规范数据分层,通过中间层数据,能减少极大的重复计算,增加一次计算结果的复用性。

3,隔离原始数据

不论是数据的异常还是数据敏感性,使真实数据和统计数据解耦。

ODS层:存放原始数据,直接加载原始日志,数据保持原貌不做处理(方便排查问题,可以和业务库数据比对)

DWD层:结构和粒度与原始数据保持一致,对ODS数据进行清洗(去除空值,脏数据,字段按照主题域命名,数据规则化操作,进行纬度退化(降维:因为从业务表过来的数据遵循三范式,通常是多纬度的,)纬度退化需要付出代价:如果被退化的纬度还有其他业务表使用,退化后处理起来就比较麻烦

DWS层:以DWD为基础,按照一定的纬度,进行轻度汇总。

BI层:为各种报表提供数据。

 

数据集市和数据仓库区别?

数据集市是一个微型的数据仓库,他的数据比较少,更少的主题区域,是部门级的,根据部分特定的业务做的指标统计。

数据仓库是企业级别的。能为各个部门的运行提供决策支持手段。

HIVE组成:客户端,元数据(现在放在mysql,是因为支持多个客户端访问),四个器(编译器,优化器,解析器,执行器) ,MR计算,HDFS存储

HIVE 慢的原因是:MR需要写入磁盘,IO比较耗时,Spark 走的是内存计算,他会把所有的表加载到内存中,在内存中计算

Tez快的原因:可以将多个依赖的作业转换成一个作业,也是给予内存计算,这样只需要写一次HDFS,且中间节点比较少,从而大大提高了作业的计算性能。

 

元数据的备份:安装两台Mysql,主从    元数据放在mysql而不是debey 是因为debey不支持多用户同时访问

HIVE 和Mysql,Hbase,MongDB的区别?

Hive:存储大,查询慢(底层走MR)

Mysql: 存储小,查询快

内外部表的却别:

在删除数据的时候内部表会把原始数据删除,外部表只会删除元数据。临时表一般都是内部表,大部分是外部表

 

Order by 两个字段的时候注意下顺序?

 

Tez 引擎?

什么时候用Spark 什么时候用hive ?  数据量大的时候,表多的时候用Spark(基于内存计算,减少IO磁盘消耗),

表的分类: 纬度表和事实表

实体表:一个现实存在的业务对象,比如用户,商家,销售员

纬度表:一般指对应一些业务状态,编号的解释码,也可以称为码表。

业务型事实表:一般随着业务的发生不断产生的数据,特点是一旦发生不会变化,一般如交易流水,操作日志,出库入库记录等

周期性事实表:一般指随着业务发生不断产生的数据。比如订单

同步策略:

全量表:存储完整数据

增量表:存储新增加的数据

新增及变化表:存储新增加的数据和变化的数据

拉链表:对新增和变化表做定期合并

 

三范式理论:

第一范式:属性不可切割(数据要是原子粒度,即:数据不可切割)。1NF是所有关系型数据库的最基本的要求。

第二范式核心原则:不能存在部分函数依赖(AB-->C,A/B-->C,即C部分依赖A,B)

第三范式的核心原则:不能存在传递函数依赖

关系建模和纬度建模

关系建模主要应用于OLTP中,为了保证数据的一致性以及避免冗余,所以大部分业务系统的表都是遵循第三范式的。

纬度建模主要是应用于OLAP中,因为关系模型虽然冗余小,但是在大规模数据跨表分析统计查询中会造成多表关联,这会大大降低执行效率

数据仓库是怎么设计的?怎么建模的?

在纬度建模的基础上又分为:星型模型,雪花模型,星座模型

雪花模型和星星模型的区别是纬度的层级,标准的星型模型纬度只有一层,而雪花模型可能涉及到多层纬度表。

星座模型:星座模型和前两个的区别是:事实表的数量,星座模型是基于多个事实表。

星星模型或者雪花模型取决于性能优先(星型模型)还是灵活优先(星座模型)

大部分选择的星型模型:因为这样可以减少join,也即是减少shuffle,性能差距很大

数据抽取的方法:全量,增量,新增和变化的表

增量表的导入:创建时间是今天的数据

新增和变化的表:创建时间是今天或者更新时间是今天的数据

用Sqoop遇到哪些问题?

------------恢复内容结束------------

数据仓库为什么要分层? 层次越多说明越复杂

1,把复杂问题简单化,

将一个复杂的任务分解成多个步骤来完成,每一层处理单一的步骤,比较简单,方便定位问题

2,减少重复开发

规范数据分层,通过中间层数据,能减少极大的重复计算,增加一次计算结果的复用性。

3,隔离原始数据

不论是数据的异常还是数据敏感性,使真实数据和统计数据解耦。

ODS层:存放原始数据,直接加载原始日志,数据保持原貌不做处理(方便排查问题,可以和业务库数据比对)

DWD层:结构和粒度与原始数据保持一致,对ODS数据进行清洗(去除空值,脏数据,字段按照主题域命名,数据规则化操作)

DWS层:以DWD为基础,按照一定的纬度,进行轻度汇总。

BI层:为各种报表提供数据。

 

数据集市和数据仓库区别?

数据集市是一个微型的数据仓库,他的数据比较少,更少的主题区域,是部门级的,根据部分特定的业务做的指标统计。

数据仓库是企业级别的。能为各个部门的运行提供决策支持手段。

HIVE组成:客户端,元数据(现在放在mysql,是因为支持多个客户端访问),四个器(编译器,优化器,解析器,执行器) ,MR计算,HDFS存储

HIVE 慢的原因是:MR需要写入磁盘,IO比较耗时,Spark 走的是内存计算,他会把所有的表加载到内存中,在内存中计算

Tez快的原因:可以将多个依赖的作业转换成一个作业,也是给予内存计算,这样只需要写一次HDFS,且中间节点比较少,从而大大提高了作业的计算性能。

 

元数据的备份:安装两台Mysql,主从    元数据放在mysql而不是debey 是因为debey不支持多用户同时访问

HIVE 和Mysql,Hbase,MongDB的区别?

Hive:存储大,查询慢(底层走MR)

Mysql: 存储小,查询快

内外部表的却别:

在删除数据的时候内部表会把原始数据删除,外部表只会删除元数据。临时表一般都是内部表,大部分是外部表

 

Order by 两个字段的时候注意下顺序?

 

Tez 引擎?

什么时候用Spark 什么时候用hive ?  数据量大的时候,表多的时候用Spark(基于内存计算,减少IO磁盘消耗),

表的分类: 纬度表和事实表

实体表:一个现实存在的业务对象,比如用户,商家,销售员

纬度表:一般指对应一些业务状态,编号的解释码,也可以称为码表。

业务型事实表:一般随着业务的发生不断产生的数据,特点是一旦发生不会变化,一般如交易流水,操作日志,出库入库记录等

周期性事实表:一般指随着业务发生不断产生的数据。比如订单

同步策略:

全量表:存储完整数据

增量表:存储新增加的数据

新增及变化表:存储新增加的数据和变化的数据

拉链表:对新增和变化表做定期合并

 

三范式理论:

第一范式:属性不可切割(数据要是原子粒度,即:数据不可切割)。1NF是所有关系型数据库的最基本的要求。

第二范式核心原则:不能存在部分函数依赖(AB-->C,A/B-->C,即C部分依赖A,B)

第三范式的核心原则:不能存在传递函数依赖

关系建模和纬度建模

关系建模主要应用于OLTP中,为了保证数据的一致性以及避免冗余,所以大部分业务系统的表都是遵循第三范式的。

纬度建模主要是应用于OLAP中,因为关系模型虽然冗余小,但是在大规模数据跨表分析统计查询中会造成多表关联,这会大大降低执行效率

数据仓库是怎么设计的?怎么建模的?

在纬度建模的基础上又分为:星型模型,雪花模型,星座模型

雪花模型和星星模型的区别是纬度的层级,标准的星型模型纬度只有一层,而雪花模型可能涉及到多层纬度表。

星座模型:星座模型和前两个的区别是:事实表的数量,星座模型是基于多个事实表。

星星模型或者雪花模型取决于性能优先(星型模型)还是灵活优先(星座模型)

大部分选择的星型模型:因为这样可以减少join,也即是减少shuffle,性能差距很大

数据抽取的方法:全量,增量,新增和变化的表

增量表的导入:创建时间是今天的数据

新增和变化的表:创建时间是今天或者更新时间是今天的数据

拉链表:

  记录每条信息的生命周期,一旦一条记录的生命周期结束,就重新开始一条新的记录,并把当前日期放入生效开始日期。比如订单表,一个订单ID,在不同的天日期下状态是不一样的,每个状态有他的生命周期。

为什么要做拉链表?

拉链表适合于:数据会发生变化,但是大部分是不变的。做每日全量的效率低,浪费存储的资源。

如何使用拉链表?

拉链表的制作过程?

Sqoop导入导出数据遇到的问题?

数据导入HIve:

数据导出到Mysql:因为防止数据在导出的时候sqoop任务部分失败,数据导出的时候先导出到一个mysql临时表,再由临时表导入到最终的结果表。参数为 --staging-table

导出设置Map数为1(一般不推荐),设置多个map时,采用--staging-table,可以解决数据一致性问题。

Sqoop:底层只有map阶段的任务,没有reduce任务。