作者:找不到实习与工作的小菜菜
链接:https://www.nowcoder.com/discuss/495327?type=all&order=recall&pos=&page=1&ncTraceId=&channel=-1&source_id=search_all_nctrack&gio_id=7ECACE7605534464872AA4CD0FF6C741-1663290554718
来源:牛客网
欢迎点击此处关注公众号。
数仓分层,每一层的含义
- 数据操作层 ODS:把操作系统数据几乎无处理地存放在数据仓库系统中。
- 公共维度模型层 CDM:存放明细事实数据、维表数据及公共指标汇总数据 , 其中明细事实数据、维表数据一般根据 ODS 层数据加工生成,CDM 层又细分为明细数据层 DWD 和汇总数据层 DWS ,采用维度模型方法作为理论基础,更多地采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联,提高明细数据表的易用性:同时在汇总数据层,加强指标的维度退化,采取更多的宽表化手段构建公共指标数据层,提升公共指标的复用性。
- 应用数据层 APP:存放数据产品个性化的统计指标数据,根据 CDM 层与 ODS 层加工生成 。(个性化指标:排名型、比值型等)
- 维度层 DIM:保存维度数据,记录业务的描述信息,例如何人、何时、何地。
优点:
- 复杂问题简单化,每一层只处理简单的任务。
- 减少重复开发,增加一次计算结果的复用性。
- 隔离原始数据,将统计数据与真实数据隔离开。
数仓建模
范式理论:三范式(属性不可拆分,不存在部分函数依赖,不存在传递函数依赖),降低数据冗余。
维度建模:维度模型以数据分析作为出发点,不遵循三范式,故数据存在一定的冗余。维度模型面向业务,将业务用事实表和维度表呈现出来。表结构简单,故查询简单,查询效率较高。
元数据
定义:
- 元数据是关于数据的数据。
- 元数据打通了源数据、数据仓库、数据应用,记录了数据从生产到消费的全过程。
- 元数据主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态即 ETL 的任务运行状态。
- 帮助开发人员方便找到数据仓库中他们所关心的数据,提高效率。
分类:
SQL
面试官首先问了一个语句,我没见过。然后问了另一道题,问我的想法,其实我没想出来,面试官提醒之后,回答上来了。
MySQL 分库分表
分库:将一个库的数据拆分到多个相同的库中,访问的时候访问一个库。
分表:把一个表的数据放到多个表中,操作对应的某个表就行。
分垂直拆分和水平拆分。
垂直拆分:
- 分库:根据业务拆分。例如电商数据库拆为订单库,会员库,商品库。
- 分表:把 user 表拆分成 user_base 表和 user_info 表,use_base 负责存储登录,user_info 负责存储基本用户信息。
- 特点:每个库(表)的结构都不一样;每个库(表)的数据至少一列一样;每个库(表)的并集是全量数据。
- 优点:拆分后业务清晰(专库专用按业务拆分);数据维护简单,按业务不同,业务放到不同机器上。
- 缺点:如果单表的数据量,写读压力大;受某种业务决定,或者被限制,也就是说一个业务往往会影响到数据库的瓶颈(性能问题,如双十一抢购);部分业务无法关联 join,只能通过 java 程序接口去调用,提高了开发复杂度
水平拆分:
- 分库:例如按会员库拆分,拆分成会员 1 库,会员 2 库,以 userId 拆分,userId 尾号 0-4 为 1 库
5-9 为 2 库,还有其他方式,进行取模,偶数放到 1 库,奇数放到 2 库。 - 分表:例如把 users 表拆分成 users1 表和 users2 表,以 userId 拆分,进行取模,偶数放到 users1 表,奇数放到 users2 表。
- 特点:每个库(表)的结构都一样;每个库(表)的数据都不一样;每个库(表)的并集是全量数据。
- 优点:单库/单表的数据保持在一定量(减少),有助于性能提高;提高了系统的稳定性和负载能力;拆分表的结构相同,程序改造较少。
- 缺点:;数据的扩容很有难度维护量大;拆分规则很难抽象出来;分片事务的一致性问题部分业务无法关联 join,只能通过 java 程序接口去调用
表的删除方式以及它们之间的区别
drop:表结构都会被删除。无法回滚。
truncate:清空表,删除内容,但不删除定义(保留表的数据结构)。不会把删除操作记录到日志,无法回滚。
delete:删除表中的行。操作记录在日志中,可以回滚。
职业规划
对数据研发的理解