复制
收藏
提问
简洁

我的主要工作是:数仓建模和具体的业务指标分析 Flume日志采集到kafka->hdfs->load date ->hive Sqoop迁移到hive 我们的数仓分五层:ods->dwd->dws->dwt->ads 首先ods层是有个原始层,起到一个备份原始数据的作用。采用lzo压缩的方式对原始数据压缩,降低磁盘的存储空间,比如100g的数据可以压缩到10g.还可以采用分区的方式,避免后期的一个全表扫描。 然后到dwd层,对ods层数据进行清洗,一个是数仓建模。我们采用维度建模,星型模型,我们的核心业务过程有下单 支付 退款 评论 收藏 加购等。 一条业务线对应一张事实表。 根据核心业务过程,我们设计的总线矩阵,事实表有: 事务事实表:支付事实表,订单明细事实表,退款事实表,评论事实表。他的表结构和ods层中的表基本保持一致。主要看总线矩阵,看缺少哪些维度,找相关的表关联,补足。他的数据更新方式就是增量更新。比如说,支付事实表,我们要从时间、用户、地区维度统计分析。那么,原始的表中,缺少地区维度。我们需要关联订单表补足维度。 周期性快照事实表有收藏表和加入购物车表,数据会变化,但我们只统计他周期结束时的值。他的表结构和ods层中的表基本保持一致。主要看总线矩阵,看缺少哪些维度,找相关的表关联,补足。 最后是累积型事实表 是用于跟踪业务事实,有优惠券领用事实表和订单事实表。数据的特点是既有新增又有变化。这个变化有业务意义,需要记录。比如说订单事实表,订单状态的变化构成订单生命周期(创建时间=>支付时间=>取消时间=>完成时间=>退款时间=>退款完成时间),我们设计表的时候,需要为这六个环节设计对应的六个字段。因为这个生命周期可能是跨好几天才完成的,需要设计成动态分区表。数据更新,是累积更新,也就是当天的状态数据是new表,之前的数据是old表,然后old、new全外连接,利用new表里边的状态更新old表里的状态(sql) 维表设计,我们要符合星型模型。比如,商品维表,原始表有六张:一级、二级、三级类目表等等,那么我们就需要join成一张表。 用户维度表我们设计的是拉链表,因为用户表中的数据每天都有可能新增也有可能会修改。属于缓慢变化的维度 但是他修改的频率不是很高用全量去记录太过于浪费资源。 拉链表的制作有三个步骤:1、初始化拉链表,新增两个字段,开始时间、结束时间。 2、制作当日用户变化表,包含新增及变化的数据; 3、历史拉链表和用户变化表合并。 合并的逻辑是这样的。首先,历史拉链表 left join 用户变化表,求交集,交集部分是变化的数据,找到历史版本,如果结束时间是9999,修改成前一天;然后,union all 用户变化表。 dwd层日志数据,我们是这样处理的。利用 get_josn_object 函数,提取json对象然后转换成曝光日志,页面日志,对于复杂的数据,我们需要自定义udtf函数,进行处理。 dws 和dwt都是汇总层,这层表的设计,就是围绕某个主题,将相关业务事件汇总到一块儿,统计相关指标。目前,我们的主题,主要有用户主题、设备主题、商品主题、地区主题、营销主题。比如说,我们围绕用户主题,将登录、下单、支付、评论等汇总到一块儿,统计登录次数、下单次数等相关指标。dws层的主要是以天汇总的,统计每天的登录次数、下单次数、支付次数等;然后这个dwt层就是一个累计汇总,统计的是,首次下单、末次下单,累积下单次数这样的指标。汇总层细分成dws、dwt的好处是:减少了重复计算,还有每次计算的数据量。比如说,我们统计30天、60天、90天的订单量,如果没有按天汇总的话,我们就要拉取30天、60天的数量。数据量大,并且有重复计算。有按天汇总的话,我们就是在天的基础上,30个数字、60个数字的加总。 最后到ads层就是对电商系统各大主题指标分别进行分析 有日活周活月活,每日新增用户数 会员数,沉默,回流用户数,七天连续三天登录,咱这个会员主题用的就是漏斗分析,有这个浏览首页 浏览商品详情页 加入购物车 下单 支付的这个转化率 商店个数信息等这些指标。 用户行为漏斗分析:当日首页浏览人数-->商品详情页浏览人数-->加购人数-->下单人数-->支付成功人数 七天内连续登录三次:ROW_NUMBER()根据mid_id分组,dt(时间)排序 rn,用date_sub求出七天内的,最后dt-rn >=3天 本周回流

3月前
全网
文档
学术
百科
知识库
时间不限
自动
回答简洁模式
深入研究一些

您的工作涉及数仓建模和业务指标分析,具体流程包括数据采集、数据存储、数据加载、数据迁移、以及数据建模和分析等多个环节。以下是对您所描述工作流程的详细解释:

数据采集与存储

  • 使用Flume将日志数据从Kafka采集到HDFS,Flume配置文件kafka_to_hdfs_db.conf负责这一过程6
  • ODS层作为原始数据层,采用LZO压缩和分区技术,以减少存储空间并提高查询效率5

数据清洗与建模

  • 在DWD层,对ODS层数据进行清洗,并采用维度建模和星型模型。核心业务过程如下单、支付等,每条业务线对应一张事实表7
  • 事实表分为事务事实表、周期性快照事实表和累积型事实表,根据业务需求进行数据更新和维度补足1

维度表设计

  • 维表设计遵循星型模型,例如商品维表通过JOIN操作整合成单一维度表。
  • 用户维度表采用拉链表设计,处理缓慢变化的维度,通过初始化、制作当日变化表和合并历史拉链表三个步骤来实现5

高级数据处理

  • DWD层的日志数据处理使用get_json_object函数提取JSON对象,并可能需要自定义UDTF函数处理复杂数据2

数据汇总

  • 在DWS和DWT层,围绕特定主题如用户、设备、商品等进行数据汇总,统计相关业务指标。DWS层以天为单位进行汇总,而DWT层进行累计汇总,以减少重复计算和数据量5

业务指标分析

  • ADS层对电商系统各大主题指标进行分析,包括日活、周活、月活、新增用户数、会员数等。使用漏斗分析、连续登录等方法进行用户行为分析4

用户行为分析示例

  • 用户行为漏斗分析:从首页浏览到支付成功人数的转化率分析。
  • 七天内连续登录三次的分析:使用ROW_NUMBER()date_sub函数进行时间序列分析。

您的工作流程体现了数据仓库建模的深度和复杂性,涵盖了从数据采集到最终的业务分析的全过程。通过这种分层和主题化的建模方法,可以有效地支持数据分析、报告和决策制定39。同时,实时数仓的应用确保了数据的时效性,适用于实时OLAP分析和业务监控8

你觉得结果怎么样?
数仓建模中ods层的作用是什么?
如何使用Flume进行日志采集?
Kafka在数据流中的作用是什么?
Hive在数仓建模中的角色是什么?
Sqoop在数据迁移中的作用是什么?
星型模型在数仓建模中的应用是什么? 如何设计数仓的维度表?

以上内容由AI搜集生成,仅供参考

在线客服