大数据面试吹牛草稿V2.0 (二)

本文涉及的产品
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 面试吹牛之前先打个草稿!

在 Lambda 架构中,每层都有自己所肩负的任务。


1. 批处理层存储管理主数据集(不可变的数据集)和预先批处理计算好的视图:


批处理层使用可处理大量数据的分布式处理系统预先计算结果。它通过处理所有的已有历史数据来实现数据的准确性。这意味着它是基于完整的数据集来重新计算的,能够修复任何错误,然后更新现有的数据视图。输出通常存储在只读数据库中,更新则完全取代现有的预先计算好的视图。


2. 流处理层会实时处理新来的大数据:


流处理层通过提供最新数据的实时视图来最小化延迟。流处理层所生成的数据视图可能不如批处理层最终生成的视图那样准确或完整,但它们几乎在收到数据后立即可用。而当同样的数据在批处理层处理完成后,在速度层的数据就可以被替代掉了。


四、详细介绍数仓搭建



1. 数据各层作用


  1. ODS(原始数据层):日志数据和业务进入数仓后,首先放入该层,建立分区表,防止后续的全表扫描,使用 ORC 列式存储,同时对数据进行压缩,压缩格式采用 LZO,以减少存储空间。


  • 日志:商品列表、商品点击、商品详情;广告;故障;后台活跃、通知;启动表;点赞、评论、收藏等。
  • 业务数据:订单表、用户表、支付流水表、订单详情表、商品表、三级、二级、一级,物流信息(根据产品的来源,有两种,香港特快直送,闪电保税仓。一个从香港发货,一个从内地的保税仓发货)等。


  1. DWD(明细数据层):对 ODS 层数据清洗(去除空值,脏数据,超过极限范围的数据)。


  1. 用户行为数据:自定义 UDF(extends UDF 实现 evaluate 方法),解析公共字段;自定义 UDTF(extends Genertic UDTF->实现三个方法 init(指定返回值的名称和类型)、process(处理字段一进多出)、close 方法),自定义方法的好处在于更加灵活以及方便调试 bug。在自定义函数解析字段时,我们一般建立中间表,存放解析后的表,最后通过 get_json_object 获的我们所需要的字段,建立最终所需表。
  2. 业务数据:维度退化+数据清洗(where group by)
  3. 脱敏:利用 spark 对手机号、身份证号、银行账号等敏感信息进行脱敏处理。
  4. ETL:通过 HQL、Kettle 对数据进行清洗。清洗标准是核心字段满足业务逻辑要求,去除重复、空值、超过时限等数据。一般清洗率为万分之一,如果大于这个数,需要和前端、javaEE 人员进行沟通。
  5. 维度退化:商品表+三级分类、二级分类、一级分类=>商品表,省份+地区表=>省份表,其中我们用到的维度建模理论是星型模型,事实表周围 1 级维度。
  6. LZO 压缩:减少存储空间
  7. 列式存储:ORC,增加压缩比
  8. 分区表:防止后续的全表扫描


重点重点:DWD 层我们使用的是标准的数仓建模理论


数仓建模怎么建?


