当前位置: 首页 > news >正文

为什么hive在处理数据时,有的累加是半累加数据

在 Hive 处理数据时,“半累加数据” 指的是部分字段保留历史状态、部分字段随业务变化累加或更新的场景,这种模式广泛存在于需要兼顾 “历史追溯” 和 “增量更新” 的业务中。以下是具体例子,帮助理解其本质:

例子 1:用户行为维度表(SCD2 模型)

业务场景:用户信息表中,部分属性(如注册时间)一旦生成就固定不变,部分属性(如用户等级、积分)需要随行为累加或更新,同时需要保留历史状态。

数据变化过程

  1. 初始数据(2023-01-01):

    用户 ID注册时间等级积分生效时间失效时间
    10012023-01-01Lv102023-01-019999-12-31
  2. 2023-02-01 用户积分增加到 100,等级升级为 Lv2:
    不修改原记录,而是新增一条记录(保留历史版本):

    用户 ID注册时间等级积分生效时间失效时间
    10012023-01-01Lv102023-01-012023-01-31(历史版本)
    10012023-01-01Lv21002023-02-019999-12-31(当前版本)

半累加特征

  • 静态字段(注册时间):永远不变,不参与累加。
  • 动态字段(等级、积分):随业务更新,新记录覆盖旧状态,但通过 “生效 / 失效时间” 保留历史。
  • 整体数据量:随变更累加(新增记录),但单条记录不被覆盖。

例子 2:订单状态流水表

业务场景:订单创建后,金额、商品等信息固定,但支付状态、退款次数等需要随流程更新,同时需要记录状态变更轨迹。

数据变化过程

  1. 订单创建(2023-03-01 10:00):

    订单 ID金额商品支付状态退款次数记录时间
    O2001200衬衫未支付02023-03-01 10:00
  2. 2023-03-01 10:30 支付成功:
    新增一条状态记录(不修改原记录):

    订单 ID金额商品支付状态退款次数记录时间
    O2001200衬衫未支付02023-03-01 10:00
    O2001200衬衫已支付02023-03-01 10:30
  3. 2023-03-02 09:00 申请退款:
    再新增一条记录:

    订单 ID金额商品支付状态退款次数记录时间
    O2001200衬衫未支付02023-03-01 10:00
    O2001200衬衫已支付02023-03-01 10:30
    O2001200衬衫已退款12023-03-02 09:00

半累加特征

  • 静态字段(金额、商品):创建后固定,不参与累加。
  • 动态字段(支付状态、退款次数):随流程更新,每次变更生成新记录。
  • 整体数据:按状态变更累加,可追溯完整流程,但不会覆盖历史状态。

例子 3:每日活跃用户增量表

业务场景:按天统计活跃用户,每天的活跃用户是增量数据,但用户的基础信息(如注册渠道)固定。

数据存储方式

  • 按天分区(dt='2023-05-01'dt='2023-05-02'等)。
  • 每个分区存储当天活跃用户的信息,包含固定字段和动态字段。

数据示例

  • dt='2023-05-01' 分区:

    用户 ID注册渠道当日活跃时长(分钟)
    1001官网30
    1002应用商店45
  • dt='2023-05-02' 分区(新增当日活跃用户):

    用户 ID注册渠道当日活跃时长(分钟)
    1001官网20(1001 用户再次活跃)
    1003小程序15(新活跃用户)

半累加特征

  • 静态字段(注册渠道):每个用户只记录一次(或重复但值不变),不随日期累加。
  • 动态字段(当日活跃时长):按日增量记录,累计计算总时长时需汇总各分区。
  • 整体数据:按日期分区累加,每个分区是独立的增量,不覆盖历史分区。

总结

半累加数据的核心是 **“区分静态与动态字段,保留历史同时支持增量更新”**,这既满足了数据仓库 “可追溯” 的需求,也适配了 Hive 基于 HDFS“擅长追加、不擅长修改” 的技术特性。常见于维度表(SCD2)、状态流水表、按时间分区的增量统计场景中。

http://www.dtcms.com/a/348759.html

相关文章:

  • Codejock Suite ProActiveX COM Crack
  • C++如何将多个静态库编译成一个动态库
  • 【C++】 9. vector
  • golang3变量常量
  • 【golang长途旅行第30站】channel管道------解决线程竞争的好手
  • 在WSL2-Ubuntu中安装Anaconda、CUDA13.0、cuDNN9.12及PyTorch(含完整环境验证)
  • 深度学习与自动驾驶中的一些技术
  • 51c自动驾驶~合集18
  • 点评《JMeter核心技术、性能测试与性能分析》一书
  • 使用单个连接进行数据转发的设计
  • 大数据毕业设计选题推荐-基于大数据的北京市医保药品数据分析系统-Spark-Hadoop-Bigdata
  • 1688拍立淘接口数据全面解析详细说明(item_search_img)
  • Highcharts Maps/地图 :高性能的地理数据可视化方案
  • 打工人日报#20250824
  • CTFHub技能树 git泄露3道题练习--遇到没有master如何解决!!!
  • 一文掌握 Java 键盘输入:从入门到高阶(含完整示例与避坑指南)
  • 【大模型LLM学习】Research Agent学习笔记
  • c++随笔二
  • CI/CD企业案例详解
  • 从零开始学习概念物理(第13版)(1)
  • 问卷管理系统测试报告
  • 极验demo(float)(二)
  • JAVA快速学习(一)
  • 30分钟通关二分查找:C语言实现+LeetCode真题
  • 【通识】大模型
  • AI工具:开启开发实践的新纪元
  • Qt---架构文件.pro
  • Shell 循环实战:while 与 until 的趣味编程之旅
  • 【轨物交流】轨物科技亮相“智汇日照・杭电赋能”科技合作交流会,共谋产学研用新篇章
  • MOS的导通及应用