No. | 2020年大厂-数据仓库篇 | Flag |
---|---|---|
1. | Hive SQL count(distinct)效率问题及优化 set mapreduce.map.memory.mb=48192; set mapreduce.reduce.memory.mb=48192; set mapred.reduce.tasks=1000; select count(distinct account) from…where… 加入distinct,map阶段不能用combine消重,数据输出为(k,v)形式然后在reduce阶段进行消重 Hive在处理COUNT这种“全聚合(full aggregates)”计算时,忽略指定的Reduce Task数,而强制使用1 insert overwrite table temp select id,account,count(1) as num from tablename group by id,account; MapReduce流程简单解析 |
❎ |
2. |
left semi join和left join区别? left semi join 是 in(keySet) 的关系,遇到右表重复记录,左表会跳过;当右表不存在的时候,左表数据不会显示; 相当于SQL的in语句. left join : 当右表不存在的时候,则会显示NULL |
❎ |
3. |
维度建模 和 范式建模(3NF模型) 的区别? 维度建模是面向分析场景的,主要关注点在于快速、灵活: 星型模型 & 雪花模型 & 星系模型 3NF的最终目的就是为了降低数据冗余,保障数据一致性: (2.1) 原子性 - 数据不可分割 (2.2) 基于第一个条件,实体属性完全依赖于主键 (2.3) 消除传递依赖 - 任何非主属性不依赖于其他非主属性 |
❎ |
4. | 采用维度模型方法作为理论基础,更多采用一些维度退化的手段,将维度退化到事实表中 ,减少事实表和维度表之间的关联。同时在汇总层,加强指标的维度退化,采用更多的宽表化手段构建公共指标数据层. |
|
5. | 从原理上说一下mpp和mr的区别 ? 1. MPP跑的是SQL,而Hadoop底层处理是MapReduce程序 2. 扩展程度:MPP扩展一般是扩展到100左右,因为MPP始终还是DB,一定要考虑到C(Consistency) |
❎ |
6. | Hive窗口函数怎么设置窗口大小?, between 1 preceding and 1 following | ✔️ |
7. | Hive SQL如何转化MR任务 ? HiveSQL ->AST(抽象语法树) -> QB(查询块) ->OperatorTree(操作树)->优化后的操作树->mapreduce任务树->优化后的mapreduce任务树 |
|
8. | join操作底层 MR 是怎么执行的? 根据join对应的key进行分区shuffle,然后执行mapreduce那套流程. | |
2020 BAT大厂数据分析面试经验:“高频面经”之数据分析篇 | ||
9. | Mysql中索引是什么?建立索引的目的? | |
10. | 行存储和列存储的区别? 行存储:传统数据库的存储方式,同一张表内的数据放在一起,插入更新很快。缺点是每次查询即使只涉及几列,也要把所有数据读取 列存储:OLAP等情况下,将数据按照列存储会更高效,每一列都可以成为索引,投影很高效。缺点是查询是选择完成时,需要对选择的列进行重新组装。 当你的核心业务是 OLTP 时,一个行式数据库,再加上优化操作,可能是个最好的选择。 当你的核心业务是 OLAP 时,一个列式数据库,绝对是更好的选择 |
|
11. | Hive HDFS HBase区别? Hbase是Hadoop database,即Hadoop数据库. 它是一个适合于非结构化数据存储的数据库,HBase基于列的而不是基于行的模式. |
漫谈系列:
No. | Question | Flag |
---|---|---|
1. | good - 漫谈大牛带你从0到1构建数据仓库实战 | |
2. | good - 数据模型设计(推荐收藏) | |
3. | 数据仓库(二), 数据仓库(一) | |
4. | Hadoop的元数据治理–Apache Atlas | |
5. | 1. 漫画:什么是数据仓库? | |
6. | 2. 传统数仓和大数据数仓的区别是什么? ✔️ | |
7. | 4. 数仓那点事:从入门到佛系 | |
8. | 5. 从8个角度5分钟搞定数据仓库 | |
9. | 6. 滴滴数据仓库指标体系建设实践 | |
11. | 9. 手把手教你如何搭建一个数据仓库 | |
12. | 10. 基于spark快速构建数仓项目(文末Q&A) | |
13. | 11. 数据湖VS数据仓库之争?阿里提出大数据架构新概念:湖仓一体! | |
14. | 12. 数据仓库(离线+实时)大厂优秀案例汇总(建议收藏) | |
15. | Good - Hive 拉链表实践 |
1. DWH, Concept
OLTP (on-line transaction processing) | OLAP(On-Line Analytical Processing) |
---|---|
数据在系统中产生 | 本身不产生数据,基础数据来源于产生系统 |
基于交易的处理系统 | 基于查询的分析系统 |
牵扯的数据量很小 | 牵扯的数据量庞大 (复杂查询经常使用全表扫描等) |
对响应时间要求非常高 | 响应时间与具体查询有很大关系 |
用户数量大,为操作用户 | 用户数量少,主要有技术人员与业务人员 |
各种操作主要基于索引进行 | 业务问题不固定,数据库的各种操作不能完全基于索引进行 |
DW 4 大特征: Subject Oriented、Integrate、Non-Volatil、Time Variant .
数仓分层
- STG Stage (不做任何加工, 禁止重复进入)
- ODS(Operational Data Store)不做处理,存放原始数据 (该层在stage上仅数据格式到标准格式转换)
- DWD(Data Warehouse Summary 明细数据层)进行简单数据清洗,降维
- DWS(Data Warehouse Summary 服务数据层)进行轻度汇总(做宽表)
- ADS(Application Data Summary 数据应用层)为报表提供数据
1.1 DWH basic
data warehouse 逻辑分层架构:
1.2 data modeling
Title_Kimball | 深入浅出数据模型(推荐收藏) |
---|---|
流程 | 架构是自下向上,即从数据集市(主题划分)–>数据仓库–> 数据抽取,是以需求为导向的,一般使用星型模型 |
事实表和维表 | 架构强调模型由事实表和维表组成,注重事实表与维表的设计 |
数据集市 | 数据仓库架构中,数据集市是一个逻辑概念,只是多维数据仓库中的主题域划分,并没有自己的物理存储,也可以说是虚拟的数据集市。是数据仓库的一个访问层,是按主题域组织的数据集合,用于支持部门级的决策。 |
data modeling 的几种方式:
No. | 数据建模方式 | type |
---|---|---|
1. | ER模型 | 三范式 |
2. |
维度建模 |
1. 星型模型 2. 雪花模型 3. 星座模型 |
1. | 事实表 | 事实表生于业务过程,存储业务活动或事件提炼出来的性能度量。从最低的粒度级别来看,事实表行对应一个度量事件 (1)事务事实表 (2)周期快照事实表 (3)累积快照事实表 |
2. | 维度表 | (1)退化维度(DegenerateDimension) (2)缓慢变化维(Slowly Changing Dimensions) 维度的属性并不是始终不变的,这种随时间发生变化的维度我们一般称之为缓慢变化维(SCD) |
1.3 data ETL
No. | Title | desc |
---|---|---|
1. | 数据仓库的数据质量如何保障? | 需要从源头管控,业务系统进行细致的字段的校验 |
2. | 如何保证你的计算的指标结果准确性? | 1. 有测试人员 2. 做小样本数据集的抽取开发 |
3. | 数据存储格式 | orc / Parquet |
4. | 数据压缩方式 | snappy / LZO |
5. | 数据存储格式 + 压缩 | 服务器的磁盘空间可以变为原来的 1/3 |
6. | lzo 支持切分么? | snappy 不支持切分, 给lzo文件建立索引后,则支持切分 |
create_time, update_time, 使用拉链表解决历史数据变更的问题
1 | # 设置输出数据格式压缩成为LZO |
1.4 Tool-App
No. | Tool |
---|---|
1. | Apache_Druid Druid是一个用于大数据实时查询和分析的高容错、高性能开源分布式系统,用于解决如何在大规模数据集下进行快速的、交互式的查询和分析。 |
2. | Apache Kylin™ 一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。 |
3. | Clickhouse 是一个用于在线分析处理(OLAP)的列式数据库管理系统(DBMS) |
4. | ADB(AnalyticDB_for_MySQL) 分析型数据库MySQL版(AnalyticDB for MySQL),是阿里巴巴自主研发的海量数据实时高并发在线分析(Realtime OLAP)云计算服务,使得您可以在毫秒级针对千亿级数据进行即时的多维分析透视和业务探索。 |
5. | 花未全开*月未圆 1.1 presto 是Facebook开源的,完全基于内存的并⾏计算(MPP),分布式SQL交互式查询引擎 1.2 数据治理: 在ETL过程中开发人员会对数据清洗这其实就是治理的一部分 1.3 元数据是记录数仓中模型的定义、各层级的映射关系、监控数仓的数据状态及 ETL 的任务运行状态 1.4 DW-DM层是采用Kimball的总线式的数据仓库架构,针对部门(比如财务部门)或者某一主题(比如商户、用户),通过维度建模(推荐星型模型),构建一致性维度,原子粒度的数据是DW层,按照实体或者主题经过一定的汇总,建设数据集市模型。数据集市可以为OLAP提供服务。 |
Ad-hoc 查询或报告(即席查询或报告)是 商业智能的一个次要的话题,它还经常与OLAP、数据仓库相并论.
2. SQL
(1). 主键 / FOREIGN KEY
1 | 身份证号、手机 这些看上去可以唯一的字段,均不可用作主键。 |
(2). INDEX
1 | 可以对一张表创建多个索引。索引的优点是提高了查询效率 |
(3). SQL查询
1 |
|
3. Hive
1.1 3NF vs Dim modeling
1 | 3NF: |
Input -> Mappers -> Sort,Shuffle -> Reducers -> Output
Hive 系统架构
1. Hive 原理
1 | 1. 用户提交查询等任务给Driver。 |
2. hadoop处理数据的过程,有几个显著的特征
1 | 1. 不怕数据多,就怕数据倾斜 (Not Afraid of Large Data, Only Data Skew) |
Checking if Disqus is accessible...