首页 > 其他分享 >大数据-247 离线数仓 - 电商分析 拉链表的分析与构建与回滚

大数据-247 离线数仓 - 电商分析 拉链表的分析与构建与回滚

时间:2024-12-11 10:27:26浏览次数:7  
标签:orderid 数仓 06 21 离线 2020 date 电商 orders

点一下关注吧!!!非常感谢!!持续更新!!!

Java篇开始了!

目前开始更新 MyBatis,一起深入浅出!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(已更完)
  • DataX(已更完)
  • Tez(已更完)
  • 数据挖掘(已更完)
  • Prometheus(已更完)
  • Grafana(已更完)
  • 离线数仓(正在更新…)

章节内容

上节我们完成了如下的内容:

  • 电商分析 拉链表的分析
  • 构建与回滚

在这里插入图片描述

周期性事实表

定义

周期性事实表记录的是定期发生的业务事件或度量数据,例如每天、每月或每季度的数据。其设计目的在于帮助用户快速查询和分析这些周期性数据的趋势和变化。

时间周期性

周期性事实表以时间为主要维度,每一条记录都与某一时间点或时间段对应。例如:

  • 每天的销售总额
  • 每月的库存水平
  • 每季度的客户新增量

粒度

粒度是指事实表中数据记录的最小单位。在周期性事实表中,粒度通常基于时间维度。例如:

  • 日粒度:每天一条记录。
  • 月粒度:每月一条记录。

数据聚合

周期性事实表中的数据通常是从事务型事实表中聚合得到的。例如:

  • 事务型事实表记录每笔交易的信息。
  • 周期性事实表可以按天或按月汇总交易额。

与时间维度的紧密关联

周期性事实表通常会与一个时间维度表连接,时间维度表包含详细的时间信息,如日期、周数、月份、季度和年份等。

结构

周期性事实表的结构通常包含以下关键部分:

外键

  • 时间维度键:链接到时间维度表,标识记录对应的时间段。
  • 其他维度键:如产品维度、区域维度或客户维度,标识数据的业务上下文。

度量指标

存储业务相关的聚合度量数据,例如:

  • 销售额
  • 客户数量
  • 产品库存水平

衍生字段

  • 同比变化:与去年同期相比的数据变化。
  • 环比变化:与上一个周期相比的数据变化。

常见用途

周期性事实表的主要用途是支持时间序列分析和报表生成,常见场景包括:

  • 趋势分析:如销售额随时间的变化趋势。
  • 绩效监控:如每月的利润率和成本比。
  • 预测模型输入:如基于历史周期性数据进行业务预测。

设计原则

  • 时间维度的选择:时间粒度的选择取决于业务需求。如果用户需要分析每天的趋势,应选择日粒度;如果关注季度变化,应选择季度粒度。
  • 预聚合与性能优化:为了提高查询性能,数据通常需要预先聚合。
  • 历史数据的存储:确保存储足够的历史数据,以支持长期趋势分析。
  • 一致性和准确性:定期加载和更新数据,确保事实表中的数据与实际业务数据一致。

优点

  • 数据聚合后体积较小,查询性能高。
  • 支持时间序列分析和趋势预测。
  • 结构简单,便于与时间维度整合。

缺点

  • 缺乏事务级别的详细数据,不能支持细粒度分析。
  • 如果时间粒度选择不合理,可能无法满足用户需求。

举例描述

假设有如下订单表,6月20日有3条记录(001/002/003)

在这里插入图片描述
6月21日,表中有5条记录,其中新增2条记录(004/005),修改1条记录(001):
在这里插入图片描述

6月22日,表中有6条记录,其中新增1条记录(006),修改2条记录(003/005):
在这里插入图片描述
订单事实表的处理方法:

  • 只保留一份全量,数据和6月22日的记录一样,如果需要查看6月21日订单001的状态,则无法满足
  • 每天都保留一份全量,在数据仓库中可以在找到所有的历史信息,但数据量大了,而且很多信息都是重复的,会造成较大的存储浪费

使用拉链表保存历史信息,会有下面这张表,历史拉链表,既能满足保存历史数据的需求,也能节省存储资源。
在这里插入图片描述