我们按照数仓工具箱中的维度建模四步走来建的:



  • 选择业务过程:由于我们公司当时数据量较小,我把 javeEE 涉及的业务表全部导入了,这些表包括实体表,维度表,事务型快照事实表,周期性快照事实表、累积型事实表。过来之后,将这些表作为矩阵的一个列。
  • 声明粒度:粒度一般有:一行信息代表一次、按天、按周、按月等,参考了很多架构之后,我们考虑到后期想要分析更多的指标,只能选择最小的粒度,一行信息代表一次消费。
  • 确认维度:采用标准数仓建模的思维,争取事实表周围都是 1 级维度。我们关系的就是什么时间、什么地点、什么人、具体什么活动、优惠券等主题的维度,同时将跟用户、商品相关的表进行维度退化,尽量把他们降成一级维度。
  • 确认事实:这里我们确定的不是事实表,而是事实表的度量值,我们用到的度量值有订单的个数、订单的金额、下单次数等可以累加的字段。


  1. DWS、DWT(每天的用户行为宽表):每天的用户行为宽表、商品宽表,相当于一个周期型快照事实表。每天记录用户做了那些事情,商品被下单了多少。


  • DWS 宽表的字段我们是站在维度的角度来取的,比如站在用户的维度去看待周围的对应事实表,取事实表对应的度量值,取出订单的次数、订单的金额、支付的次数、支付的金额、加入购物车的次数、加入购物车的金额、评论的次数、点赞的次数、收藏的次数等等,将他们组合成为 DWS 层每天发生的事情。
  • 后期我们为了统计的指标,加了一个 DWT 层,DWT 层还是站在维度的角度去看待对应事实表,但是它和 DWS 有略微的区别,现在关注的是这个用户什么时间开始创建的,最后一次登录是什么时候,累计登录多少次,最近 30 天登录多少次等信息。


  1. DWS、DWT 统称为服务层:都是为后面的 ADS 层提供服务的,如果统计的是累积性指标,从 DWT 层拿取数据;如果统计的当天的指标,直接从 DWS 层取对应的数据。 DWS 层最大的行为宽表是用户行为宽表,其字段有互动日期、用户 id、用户昵称、注册日期、注册来源、细分渠道、注册省份、评论次数、打赏次数、添加收藏、取消收藏、关注商品、取消关注的商品、关注人、取消关注的人、点不值次数、点值次数、点赞次数、分享次数、爆料数、加购物车数、取消购物车次数等待。DWT 也是用户行为宽表,其字段有互动日期、用户 id、用户昵称、注册日期、注册来源、细分渠道、注册省份、最后一次登录日期、累计登录日期、最近 30 天登录日期等等。


  1. ADS 层:分析了 100 多个指标:包括 日活、月活、周活、留存、留存率、新增(日、周、年)、转化率、流失、回流、七天内连续 3 天登录(点赞、收藏、评价、购买、加购、下单、活动)、连续 3 周(月)登录、GMV、复购率、复购率排行、点赞、评论、收藏、领优惠价人数、使用优惠价、沉默、值不值得买、退款人数、退款率 topN 热门商品、留转 G 复活等。


五、数仓业务详解



我们数据仓库是基于维度建模,主要使用星型模型。


  1. 维度表:一般是对事实的描述信息。每一张维表对应现实世界中的一个对象或者概念。例如:用户、商品、日期、地区等。


维表的特征:


  • 维表的范围很宽(具有多个属性、列比较多)
  • 跟事实表相比,行数相对较小:通常< 10 万条
  • 内容相对固定:编码表


  1. 事实表:分为事务型事实表(每个事务或事件为单位,一旦产生就固定)和周期型事实表(不会保留所有数据,只保留固定时间间隔的数据,比如每天、每月销售额)以及累积性事实表(累积型快照事实表用于跟踪业务事实的变化,比如订单的状态变化情况)。如果需要后面状态还会改变的就是周期型事实表,一旦确定了,就是事务性事实表。


事实表中的每行数据代表一个业务事件(下单、支付、退款、评价等)。“事实”这个术语表示的是业务事件的度量值(可统计次数、个数、金额等),例如,订单事件中的下单金额。


每一个事实表的行包括:具有可加性的数值型的度量值、与维表相连接的外键、通常具有两个和两个以上的外键、外键之间表示维表之间多对多的关系。


事实表的特征:


  • 非常的大
  • 内容相对的窄:列数较少
  • 经常发生变化,每天会新增加很多。


对于不同的表我们使用不同的同步策略:


同步策略包括全量表,增量表,新增及变化,拉链表


日志表:(商品点击,商品详情,商品详情页表,广告表,错误日志表,消息通知表等)


  1. 商品点击:用户的基本信息字段,动作,商品 id,种类等。
  2. 商品详情页:入口,上一页面来源,商品 id,加载时间,种类。
  3. 广告表:入口,内容,行为,展示风格等。
  4. 错误日志:错误详情
  5. 消息通知表:通知类型,展示时间,通知内容等


这些记录性质的,都使用每日增量。


业务表:(购物车,评分,评论,订单表,订单详情表,退货表,用户表,商家表,商品分类表(一级,二级,三级),支付流水,物流信息等)


  1. 购物车详情:用户 id ,商品 id,商品价格,商家 id ,商品型号,商品分类等 同步策略:这属于周期型事实表,因为它可能会随时改变,所以得用每日新增及变化。


  1. 评分表:评分时间,评分用户,评分商品 ,分数等。
    同步策略:这是事务性事实表,一般可以用每日增量就可以了,因为评论只能增加,不能修改。


  1. 评论表:评论时间,评论用户,评论商品,评论内容。
    同步策略:这个跟评分差不多,用每日新增。


  1. 订单表:订单状态,订单编号,订单金额,支付方式,支付流水,创建时间等
    同步策略:因为订单的状态会随时发生改变,比如下单,支付,商家发货,用户收到货,确认收货,等这一系列的状态会比较长,然后订单也比较多。所以,要做历史快照信息的话,最好使用拉链表。


  1. 订单详情表:订单编号,订单号,用户 id,商品名称,商品价格,商品数量,创建时间等。


  1. 用户表:用户 id,性别,等级,vip,注册时间等等。
    同步策略:因为表不是很大,每次做全量表。


  1. 商家表:商家 id,商家地址,商家规模等级,商家注册时间,商家分类信息。
    同步策略:每次做每日全量。


