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

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

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

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

数据变化过程:

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

    用户 ID 注册时间 等级 积分 生效时间 失效时间
    1001 2023-01-01 Lv1 0 2023-01-01 9999-12-31
  2. 2023-02-01 用户积分增加到 100,等级升级为 Lv2:

    不修改原记录,而是新增一条记录(保留历史版本):

    用户 ID 注册时间 等级 积分 生效时间 失效时间
    1001 2023-01-01 Lv1 0 2023-01-01 2023-01-31 (历史版本)
    1001 2023-01-01 Lv2 100 2023-02-01 9999-12-31 (当前版本)

半累加特征:

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

例子 2:订单状态流水表

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

数据变化过程:

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

    订单 ID 金额 商品 支付状态 退款次数 记录时间
    O2001 200 衬衫 未支付 0 2023-03-01 10:00
  2. 2023-03-01 10:30 支付成功:

    新增一条状态记录(不修改原记录):

    订单 ID 金额 商品 支付状态 退款次数 记录时间
    O2001 200 衬衫 未支付 0 2023-03-01 10:00
    O2001 200 衬衫 已支付 0 2023-03-01 10:30
  3. 2023-03-02 09:00 申请退款:

    再新增一条记录:

    订单 ID 金额 商品 支付状态 退款次数 记录时间
    O2001 200 衬衫 未支付 0 2023-03-01 10:00
    O2001 200 衬衫 已支付 0 2023-03-01 10:30
    O2001 200 衬衫 已退款 1 2023-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)、状态流水表、按时间分区的增量统计场景中。

相关推荐
程序员梅雨12 小时前
【从零开始学习数据仓库 | 第二篇】: 拉链表 & 数仓分层
大数据·数据仓库·学习
NiceZack14 小时前
Hadoop 部署全流程教程:从新装 CentOS 到伪分布式与完全分布式
hadoop·分布式·centos
roman_日积跬步-终至千里15 小时前
数仓开发的三层责任:业务定义、模型设计与 SQL 实现
数据库·数据仓库·sql·数据建模
@小匠16 小时前
Flink + Iceberg 批量失败复盘:一次超时如何变成 Hive Metastore 锁泄漏
大数据·hive·flink
geovindu2 天前
SQL Data Sampling and Approximation Techniques using postgreSQL 18
大数据·数据库·数据仓库·sql·postgresql·数据库开发·数据库架构
skywalk81632 天前
hive —— 多机 AI Agent 协同的任务总线:分布式,多节点同时运行,保障不会宕机
人工智能·hive·分布式
程序员梅雨2 天前
【从零开始学习数据仓库 | 第一篇】:维度建模理论
大数据·数据仓库·学习·阿里云·数据分析
棣廷3 天前
初识数据仓库——数仓分层到DataX数据采集
数据仓库
棣廷3 天前
初识Hive(2)
数据仓库·hive·hadoop
skywalk81633 天前
deepseek对skywalk163/hive 和hivecommons/hive 两个多机AI Agent任务调度项目的对比
人工智能·hive·agent