前提条件

  • 订单表的刷新频率为一天,当天获取前一天的增量数据
  • 如果一个订单在一天内有多次状态变化,只记录最后一个状态的信息
  • 订单状态包括3个:创建、支付、完成
  • 创建时间和修改时间只取到天,如果源订单表中没有状态修改时间,那么抽取增量就比较麻烦,需要有个机制来确保能抽取到每天的增量数据

数仓ODS层有订单表,数据按日分区,存放每天的增量数据:

DROP TABLE test.ods_orders;
CREATE TABLE test.ods_orders(
  orderid INT,
  createtime STRING,
  modifiedtime STRING,
  status STRING
) PARTITIONED BY (dt STRING)
row format delimited fields terminated by ',';

数仓DWD层有订单拉链表,存放订单的历史状态数据:

DROP TABLE test.dwd_orders;
CREATE TABLE test.dwd_orders(
  orderid INT,
  createtime STRING,
  modifiedtime STRING,
  status STRING,
  start_date STRING,
  end_date STRING
)
row format delimited fields terminated by ',';

周期性事实表拉链表的实现

全量初始化

操作是在Hive中完成的,别搞错了

-- 数据文件order1.dat
001,2020-06-20,2020-06-20,创建
002,2020-06-20,2020-06-20,创建
003,2020-06-20,2020-06-20,支付
load data local inpath '/data/lagoudw/data/order1.dat' into
table test.ods_orders partition(dt='2020-06-20');
INSERT overwrite TABLE test.dwd_orders
SELECT orderid, createtime, modifiedtime, status,
createtime AS start_date,
'9999-12-31' AS end_date
FROM test.ods_orders
WHERE dt='2020-06-20';

增量抽取

-- 数据文件order2.dat
001,2020-06-20,2020-06-21,支付
004,2020-06-21,2020-06-21,创建
005,2020-06-21,2020-06-21,创建
load data local inpath '/data/lagoudw/data/order2.dat' into
table test.ods_orders partition(dt='2020-06-21');

增量刷新历史数据

-- 处理新增数据
SELECT 
    orderid,
    createtime,
    modifiedtime,
    status,
    modifiedtime AS start_date,
    '9999-12-31' AS end_date
FROM 
    test.ods_orders
WHERE 
    dt = '2020-06-21';

-- 处理历史数据,包括有修改、无修改的数据
-- ods_orders 与 dwd_orders 进行表连接
-- 连接上,说明数据被修改;未连接上,说明数据未被修改
SELECT 
    A.orderid,
    A.createtime,
    A.modifiedtime,
    A.status,
    A.start_date,
    CASE 
        WHEN B.orderid IS NOT NULL AND A.end_date > '2020-06-21' THEN '2020-06-20'
        ELSE A.end_date
    END AS end_date
FROM 
    dwd_orders A
LEFT JOIN 
    (SELECT * FROM ods_orders WHERE dt = '2020-06-21') B
ON 
    A.orderid = B.orderid;

-- 覆写拉链表
INSERT OVERWRITE TABLE test.dwd_orders
SELECT 
    orderid,
    createtime,
    modifiedtime,
    status,
    modifiedtime AS start_date,
    '9999-12-31' AS end_date
FROM 
    test.ods_orders
WHERE 
    dt = '2020-06-21'

UNION ALL

SELECT 
    A.orderid,
    A.createtime,
    A.modifiedtime,
    A.status,
    A.start_date,
    CASE 
        WHEN B.orderid IS NOT NULL AND A.end_date > '2020-06-21' THEN '2020-06-20'
        ELSE A.end_date
    END AS end_date
FROM 
    dwd_orders A
LEFT JOIN 
    (SELECT * FROM ods_orders WHERE dt = '2020-06-21') B
ON 
    A.orderid = B.orderid;

拉链表小结

在这里插入图片描述

标签:orderid,数仓,06,21,离线,2020,date,电商,orders
From: https://blog.csdn.net/w776341482/article/details/144389657