总结


  1. 实体表,不大,就可以做每日全量。
  2. 对于维度表,比如说商品分类,这种不是很大,也可以做每日全量,有一些不太会发生改变的维度,就可以固定保存一份值,比如说:地区,种族等。
  3. 事务型事实表,比如说交易流水,操作日志,出库信息,这种每日比较大,且需要历史数据的,就根据时间做每日新增,可以利用分区表,每日做分区存储。
  4. 周期型事实表的同步策略,比如订单表,有周期性变化,需要反应不同时间点的状态的,就需要做拉链表。记录每条信息的生命周期,一旦一条记录的生命周期结束,就开始下一条新的记录。并把当前的日期放生效开始日期。


六、离线指标



  1. 日活/周活/月活统计:(每日的根据 key 聚合,求 key 的总数)
  2. 用户新增:每日新增(每日活跃设备 left join 每日新增表,如果 join 后,每日新增表的设备 id 为空,就是新增)
  3. 用户留存率:(一周留存)10 日新增设备明细 join 11 日活跃设备明细表,就是 10 日留存的。注意每日留存,一周留存
  4. 沉默用户占比:只在当天启动过,且启动时间在一周前
  5. 本周回流用户数
  6. 用户在线时长统计
  7. 区域用户订单数(根据区域分区,然后求订单数)
  8. 区域订单总额(根据区域分区,求订单总额。)
  9. 区域用户订单访问转化率(以区域分组成单数/访问数)
  10. 区域客单价(订单总额度/下订单总人数)
  11. 总退货率(退货商品数/购买商品总数)
  12. 各区域退货率(根据区域分组)
  13. GMV(成交总额)
  14. 物流平均时长(用户收货时间-物流发货时间)求平均
  15. 每周销量前十品类
  16. 每周各品类热门商品销量前三
  17. 各区域热门商品销量前五(有利于后期铺货)
  18. 各区域漏斗分析
  19. 商品评价人数占比(该商品的总评价人数/该商品的总购买人数)
  20. 各品牌商家总销售额。
  21. 各品类中销量前三的品牌
  22. 购物车各品类占比(说明大家想买的东西,便于后期铺货。)
  23. 每周广告点击率。看到这个广告的人数/点击这个广告商品的人数)
  24. vip 用户每日,周订单总额
  25. 每日限时特卖产品占比(限时特卖产品总额/每日交易总额)
  26. 香港特快直送渠道总交易额占比(香港特快直送渠道总额/每日商品交易总额)
  27. 香港特快直送渠道总交易单占比
  28. 国内保税仓渠道总交易额占比(国内保税仓总额/每日商品交易总额)
  29. 国内保税仓渠道总交易单占比
  30. 各区域页面平均加载时长(考察各地区网络问题。后台访问是否稳定)
  31. 页面单跳转化率统计
  32. 获取点击下单和支付排名前 10 的品类
  33. 各类产品季度复购率
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
6月前
|
SQL 大数据
常见大数据面试SQL-每年总成绩都有所提升的学生
一张学生成绩表(student_scores),有year-学年,subject-课程,student-学生,score-分数这四个字段,请完成如下问题: 问题1:每年每门学科排名第一的学生 问题2:每年总成绩都有所提升的学生
|
7月前
|
分布式计算 监控 大数据
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
112 1
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
|
7月前
|
SQL 分布式计算 算法
程序员必备的面试技巧——大数据工程师面试必备技能
程序员必备的面试技巧——大数据工程师面试必备技能
120 0
|
7月前
|
缓存 运维 NoSQL
面试分享:Redis在大数据环境下的缓存策略与实践
【4月更文挑战第10天】探索Redis在大数据缓存的关键作用,本文分享面试经验及必备知识点。聚焦Redis数据结构(String、List、Set、Hash、Sorted Set)及其适用场景,缓存策略(LRU、LFU、TTL)与过期机制,集群和数据分片,以及性能优化和运维技巧。通过代码示例深入理解,助你面试成功,构建高效缓存服务。
181 4
|
7月前
|
消息中间件 分布式计算 Kafka
50道大数据精选面试题
50道大数据精选面试题
|
4月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
28天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
29天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
52 4
|
2月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
84 2
|
2月前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
32 0