数据仓库面试题
离线数仓面试题?
1、ODS:存放原始数据,直接加载原始日志,数据,数据保持原貌不做处理。
2、DWS:结构和粒度与原始表保持一致,对ODS层数据进行清洗(去除空值,脏数据)
3、DWS:以DWD层为基础,进行轻度汇总。
4、ADS:为各种统计报表提供数据。
为什么要对数仓进行分层?
1、把简单问题复杂化
将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单,并且方便定位问题。
2、减少重复开发
规范数据分层,通过中间层的数据,能够减少极大的重复计算,增加一次计算结果的复用性。
3、隔离原始数据
不论是数据的异常还是数据的敏感性,使真实数据与统计数据解耦开
说说对数据库仓库的理解?
数据仓库是面向主题进行组织的,数据是集成的,不更新的随时间变化的。
数据仓库经历了这样三个阶段:简单报表,数据集市阶段,数据仓库阶段
数据库和数据仓库的区别?
数据库是面向事务的,用来存放数据的仓库,通过数据库软件来实现。数据库由很多表组成,表是二维的,一张表里面可以有很多字段
数据仓库是面向主题的
星型模型和雪花模型?
星型模型:多维表的数据关系,它由一个事实表和一组维表组成,每个维作为主键
雪花模型:当一个或多个维没有直接连接到事实表上,而是通过其他维表连接到事实表上的时候。
使用场景:
雪花模型:使得维度分析更加容易比如“针对特定的广告主,有哪些客户或者公司 是在线的?"
星型模型:用来做指标分析更合适,比如:给定的一个客户他们的收入是多少?
如果现在有一千张表,从一个库到另一个库的ODS层,你会怎么做?
利用消息队列做数据订阅发布
数仓三层架构,每层有什么用?
1、数据访问层:主要对非原始数据的操作层,而不是指原始数据,也就是说是对数据库的操作,而不是数据,具体为业务逻辑层或表示层提供数据服务。
2、业务逻辑层:主要针对具体的问题的操作,也可以理解为对数据层的操作,对数据业务逻辑处理,比如说数据层是积木,那逻辑层就是对这些积木的搭建
3、界面层、主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx。如果逻辑层相当强大和完善,无论变现层如何定义和修改,逻辑层都能完善地提供服务。
什么是拉链表?
拉链表就是随着时间变迁产生历史数据。
拉链表的含义:就是记录历史,记录一个事务从开始一直到当前状态的所有信息变化