2023.11.29 -hmzx电商平台建设项目 -核销主题阶段总结

目录

1.准备源数据

2.准备数仓工具进行源数据同步到ods层,本项目使用Datax

 3.使用Datax完成数据同步前建表时的方案选择

3.1同步方式区别:

3.2存储格式和压缩区别:

4.在hive中创建表,共31个表

5.数仓概念 和 数仓建模方案

5.1数仓的基本概念

5.2 数仓建模方案

关系建模:

 维度建模:

两张表关系:

数仓发展的三种模型:

 5.3数仓建设方案:

6.使用海豚调度完成ODS层到DWD层数据导入

6.1 先在DWD层建表

6.2 DWD层导入数据准备

6.3使用海豚调度平台创建导入数据的工作流,部署上线

​编辑

7.核销主题数仓建模

7.1核销主题需求

7.1.1 商品销售情况(核销)分析

7.1.2经营情况(已核销)分析

7.1.3 门店营销(核销)情况分析

销售渠道需求:

日清活动需求:

涉及表:


 

1.准备源数据

本项目的源数据层,由本地的Mysql和Sqlserver中而来,共31张表

销售表,会员表,订单表,库存表都称为指标/事实表,记录实际的业务数据 

2.准备数仓工具进行源数据同步到ods层,本项目使用Datax

datax的介绍:离线数据同步工具

 3.使用Datax完成数据同步前建表时的方案选择

3.1同步方式区别:

a.全量覆盖:建表时不需要构建分区表,每次一都是将之前的数据全部删除,重新导入 ,弊端是会没有历史数据

b.全量同步:建表时要构建分区表,分区字段与更新周期保持一致,每一次导入都是将表中所有数据导入到新的分区,弊端是如果新增的量很少,每次都是完全同步,会极大占用存储空间,以及有非常多的重复数据.

c.仅新增:建表时需要构建分区表,分区字段与更新周期保持一致,每一次导入都是将新增的数据导入到新的分区中

d.新增并更新:建表时需要构建分区表,分区字段与更新周期保持一致,每一次导入都是将新增的数据和更新的数据导入到一个新的分区中

e.缓慢渐变维:为了维护变化的数据, 有以下方法  1.直接覆盖 2.将新增和更新的数据放置到一个新的分区. 3.拉链表新增两个字段,一个开始一个结束,当数据发送变化的时候,将之前的数据结束时间调整为上一天的日期,新增一条新变更后的数据,开始时间为上一条结束时间

3.2存储格式和压缩区别:

存储格式一般选择orc ,  压缩方案:读多写少为snappy  /  写多读少为zlib或者gz

4.在hive中创建表,共31个表

构建的31张表分为8个维度表,23个业务数据表(事实表,指标表)

全量覆盖:适用于一般数据量较少,并且长时间不会改变,也不需要维护历史变化.  用于维度表,销售额目标等

全量同步:适用于保留历史快照, 用于每天门店商品库存天表.

仅新增:适用于数据量比较大,不需要维护历史变化的, 用于各种信息表,调货表

新增且更新:适用于数据量大,又需要维护历史变化,比如会员的信息表,商城订单明细表

5.数仓概念 和 数仓建模方案

5.1数仓的基本概念

5.2 数仓建模方案

关系建模:

 维度建模:

两张表关系:

1.事实表:根据分析的主题,主体所对应的表一般为事实表;事实表一般是由一堆其他表主键聚集的,事实表一般是由用户某种行为而产生的

2.维度表:在对事务进行分词处理的时候,在统计某个维度的时候,需要关联其他的表,这些表就是维度表.

数仓发展的三种模型:

 5.3数仓建设方案:

6.使用海豚调度完成ODS层到DWD层数据导入

6.1 先在DWD层建表

DWD层: 明细层

  • 作用: 根据要分析的主题, 从ODS层抽取相关的数据, 对数据进行清洗转换处理工作, 然后将数据加载到DWD层, 一般将此层称为 大聚合层, 一般将所有相关的数据全部糅杂在一个表中, 在此过程中, 可以进行一定的维度退化操作

  • 什么叫转换处理呢? 
        比如说: 对于时间而言, 在ODS表中有一个时间字段, 字段数据为:  2020-12-10 15:30:30
        说明:
            在ODS层这个时间字段上, 糅杂了太多字段数据, 包含 年  月  日 小时 分钟 秒
        此时, 需要将字段导入到DWD层时候, 将其转换为  年 月 日 小时 ...

维度层数据都是系统基础数据, 数据质量比较高, 顾一般不需要进行清洗处理操作

