离线电商数仓(一)

news2024/10/5 4:32:15

一、数据仓库概述

1. 数据仓库

数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个数据源的大量数据,企业可以从数据仓库中获取宝贵数据进行决策。

数据分类:业务数据、日志数据
将这两种数据从业务系统采集到Hive中:

  • 业务数据全量同步使用DataX, 增量同步使用Maxwell;
  • 日志数据使用Flume。

Hive数据仓库:

  1. ODS原始数据层
  2. DWD明细数据层:主要存储度量数据,不存储环境和描述信息,用于数据分析。但是会存储外键ID用于后期聚合。
  3. DIM维度数据层:主要存储维度信息,即明细数据中没有存储的环境信息和描述信息。
  4. DWS轻度聚合层:将数据轻度聚合,为了提高最终聚合的查询速度。
  5. ADS最终聚合层:数据分析的最终结果。

数仓建模概述

建模的意义:将数据分门别类,方便查询。

  • 高性能:快速查询所需的数据
  • 低成本:实现计算结果的复用,降低计算成本
  • 高效率:改善用户使用数据的体验,提高使用数据的效率
  • 高质量:改善数据统计口径的混乱,减少计算错误的可能性。

两大建模理论

  1. ER模型

    • 数据仓库之父Bill Inmon
    • 实体关系模型 + 规范化表示3范式
    • 实体关系:描述表之间关系
      • 一对一关系
      • 一对多关系
      • 多对多关系:一般多对多关系会进行拆分,添加一个中间表,拆分为两个一对多关系。
    • 数据库规范化:规范化的目的是为了减少数据冗余,增强数据的一致性。
      • 规范化越高,冗余越低,数据一致性越高,但是使用时所需的计算越多
      • 一般企业生产时只会用到三范式
    • 函数依赖:
      • 完全函数依赖:y=f(x), x为主键,假设主键是复合主键
      • 部分函数依赖: 只需要复合主键的一部分即可退出y
      • 传递函数依赖:a->b, b->c, 故a->c. 称为a和c存在传递函数依赖。
    • 三大范式:
      • 第一范式:属性不可切割,不能存在一个字段包含两个信息
      • 第二范式:主键必须是一个字段
      • 第三范式:表中不能存在传递函数依赖。
  2. 维度模型

  • 该模型的目的是为了减少join操作,即底层的shuffle操作。维度模型将复杂的业务通过事实维度两个概念进行呈现。
    • 事实是指跟业务计算相关的度量信息
    • 维度是指业务相关的环境信息(时间、地点、用户信息等信息)。
  • 计算时只需使用事实表即可,不需要将维度数据Join到一起,减少了数据的join操作。

2. 建表

事实表

事实表作为数据仓库维度建模的核心,紧紧围绕业务过程来设计。其包含业务过程有关的维度引用,即维度外键和业务过程的度量。

事务型事实表

  1. 选择业务过程:选择一条业务线,比如(下单,支付,收藏,评论)。
  2. 确定表名 xxx
  3. 确定字段
    • 粒度:确定业务数据的范围,即是一次的数据还是一天或者一个月的数据。业务上必须记录最细粒度的数据,更高粒度的数据可以由细粒度的数据推出来。
    • 维度:确定需要放入事实表的维度外键,选择逻辑一般是越多越好,避免后期业务需求要使用时没有该字段来进行分析。
    • 度量值:确定该事实表是用来统计什么信息的,该值是用来计算的,根据公司业务需求确定。

对于某些特定类型的需求,其逻辑可能会比较复杂,或者效率比较低下。比如:

  • 存量型指标:商品库存、账户余额等
  • 多事务关联统计: 统计下单到支付的时间间隔的平均值。要计算该事务,需要join下单表和支付表,因为这两个表都是大表,join操作效率很低。

周期型快照事实表

以具有规律性的、可预见的时间间隔来记录事实,主要用于分析一些存量型和状态型指标。一般该表不需要再额外计算,直接查询即可。

累积型快照事实表

基于一个业务流程的多个关键业务过程联合处理而构建的事实表,如交易流程中的下单、支付、收货、签收操作。

维度表

维度表是维度建模的基础和灵魂,维度表围绕业务过程所处的环境进行设计。主要包含一个主键和各种维度字段,维度字段称为维度属性。

维度表的设计步骤:

  1. 确定维度:理论上每个相关维度都需要建立一个维度表。如果存在多个事实表与同一个维度表存在关联,不要创建多个维度表。如果某些维度表的维度属性很少,例如只有一个名称,就可以将该属性维度退化到事实表中。
  2. 确定主维表和相关维表:主维表的粒度必须跟事实表一致。
  3. 确定维度属性:
    • 尽可能生成丰富的维度属性
    • 尽量不使用编码,而使用明确的文字说明
    • 删除掉无用的字段,比如头像URL,重复字段

维度表设计要点