相关文章

  • 【closerAI ComfyUI】AI模特随便入景,高度融合,万物皆可融图的工作流,赋能摄影、电商、设
    添加图片注释,不超过140字(可选)更多AI前沿科技资讯,请关注我们:添加图片注释,不超过140字(可选)closerAIGCcloserAI,一个深入探索前沿人工智能与AIGC领域的资讯平台,我们旨在让AIGC渗入我们的工作与生活中,让我们一起探索AIGC的无限可能性!【closerAIComfyUI】AI模特随便入......
  • 大数据项目-Django基于随机森林和决策树算法实现的电商平台销量预测系统
    《[含文档+PPT+源码等]精品Django基于随机森林和决策树算法实现的电商平台销量预测系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!数据库管理工具:phpstudy/Navicat或者phpstudy/sq......
  • Openstack离线镜像封装案例(基于Centos8.4)
    Openstack离线镜像封装案例(基于Centos8.4)以下步骤是一个完整的流程,从准备环境、下载必要文件,到最终创建定制ISO镜像。环境准备在CentOS8.4系统上进行以下操作(也可根据自身需要选择合适的操作系统):系统镜像处理1、安装必备工具安装用于创建和操作ISO镜像的工具:yumi......
  • OceanBase 社区版 4.0 离线方式升级bp1至bp2 指南(含避坑总结)
    注:目前社区版对4.0升级bp1至bp2也未有完善的文档,本次升级中也是遇到不少坑,写本文也希望对OB感兴趣的可以尝试少些遇坑。也希望对升级有更好方式建议方式的朋友一起切磋交流,以便再进一步完善升级方案。第一次做OB的升级,限于自身技术,难免有纰漏,还望对此熟悉的大牛多多......
  • 电商订单管理新变革:影刀 RPA 引领智能快捷新时代
    一、引言在当今数字化高速发展的时代,电商行业正面临着日益激烈的竞争和不断增长的业务挑战。而影刀RPA的出现,犹如一颗璀璨的明星,在电商订单管理领域掀起了一场革命,为电商企业带来了智能、快捷的全新发展机遇。电商行业的蓬勃发展,使得订单管理变得愈发复杂和关键。随着网络......
  • 大数据-246 离线数仓 - 电商分析 拉链表的分析与构建与回滚
    点一下关注吧!!!非常感谢!!持续更新!!!Java篇开始了!目前开始更新MyBatis,一起深入浅出!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(已更完)Kudu(......
  • 跨境电商年终:抓住最后的节假日营销流量!
    黑五网一已经告一段落,但圣诞节和新年即将到来。电商卖家要根据节假日活动继续调整营销策略,因为还有不少消费者存在节假日和相关活动的消费需求。而且,面向不同的国家和地区的市场时,还要把当地节日考虑在内,这也增加了营销机会和流量。要抓住一年中最后的节假日流量,可以参考以下......
  • 跨境电商年终:抓住最后的节假日营销流量!
    黑五网一已经告一段落,但圣诞节和新年即将到来。电商卖家要根据节假日活动继续调整营销策略,因为还有不少消费者存在节假日和相关活动的消费需求。而且,面向不同的国家和地区的市场时,还要把当地节日考虑在内,这也增加了营销机会和流量。要抓住一年中最后的节假日流量,可以参考以下......
  • 基于Hadoop的电商用户行为分析
    一、课题背景及研究意义1.1课题背景随着电子商务的迅猛发展,电商平台积累了大量的用户数据,包括用户的浏览、搜索、购买等行为。这些数据蕴含着极为丰富的市场洞察,能够为电商企业提供有关用户偏好、消费趋势、营销策略等方面的关键信息。如何从海量的数据中提取有价值的信息,......
  • 国标GB28181网页直播平台LiteGBS国标GB28181软件关于设备离线如何处理?
    GB28181协议作为国家标准,规定了公共安全视频监控联网系统的互联结构、传输、交换、控制的基本要求和安全性要求。这有助于实现不同设备和系统之间的互联互通和信息共享,提高公共安全视频监控的效率和质量。LiteGBS国标GB28181软件平台,作为视频监控领域的核心管理系统,其稳定性和可......