数据仓库面试

OLAP和OLTP区别
联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。
OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

https://www.cnblogs.com/andy6/p/6011959.html

Hive执行流程
hiveSQL转换成MapReduce的执行计划包括如下几个步骤: HiveSQL ->AST(抽象语法树) -> QB(查询块) ->OperatorTree(操作树)->优化后的操作树->mapreduce任务树->优化后的mapreduce任务树

https://blog.csdn.net/youzhouliu/article/details/70807993

Hive HDFS HBase区别

https://blog.csdn.net/wshyb0314/article/details/81475475

列式数据库和行式数据库优劣对比

http://stor.51cto.com/art/201809/583648.htm

数仓分层

https://blog.csdn.net/weixin_42656794/article/details/91818113

hive SQL求连续天数

https://blog.csdn.net/qq_27252133/article/details/103299539?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

拉链表的实现
数仓的范式建模和新型维度建模
范式建模是一种自上而下的数据仓库架构。对于事务型系统的数据源,通过ETL抽取转换家加载到仓库的ODS层,通过ODS层的数据建设成DW层。这种建模方式不方便应用作数据分析,因为它需要通过建设成多维格式的数据集市层。优点是:易于维护,高度集成;缺点是:结构死板,部署周期长。
维度建模 是自下而上的数据仓库架构。主要是利用维度建模方法假设一致维度的数据集市。通过一致性维度可以将数据集市联系到一起,由所有的数据集市组成数据仓库。优势:构建迅速,缺点:不好维护,结构辅赞。主要有星型模型和雪花模型。还有星座模型(一般不推荐)
星型模型是所有维度表都是连接在一个事实表上面,雪花模型是将维度表拆分地更加详细,是多层次的。
明细层采用传统的三范式关系模型。这一层次的数据模型要将业务过程描述清楚,将源数据(即业务系统)中隐含的、有歧义的概念进行清晰化,如活跃用户、VIP用户等。该层次的数据模型追求的目标是灵活地表达业务过程,要保证数据一致性、唯一性、正确性,以尽量少的代价与源数据保持数据同步,同时该层次的数据模型不建议开给不懂技术的业务人员直接使用,因此,采用关系型的三范式模型是最佳的选择。
集市层采用维度模型。集市层是按照业务主题、分主题构建出来的、面向特定部门或人员的数据集合,该层次的数据模型会开放给业务人员使用,进行数据挖掘及业务分析。由于业务员多数不懂数据库技术,缺少将业务需求转换为关系型数据结构的逻辑思维,更写不出复杂的SQL语句,因此,越简单的数据模型,越能被他们所接受,因此,这个层次所构建出来的数据模型,要按照业务过程进行组织,每个事实表代表一个独立的业务过程,事实表之间不存在直接的依赖关系,这样业务人员可以很容易地将分析需求对应到事实表上,利用工具或手工写出简单的SQL,将统计数据提取出来进行分析。
hive的窗口函数

https://blog.csdn.net/weixin_38750084/article/details/82779910

hive的元数据
hive的元数据存在于mysql中,在mysql中会有一个hive库,存放相应的表,一共53张表。
1.version表 存hive的版本信息,该表中数据只有一条,如果存多条,hive启动不起来。
2.dbs表 存数据库相关的信息。数据库描述 数据库ID 数据HDFS路径,数据库名,数据库所有者用户名,所有者角色
3.tbls表  tbl_id create_time  表的拥有者 表的类型
4.table_params 最后一次ddl时间 注释,非分区表还有表对应的HDSF文件个数
5.sds表 文件的存储格式 input_format  和 output_format  是否压缩。
6.partitions partition_params 存放分区信息
7.buckeeting_clos 桶元数据表
数据倾斜的原因和处理办法
总结一下:有三种操作可能会造成数据倾斜
join操作时 其中一个表较小,但是key集中 这样分发到一个或者几个reduce上的数据远高于平值
或者是大表与大表关联 但是分桶的字段0或者null值过多,这些空值都由一个reduce处理 非常慢
group by操作时,维度过小,某个值的数据量过多,处理某个值的reduce非常耗时
count(distinct)操作时,某特殊值过多,处理此特别值的reduce耗时
所以原因就是key的分布不均匀,业务数据本身的特性,建表时考虑不周,某些SQL语句本身就有数据倾斜

解决办法:
1.参数调节
hive.map.aggr=true map端部分聚合
hive.groupby.skewindata=true  这个过程可以保证相同的group by key被分布到同一个reduce 
2.SQL语句调节
    1.大小表join 可以让小表先进入内存,在map端完成reduce
    2.大表join小表 被空值的key变成一个字符串加随机数,把倾斜的数据分到不同的reduce上,由于null值关联不上,处理后并不影响最终结果。
    3.count distinct 大量相同的特殊值 如果含有空值 可以不用处理 直接把null值过滤掉,最终结果+1.如果还有其他计算,需要进行group by 可以将空值单独处理,再和其他结果union
    4.特殊处理 在业务逻辑优化效果不大的情况下 有些时候可以将倾斜的数据单独拿出来处理,再union回去。
分区和分桶
对hive表分桶就是将表中记录分桶键的哈希值分散进多个文件。
分区可以让数据的部分查询变得更快,在加载数据的时候可以指定加载某一部分数据,并不是全量的数据。
分桶就是在原始数据中加入一些额外的结构,这些结构可以用于高效查询,例如:基于ID的分桶可以使用户查询更快。分区体现在HDFS的文件目录上,分桶体现在HDFS具体文件。
mapreduce原理
MapReduce原语:“相同”key的键值对为一组调用一次Reduce方法,方法内迭代这组数据进行计算

https://www.jianshu.com/p/ca165beb305b

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值