ods_dim_category_f进行了分类拉平操作

 ods_dim_goods_info_f将分类ID替换为对应一二三级分类ID,编码和名称

 ods_dim_store_f 门店表进行了降维操作 变成 dwd_dim_store_i

门店表: 在门店宽表构建时,就添加了门店面积信息和区域名称信息,门店面积信息可以用来计算坪效等,区域名称信息可以用来上卷时显示区域名称。

  • 其中门店面积信息可以从分店面积明细表中获取。先取实际经营面积,如果取不到(实际经营面积为空或0)再取经营面积。

  • 其中区域名称信息从店组信息表中取,store_group_type_no = ‘04’即对应区域的编码和名称。

  • 其中 store_type_code和management_type_code 需要转换为整数类型

新增了dwd_dim_store_clear_goods_i门店商品日清表,在门店商品表dwd_dim_store_goods_i的基础上筛选出日清数据,结构与门店商品表一致

6.2 DWD层导入数据准备

DATE_SUB()函数从DATE或DATETIME值中减去时间值(或间隔)。 

1.dim.dwd_dim_date_f时间维度表:不需要任何处理,直接将ODS层数据导入到DWD层即可

2.dim.dwd_dim_category_statistics_i 商品分类表进行拉宽处理

3.dim.dwd_dim_goods_i 商品表 ,将ods商品表和dwd分类表根据分类id进行关联

4.dim_dwd_dim_store_goods_i 门店商品表 , 将ods门店商品表和dwd分类表 根据分类id进行关联

5.dim_dwd_dim_store_clear_goods_i 日清门店商品表, 在门店商品表处理完后,通过条件where is_clear  = 1 即可

6.dim_dwd_dim_source_type_map_i 交易类型映射表,直接从ods导入dwd即可

7.dwd_dim_store_i 门店表 

6.3使用海豚调度平台创建导入数据的工作流,部署上线

DS的架构

7.核销主题数仓建模

核销主题:分为售卖主题-下单时间 ,  核销主题-订单完成时间/库存处理时间

目前dwd层共有30张表,核销主题共涉及到21张表

维度:dim_date_f , dim_source_type_map_f ,dim_store_f,dim_goods_f,dim_store_f

销售:store_sale_dtl,store_sale_info,store_sale_pay,shop_order,shop_order_item,shop_sale_pay,shop_refund,shop_refund_item

会员:member_union

订单:store_receive , store_return_to_vendor,store_return_to_dc,store_alloc_in,store_alloc_out,store_require

库存:store_stock_adj

7.1核销主题需求

7.1.1 商品销售情况(核销)分析

需求:了解不同城市,各个门店以及各个品类商品每天的销售情况

指标:销售单量、销售数量、销售金额、折扣金额、销售成本、余额支付金额、取消商品销售金额、退款商品销售金额、线上单量、线下单量、线上销售金额、线下销售金额、线上销售成本、线下销售成本、损耗金额、收货金额(收货-退货-退配+调入-调出)、要货金额

维度:时间,区域,类别

粒度:时间维度(天,下钻至刻),区域维度(城市,门店),类别维度(商品,第一品类,第二品类,第三品类)

涉及库:sale,member,order,stock

事实表:

sale: store_sale_dtl、store_sale_info、store_sale_pay、shop_order、shop_order_item、shop_sale_pay、shop_refund、shop_refund_itemmember: member_unionstock: store_stock_adjorder: store_receive、store_return_to_vendor、store_return_to_dc、store_alloc_in、store_alloc_out、store_require

维度表:

 dim: dwd_dim_date_f、dwd_dim_source_type_map_f、dwd_dim_store_f、dwd_dim_goods_f、dwd_dim_store_goods_f

7.1.2经营情况(已核销)分析

需求:了解不同城市,各个门店每天的销售情况(已核销)

指标:销售单量、销售数量、销售金额、折扣金额、销售成本、余额支付金额、取消商品销售金额、退款商品销售金额、线上单量、线下单量、线上销售金额、线下销售金额、线上销售成本、线下销售成本、损耗金额、收货金额(收货-退货-退配+调入-调出)、要货金额、线上会员单量、实体卡会员单量、线上会员销售金额、实体卡会员销售金额、线上会员销售成本、实体卡会员销售成本、线上会员下单人数、实体卡会员下单人数、使用余额销售金额、使用余额单量、使用余额的销售成本、使用余额的下单人数

维度:时间,区域

粒度:时间维度(天,下钻至刻),区域维度(城市,门店)

涉及库:sale,member,order,stock

