数仓项目

数仓项目

题目:电商交易域模型建设&用户主题资产建设

项目流程:

1.交易数据接入:

完成数据源到数仓的数据接入,完成ODS层的交易数据同步。

2.交易数据明细层模型建设:

DWD&DWM:按照电商交易业务流程SOP划分完成相应内容类型的数据域建设,梳理清楚模型设计5要素(数据域、粒度、维度、度量、事实),构建总线矩阵,完成明细层转换、解析清洗,并维度退化,合并成大宽表,包括:交易域-订单明细大宽表、交易域-退货明细大宽表。

3.交易域轻度汇总层建设:

DWS:根据需求调研口径按照维度,颗粒度,周期跨度完成轻度汇总公共指标模型的建设。

4.交易域相关用户主题资产建设

ADS:通过DWS层公共指标组合及DWM明细内容加工完成ADS应用模型开发,建设用户主题资产表,包括:用户基本信息、用户订单统计信息、用户类型、用户价值。

数仓项目详细

1.交易数据接入

使用maxwell将业务数据增量接入到hdfs中,并使用load进行载入。

maxwell定义

  • maxwell是一个Mysql数据库的增量数据捕获工具,通过读取Mysql的binlog日志来捕获数据变化,以Json格式发送到下游系统。

maxwell底层原理

  • mysql的binlog 是记录数据库数据变化的日志文件,所有的 INSERT、UPDATE、DELETE 以及对表结构的更改操作(如 ALTER TABLE)都会写入 binlog 中。这使得 binlog 成为数据库增量数据捕获的重要来源。

使用datax将业务数据全量接入到hdfs中,并使用load进行载入。

datax和sqoop的区别

  • sqoop采用mr进行导入导出,datax仅采用单机,datax单机压力大一些。
  • sqoop 只可以在关系型数据库和 hadoop 组件之间进行数据迁移,在hadoop组件之间,关系型数据库之间无法进行迁移,而datax可以。
  • sqoop 只支持官方提供的指定几种关系型数据库和 hadoop 组件之间的数据交换,datax用户可以自定义插件。

datax的内部结构

  • readplugin->framework->writeplugin
  • FrameWork 用于连接reader和write,作为两者的数据传输通道,处理缓冲,流控,并发,转换等核心技术问题。

datax为什么不能代替flume

  • flume面向海量的日志文件采集,datax用于数据同步,数据迁移

ods层的字段要与数据源字段保持一致,不进行处理,命名ods_ {库名}_ {表名}_ {df/di}

项目中flume的source、channel、sink分别是什么类型的

  • source是kafkaSource,channel类型是file,sink类型是hdfs

flume拦截器怎么实现

  • 实现Interceptor接口,重写initialize(),intercept(Event event),close()方法。intercept中取event的body的相关信息,用fastjson赋值给header再返回event。

2.dwd数据etl

  • 统一字段名和字段类型,例如code和name,并将code的相关描述从枚举值维护表中退化到dwd中转化为name
  • 从单字段的json数据中取出需要的数据,例如address字段
  • 数据分区的改造设计,以日期为分区,接入每一天的ods数据时首先向dwd插入createtime为当天的新数据,再对180天内的数据进行回刷,使数据的更新及时的同步到dwd中

3.dwm 维度退化 将所有维度join到该表,并用id对同一个数据域中的所有表进行连接

4.dws 从dwm中进行取数,计算公共指标,对指标进行汇总(不跨域)(统一指标口径、防止指标计算逻辑混乱、减少指标重复计算)

包括最近n天(1,7,14,30,90)的创建订单数,支付订单数,交易成功订单数,订单未支付量,交易成功订单金额,平台补贴,商家补贴,各类商品订单的订单数,订单金额,收藏数,最大消费单笔金额,最高sku消费金额,折扣订单数量

5.ads,用户维表join交易域订单域的dws(跨域)

用户价值:是否为高价值用户,最近90天内最大单笔消费大于8000或最近90天内成功订单数为2-4个,总额为8000,或最近90天内成功订单>=5,最大单笔消费为1200。

用户类型:

1
2
3
4
5
6
7
8
9
case when MONTHS_BETWEEN(substr(register_time,1,10),'${bizdate}')<=1 and t4.order_create_cnt_30d=0              
then '未购新用户'
when MONTHS_BETWEEN(substr(register_time,1,10),'${bizdate}')<=1 and t4.order_create_cnt_30d>0
then '已购新用户'
when MONTHS_BETWEEN(substr(register_time,1,10),'${bizdate}')>1 and t4.order_create_cnt_90d=0
then '未购老用户'
when MONTHS_BETWEEN(substr(register_time,1,10),'${bizdate}')>1 and t4.order_create_cnt_90d>0
then '已购老用户'
as user_register_type --STRING COMMENT '用户类型' ,

业务流程:下单-订单优惠-订单支付-订单物流-订单取消

表:主订单表,子订单表,订单优惠表,订单支付表,订单申诉状态表,支付表,物流表,物流轨迹表, 取消订单表,订单退款表,取消订单物流表,取消订单优惠表,商品spu信息表、商品sku信息表、退货原因表


数仓项目
http://example.com/2024/12/17/数仓开发/数仓/数仓项目/
Author
lpy
Posted on
December 17, 2024
Licensed under