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

news2024/11/16 9:52:36

目录

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_item

member: member_union

stock: store_stock_adj

order: 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.coloradmin.cn/o/1272128.html

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

相关文章

java论坛数据以及搜索接口实现

一. 内容简介 java论坛数据以及搜索接口实现 二. 软件环境 2.1 java 1.8 2.2 mysql Ver 8.0.13 for Win64 on x86_64 (MySQL Community Server - GPL) 2.3 IDEA ULTIMATE 2019.3 2.4d代码地址 三.主要流程 3.1 创建数据库,创建数据表 3.2 开始编写接口,并测…

C/C++不定参数的使用

文章目录 C语言的不定参C的不定参 C语言的不定参 C语言的不定参数最常见的应用示例就是printf函数&#xff0c;如下&#xff0c;参数列表中的...表示不定参数列表 #include <stdio.h> int printf(const char *format, ...);试着模拟实现C语言的printf函数 void myprin…

新手村之SQL——分组与子查询

1.GROUP BY GROUP BY 函数就是 SQL 中用来实现分组的函数&#xff0c;其用于结合聚合函数&#xff0c;能根据给定数据列的每个成员对查询结果进行分组统计&#xff0c;最终得到一个分组汇总表。 mysql> SELECT country, COUNT(country) AS teacher_count-> FROM teacher…

Linux系统部署Tale个人博客并发布到公网访问

文章目录 前言1. Tale网站搭建1.1 检查本地环境1.2 部署Tale个人博客系统1.3 启动Tale服务1.4 访问博客地址 2. Linux安装Cpolar内网穿透3. 创建Tale博客公网地址4. 使用公网地址访问Tale 前言 今天给大家带来一款基于 Java 语言的轻量级博客开源项目——Tale&#xff0c;Tale…

敏捷开发实现测试自动化的6个步骤

许多敏捷软件开发中的自动化测试的工作都失败了&#xff0c;或者并没有发挥它们最大的潜力。本文研究分析了自动化测试也许不能满足测试人员和其他利益相关者期望的两个主要原因&#xff0c;然后列举了六个能够避免陷入这些陷阱的步骤。以下是在敏捷环境中成功实现测试自动化的…

Linux系统iptables扩展

目录 一. iptables规则保存 1. 导出规则保存 2. 自动重载规则 ①. 当前用户生效 ②. 全局生效 二. 自定义链 1. 新建自定义链 2. 重命名自定义链 3. 添加自定义链规则 4. 调用自定义链规则 5. 删除自定义链 三. NAT 1. SNAT 2. DNAT 3. 实验 ①. 实验要求 ②. …

设计模式-创建型模式之原型、建造者设计模式

文章目录 七、原型模式八、建造者模式 七、原型模式 原型模式&#xff08;Prototype Pattern&#xff09;是用于创建重复的对象&#xff0c;同时又能保证性能。它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口&#xff0c;该接口用于创建当前对象的克隆。当直…

C题目12:请写一个函数,判断一个数是否为质数,并在main函数中调用

一.每日小语 人的一切痛苦&#xff0c;本质上都是对自己的无能的愤怒。——王小波 自己思考 判断一个函数是否为质数&#xff0c;这个我在之前练过&#xff0c;我想至少两次&#xff0c;而这一次则是问我如何在main函数中调用&#xff0c;这个概念我不理解&#xff0c;所以我…

软件测试面试最全八股文

请你说一说测试用例的边界 参考回答&#xff1a; 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充&#xff0c;这种情况下&#xff0c;其测试用例来自等价类的边界。 常见的边界值 1)对16-bit 的整数而言 32…

在gitlab上使用server_hooks

文章目录 1. 前置条件2. Git Hook2.1 Git Hook 分为两部分&#xff1a;本地和远程2.1.1 本地 Git Hook&#xff0c;由提交和合并等操作触发&#xff1a;2.1.2 远程 Git Hook&#xff0c;运行在网络操作上&#xff0c;例如接收推送的提交&#xff1a; 3. 操作步骤3.1 对所有的仓…

Linux 命令pwd

命令作用 pwd是Linux中一个非常有用而又十分简单的命令&#xff0c;pwd是词组print working directory的首字母缩写&#xff0c;即打印工作目录&#xff1b;工作目录就是你当前所处于的那个目录。 pwd始终以绝对路径的方式打印工作目录&#xff0c;即从根目录&#xff08;/&am…

半同步复制与MHA高可用架构设计

各位道友好&#xff0c;鼠鼠我呀校招刚通过了移动的面试 &#xff0c;但是安排的岗位是偏远县城里面的岗位&#xff0c;各位能给给建议吗&#xff1f;鼠鼠我啊真不想有时候变成销售员去卖产品&#xff01;&#xff01;&#xff01; 半同步复制与MHA高可用架构设计 一、半同步复…

力扣202题 快乐数 双指针算法

快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&#…

LeetCode(44)存在重复元素 II【哈希表】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 存在重复元素 II 1.题目 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xf…

.net-去重的几种情况

文章目录 前言1. int 类型的list 去重2. string类型的 list 去重3. T泛型 List去重4. 使用HashSet List去重5. 创建静态扩展方法 总结 前言 .net 去重的几种情况 1. int 类型的list 去重 // List<int> List<int> myList new List<int>(){ 100 , 200 ,100…

波奇学C++:C++11的可变参数模板和emplace

可变参数模板 // args是参数包 template<class T,class ...Args> void _ShowList(T value, Args... args) {cout << sizeof...(args) << endl; // 2cout << value << " ";/*_ShowList(args...);*/} int main() {_ShowList(1,2,3); re…

CSS 在性能优化方面的实践

前言 CSS&#xff08;层叠样式表&#xff09;是一种用于描述网页外观和格式的语言。随着网页变得越来越复杂&#xff0c;CSS文件的大小也随之增加&#xff0c;这可能会对网页性能产生负面 .box {width: 100px;height: 100px;transition: transform 0.3s; }.box:hover {transf…

算法通关村第一关—链表高频面试题(白银)

链表高频面试题 一、五种方法解决两个链表的第一个公共子节点的问题 面试 02.07.链表相交1.首先想到的是暴力解&#xff0c;将第一个链表中的每一个结点依次与第二个链表的进行比较&#xff0c;当出现相等的结点指针时&#xff0c;即为相交结点。虽然简单&#xff0c;但是时间…

SS6810R40V/1A 步进电机驱动芯片 替代ROHM BD68610EFV

SS6810R 是一款由 PWM 电流驱动的双极低功 耗电机驱动集成芯片。 SS6810R 有两路 H 桥驱 动&#xff0c;最大输出 40V /1A。输入接口采用 Pala-IN 的驱 动方式&#xff0c;电流衰减模式可选择为快衰减、慢衰减和 混合衰减&#xff0c;且可以任意设置快衰减与慢衰减的比 例…

【Linux】firewall防火墙配置-解决Zookeeper未授权访问漏洞

背景&#xff1a; zookeeper未授权访问漏洞&#xff0c;进行限制访问&#xff0c;采用防火墙访问策略 配置步骤&#xff1a; ##查看firewall配置清单 firewall-cmd --list-all ##查到为关闭态&#xff0c;启动防火墙 systemctl start firewalld ## 添加端口&#xff0c;这里…