涉及表: 

  • 1) 事实表:

    a) sale:store_sale_dtl、store_sale_info、store_sale_pay、shop_order、shop_order_item、shop_sale_pay、shop_refund、shop_refund_item

    b) member:member_union

    c) stock:store_stock_adj

    d) order:store_receive、store_return_to_vendor、store_return_to_dc、store_alloc_in、store_alloc_out、store_require

  • 2) 维度表:

    dwd_dim_date_f、dwd_dim_source_type_map_f、dwd_dim_store_f、dwd_dim_goods_f、dwd_dim_store_goods_f

7.1.3 门店营销(核销)情况分析

说明:了解各个门店营销情况,包括不同销售渠道(已核销)的销售情况以及日清活动的效果。【日清活动指的是,为了保证果蔬的新鲜度,一些商品当日出清,为了能出清商品,会采用打折的方式出售,并且随着时间的推移,越晚折扣越低。】

销售渠道需求

指标:订单量、退款订单量、取消订单量、商品销售金额、商品销售成本、商品折扣金额

维度:订单渠道

日清活动需求

指标:销售SKU数、销售单量、销售数量、销售金额、折扣金额、销售成本、销售利润、线上单量、线下单量、线上销售金额、线下销售金额、损耗金额、收货金额(收货-退货-退配+调入-调出)、要货金额、

维度:区域、品类

粒度:区域维度(门店)、品类维度(第一品类)

涉及库:sale、member、order、stock

涉及表:
  • 1) 事实表:

    a) sale:store_sale_dtl、store_sale_info、store_sale_pay、shop_order、shop_order_item、shop_sale_pay、shop_refund、shop_refund_item

    b) member:member_union

    c) stock:store_stock_adj

    d) order:store_receive、store_return_to_vendor、store_return_to_dc、store_alloc_in、store_alloc_out、store_require

  • 2) 维度表:dwd_dim_date_f、dwd_dim_source_type_map_f、dwd_dim_store_f、dwd_dim_goods_f、dwd_dim_store_goods_f

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信贷销售经理简历模板

这份简历内容,以信贷销售经理招聘需求为背景,我们制作了1份全面、专业且具有参考价值的简历案例,大家可以灵活借鉴。 信贷销售经理简历模板在线编辑下载:百度幻主简历 求职意向 求职类型:全职 意向岗位&#xff…

光伏设计软件:创新工具,提升设计效率与质量

随着可再生能源的全球关注度不断提高,光伏产业也迎来了前所未有的发展机遇。光伏设计软件作为支持光伏项目的重要工具,为设计师提供了强大的功能,以优化设计过程,提高设计效率,减少错误,降低成本。 首先&am…

保存规则、nat、自定义链

目录 一、保存防火墙的规则 1、保存规则 二、nat 一、SNAT和DNAT 1.SNAT 2 DNAT 三、自定义链 1.添加自定义链 2.设置自定义链并生效 3.删除自定义链 一、保存防火墙的规则 1、保存规则 [rootlocalhost ~]# iptables -A INPUT -s 172.16.114.30 -p tcp -m multiport…

科技与教育:未来教育的新趋势

在21世纪,科技的快速发展正在深刻地改变教育行业。从在线学习平台到虚拟现实教室,科技为教育带来了革命性的变化。本文将探讨科技如何影响现代教育,并预测未来教育的发展趋势。 一、科技在教育中的应用 在线学习平台:通过平台如C…

深入解析 Python 中 Parsel 的两种数据提取方式

更多资料获取 📚 个人网站:ipengtao.com 在网络爬虫的世界中,数据提取是至关重要的一环。Python 提供了许多强大的工具,其中之一就是 parsel 库,专门用于解析和提取 HTML 或 XML 数据。本篇博客将深入探讨 parsel 中两…

信贷专员简历模板

这份简历内容,以信贷专员招聘需求为背景,我们制作了1份全面、专业且具有参考价值的简历案例,大家可以灵活借鉴。 信贷专员简历在线编辑下载:百度幻主简历 求职意向 求职类型:全职 意向岗位:信贷专员 …

LRU缓存淘汰策略的实现——LinkedHashMap哈希链表

LRU(最近最少使用)缓存淘汰策略可以通过使用哈希链表实现。LinkedHashMap 是 Java 中提供的一种数据结构,它综合了哈希表和双向链表的特点,非常适合用来实现 LRU 缓存。 LinkedHashMap 内部维护了一个哈希表和一个双向链表。哈希…

使用Jetty编写RESTful接口

一、依赖 <!--Jetty服务器的核心依赖项&#xff0c;用于创建和管理服务器。--><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-server</artifactId><version>9.4.43.v20210629</version></dependency…