规范化和反规范化问题:离线时建议使用星型模型,实时数据分析则建议为雪花模型。

在这里插入图片描述

  1. 维度变化:维度属性不是静态的,会随着时间变化,数据仓库的一个重要特点就是反映历史变化。
    • 全量快照表:通常每天保存一次全量的维度数据
      • 优点:简单有效,维护成本低
      • 缺点:浪费内存,大部分是冗余数据
    • 拉链表:记录每条信息的生命周期,一旦一条记录的生命周期结束,就重新开始一条新的记录。
      • 优点:适合数据会发生变化,但是变化频率并不高的维度,即缓慢变化维。
      • 缺点: 数据的起始时间和结束时间收到采集系统的粒度影响
  2. 多值维度问题:如果事实表中一条记录在某个维度表中多条记录与之对应,称为多值维度。事实上,出现该问题则说明事实表设计有误。
    • 降低事实表的粒度,建议尽量采用本方案解决多值维度问题。
    • 使用map集合类型保存或者struct类型保存

3. 数据仓库设计

合理的分层,能够使数据体系更加清晰,使复杂问题得以简化。

数据库分层
ODS层:主要用于备份,防止数据处理错误后没有重来的机会。
ODS层->DWD层:把ER模型改为维度模型,另外将数据全部改为表格类型数据。
DWS层:基于ADS的指标需求,存储一些中间表,构建公共统计粒度的汇总表。
ADS层:存放各项统计指标结果。

数据仓库构建流程

  1. 数据调研:明确老板的指标需求,了解当前公司业务的业务线,核实当前记录数据能否通过统计分析后满足老板的需求。
  2. 明确数据区域:比如将电商业务分为订单域,用户域,交互域(点赞,评论),方便并行开发,出现问题时也方便责任到某个开发者。
  3. 构建业务总线矩阵&明确统计指标
    • 总线矩阵:DWD层+DIM层
    • 指标汇总:明确指标和轻度聚合层
  4. 开发:编写SQL,建立仓库
  5. 调度:使用调度器定时采集数据进行分析统计。

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

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

相关文章

(yum+内网)centos7两种方式安装jdk11

一、yum在线安装 需要提前配置yum源。 搜索可安装的版本,可以看到有1.6、1.7、1.8、11共4个版本 yum search openjdk 安装jdk11 yum -y install java-11-openjdk 验证 java -version 二、内网离线安装 需要提前下载安装包。 安装包下载地址 https://www.or…

爬虫一般采用什么代理IP,Python爬虫代理IP使用方法详解

在进行网络爬虫开发时,使用代理IP是一种常见的技术手段,可以帮助爬虫程序实现更高效、稳定和隐秘的数据抓取。本文将介绍爬虫一般采用的代理IP类型,并详细解释Python爬虫中使用代理IP的方法。 一般来说,爬虫采用以下几种代理IP类型…

类模板Array带二个模板参数

#include <ostream> #include <iostream> using namespace std; //Array.h template <typename T, int size> class Array{ public: Array(); // 也算是默认构造函数&#xff0c;因为不需要传进去参数 bool push(T elem); void display(); priv…

Nacos全面知识 ----微服务 SpringCloud

快速入门 分级存储模型 修改集群配置 Nacos设置负载均衡策略 集群优先 权重优先 Nacos热更新配置 Nacos添加配置信息 微服务配置拉取 热更新:推荐使用第二种方法进行热部署 ConfigurationProperties(prefix "pattern") 是 Spring Boot 中用于自动配置属性的注解。它…

用“价值”的视角来看安全:《构建新型网络形态下的网络空间安全体系》

文章目录 写在前面安全认知的硬核概念威胁的演化路径与发展趋势构建网络空间安全体系好书推荐 写作末尾 写在前面 网络空间安全体系是建立在先进技术、严密监控和综合策略之上的综合性框架&#xff0c;旨在保护网络免受恶意攻击、数据泄露和网络犯罪的威胁&#xff0c;其核心包…

【代码随想录第48天】动态规划7

代码随想录第48天| 动态规划7 322. 零钱兑换279.完全平方数 322. 零钱兑换 LeetCode题目&#xff1a; 322. 零钱兑换 代码随想录&#xff1a;322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计…

Failed to start The nginx HTTP and reverse proxy server.

本章教程主要分享一下&#xff0c;当nginx 启动时&#xff0c;遇到报这个错误时的一个解决问题思路。 目录 1、观察报错信息 2、尝试性解决 1、观察报错信息 根据日志的信息&#xff0c;我们至少可以知道2个比较信息。 1、操作用户执行命令是在非root权限下进行操作的。 2、Ad…

NPI加速器在烽火科技SMT车间的应用:贴片机程序制作效率的革新

烽火科技&#xff0c;一个在国内颇具知名度的高科技企业&#xff0c;坐落于武汉光谷的SMT车间中&#xff0c;机器嗡嗡作响&#xff0c;作业员们忙碌地进行着生产。工厂使用的是ASM的贴片机&#xff0c;使用Sipalce Pro作为其编程软件。然而&#xff0c;在高效的生产线背后&…

面试算法37:小行星碰撞

题目 输入一个表示小行星的数组&#xff0c;数组中每个数字的绝对值表示小行星的大小&#xff0c;数字的正负号表示小行星运动的方向&#xff0c;正号表示向右飞行&#xff0c;负号表示向左飞行。如果两颗小行星相撞&#xff0c;那么体积较小的小行星将会爆炸最终消失&#xf…

使用 git revert 回退代码

步骤一&#xff1a;查看提交历史 git log 这会列出你的提交历史&#xff0c;包括提交的哈希值、作者、日期和提交消息。 退出日志&#xff1a;按键盘上的 Q 即可。 步骤二&#xff1a;使用 git revert 回退代码 找到你需要回退的版本号&#xff0c;即提交的哈希值&#xff…

vue3中刷新当前页面的三种方法

<div click"kannoFn">kanno</div> 1.location.reload()&#xff0c;缺点&#xff1a;刷新时会页面闪白 function kannoFn(){location.reload() } 2.history.go(0)&#xff0c;缺点&#xff1a;刷新时会页面闪白 function kannoFn(){history.go(0) } …

法国橡木与美国橡木:酒桶如何影响葡萄酒?

木材赋予葡萄酒神奇的质地、香气和味道&#xff0c;这是其他任何方式都无法实现的。大多数世界上最好的葡萄酒都是在桶中陈酿的&#xff0c;法国和美国的橡木是最常用的木材&#xff0c;还有来自匈牙利、罗马尼亚和高加索山脉的橡木&#xff0c;其他木材&#xff0c;如金合欢&a…

【JavaEE】TCP数据报套接字编程

一、TCP数据报套接字编程 1.1 ServerSocket API ServerSocket 是创建TCP服务端Socket的API ServerSocket 构造方法&#xff1a; ServerSocket 方法&#xff1a; 1.2 Socket API Socket 是客户端Socket&#xff0c;或服务端中接收到客户端建立连接&#xff08;accept方法&…

jira 实现search 查询

举一个简单的例子&#xff1b; 一个 bug 包含 leader, 9月13号解决。找到这条记录。 模糊查询 summary ~ "leader"比较大小 created < "2023/09/13"排序 ORDER BY created DESC参考&#xff1a; https://confluence.atlassian.com/jira063/advanced…

C++项目——云备份-②-第三方库认识

文章目录 专栏导读1. json 认识1.1 JSON 数据结构的特点 2. jsoncpp库认识3. json实现序列化案例4. json实现反序列化案例5. bundle文件压缩库认识6. bundle库实现文件压缩案例7.bundle库实现文件解压缩案例8.httplib库认识9. httplib库搭建简单服务器案例10. httplib库搭建简单…

python实现excel的数据提取

一文带你实现excel表格的数据提取 今天记录一下如何使用python提取Excel中符合特定条件的数据 在数据处理和分析的过程中&#xff0c;我们经常需要从Excel表格中提取特定条件下的数据。Python的pandas库为我们提供了方便的方法来进行数据查询和过滤。 Pandas 是 Python 语言…

代码随想录 Day26 贪心 01 全集 LeetCode455 分发饼干 LeetCodeT346摆动序列 LeetCdoe T53 最大子数组和

前言:贪心无套路 本质: 局部最优去推导全局最优 两个极端 贪心算法的难度一般要么特别简单,要么特别困难,所以我们只能多见识多做题,记住无需数学证明,因为两道贪心基本上毫无关系,我们只需要去思考局部最优即可 贪心的小例子 比如有一堆钞票&#xff0c;你可以拿走十张&#x…

vue 生命周期钩子函数 mounted()实例

在挂载后操作dom获取焦点。 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"w…

Maven3.9.2 bug IDEA指定配置文件不生效

Maven3.9.2 bug IDEA指定配置文件不生效 描述 运行新项目需要配置指定的settings.xml文件&#xff0c;一直报错找不到依赖&#xff0c;查看maven日志是从maven中心仓库找的依赖&#xff0c;自然找不到。 解决过程 清理idea缓存&#xff0c;仍然报错 删除/${username}/.m2/…

三分钟实现MQTT协议网关网口连接西门子SMART200PLC上传阿里云服务器

MQTT协议网关网口连接西门子SMART200PLC操作说明v1.4 目录 一. 使用流程 二. 准备工作 2.1 需要准备如下物品 2.2 LF220网关准备工作 2.3 PLC准备工作 2.4 电脑的准备工作 2.5 MQTT服务器准备工作 三. 阿里云IoT平台配置步骤 3.1 创建产品 3.2 添加设备 …