spring框架的事务传播级别经典篇

一 spring事务传播级别 1.1 总结概述 方法A:外围方法&#xff0c;方法B&#xff1a;内部方法&#xff0c;在A中调用B 1.事务级别PROPAGATION_REQUIRED&#xff1a; 如果A为PROPAGATION_REQUIRED&#xff1a;B 不管有没有设置事务级别&#xff0c;都会加入到A的事务级别中。如…

【驱动】串口驱动分析(四)-串口编程和调试方法

串口调试 串口调试主要有 根据/proc系统信息确认串口状态&#xff0c;stty命令&#xff0c;编程调试 三种调试方法&#xff0c;下面我们分别具体介绍下。 根据设备节点确认串口是否正常 系统上电时&#xff0c;默认会使能串口&#xff0c;我们可以通过dmesg | grep ttyS 查看…

SSM6 11-27 SpringMvc过滤器和异常处理

try catch:处理异常 throw/throws:不处理 抛出 jvm中断程序运行 打印错误信息 web:经典三层模型&#xff1a; dao(mapper) service web层 异常抛给web层Controller类的方法&#xff0c;每个方法可能处理异常,可能处理异常代码相似,造成重复代码重复编写 web层再往上抛 …

【驱动】串口驱动分析(二)-tty core

前言 tty这个名称源于电传打字节的简称&#xff0c;在linux表示各种终端&#xff0c;终端通常都跟硬件相对应。比如对应于输入设备键盘鼠标&#xff0c;输出设备显示器的控制终端和串口终端。也有对应于不存在设备的pty驱动。在如此众多的终端模型之中&#xff0c;linux是怎么…

Flutter使用flutter_gen管理资源文件

pub地址&#xff1a; https://pub.dev/packages/flutter_gen 1.添加依赖 在你的pubspec.yaml文件中添加flutter_gen作为开发依赖 dependencies:build_runner:flutter_gen_runner: 2.配置pubspec.yaml 在pubspec.yaml文件中&#xff0c;配置flutter_gen的参数。指定输出路…

《C++ Primer》第10章 算法(二)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 10.4 再探迭代器&#xff08;P357&#xff09; 除了为每个容器定义的迭代器外&#xff0c;头文件 iterator 中还定义了额外的几种迭代器&#xff1a; 插入迭代器&#xff08;insert iterator&#xff09;&…

Selenium 连接到现有的 Google Chrome 示例

python 3.7 selenium 3.14.1 urllib3 1.26.8 Google Chrome 119.0.6045.160 (64位) chromedriver.exe 119.0.6045.105(win32) 1 Google Chrome 添加参数 "--remote-debugging-port9222" 2 测试效果(chromedriver.exe 要和 Google Chrome 版本…

vue3 router-view 使用keep-alive报错parentcomponent.ctx.deactivate is not a function

问题 如下图&#xff0c;在component组件上添加v-if判断&#xff0c;会报错: parentcomponent.ctx.deactivate is not a function 解决方法 去除v-if&#xff0c;将key直接添加上。由于有的公用页面&#xff0c;需要刷新&#xff0c;不希望缓存&#xff0c;所以需要添加key…

分支和循环

通常来说&#xff0c;C语言是结构化的程序设计语言&#xff0c;这里的结构包括顺序结构、选择结构、循环结构&#xff0c;C语言能够实现这三种结构&#xff0c;如果我们仔细分析&#xff0c;我们日常生活中所见的事情都可以拆分为这三种结构或者它们的组合。 下面我会仔细讲解我…

【人工智能Ⅰ】实验4:贝叶斯分类

实验4 贝叶斯分类 一、实验目的 1. 了解并学习机器学习相关库的使用。 2. 熟悉贝叶斯分类原理和方法&#xff0c;并对MNIST数据集进行分类。 二、实验内容 1. 使用贝叶斯方法对mnist或mnist variation数据集进行分类&#xff0c;并计算准确率。数据集从网上下载&#xff0…

vue.js ——Vuex

基本概念 vue进行开发过程中有没有遇到这样一种场景&#xff0c;就是有些时候一些数据是一种通用的共享数据&#xff08;比如登录信息&#xff09;&#xff0c;那么这类数据在各个组件模块中可能都会用到&#xff0c;如果每个组件中都去后台重新获取那么势必会造成性能浪费&am…

websocket 消息包粗解

最近在搞websocket解析&#xff0c;记录一下: 原始字符串 &#xfffd;~&#xfffd;{"t":"d","d":{"b":{"p":"comds/comdssqmosm7k","d":{"comdss":{"cmdn":"success",…