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

【hive】一种高效增量表的实现

一个hive 的ia表的模版,如何更新历史数据+合并新数据最简洁的算法

还有算法诸如:row_number()暴力去重等等

最简洁算法演示
旧数据:1,2,3,4,5
新数据:4,5,6,7

代码第一块(union前):旧数据为左表,left join新表,能关联上,即数据被更新过,由于混杂着未更新的数据,即用case when判断
代码第二块(union后): 新数据为左表,left join旧表,去掉重叠部分的数据,只要纯新的数据

举例,如果是每日更新数据进hive
ods中存储最新的每日的数据,假设当日分区为20251014
dwd中存储历史数据,每个分区都是完整的数据,最后的一个分区为20251013
传参即:20251014 20251013 20251014 20251014
含义:将dwd中的昨日分区的完整数据取出来,与每日新增的数据进行计算,得出一个新版本的全量的数据

SET destDay; --目标分区参数
SET startDayP1;--开始分区的前一天的参数
SET startDay;--开始分区的参数
SET endDay;--结束分区的参数SELECT --历史数据部分:判断数据是否更新过,如果更新过,则取更新后的数据(CASE WHEN t2.org_id               IS NOT NULL THEN t2.org_id               ELSE t1.org_id               END) AS org_id,(CASE WHEN t2.trace_no             IS NOT NULL THEN t2.trace_no             ELSE t1.trace_no             END) AS trace_no,(CASE WHEN t2.bc_id                IS NOT NULL THEN t2.bc_id                ELSE t1.bc_id                END) AS bc_id,(CASE WHEN t2.creation_date        IS NOT NULL THEN t2.creation_date        ELSE t1.creation_date        END) AS creation_date,(CASE WHEN t2.created_by           IS NOT NULL THEN t2.created_by           ELSE t1.created_by           END) AS created_by,(CASE WHEN t2.last_update_date     IS NOT NULL THEN t2.last_update_date     ELSE t1.last_update_date     END) AS last_update_date,(CASE WHEN t2.last_update_by       IS NOT NULL THEN t2.last_update_by       ELSE t1.last_update_by       END) AS last_update_by,(CASE WHEN t2.lot_code             IS NOT NULL THEN t2.lot_code             ELSE t1.lot_code             END) AS lot_code,(CASE WHEN t2.scan_code            IS NOT NULL THEN t2.scan_code            ELSE t1.scan_code            END) AS scan_code,(CASE WHEN t2.card_no              IS NOT NULL THEN t2.card_no              ELSE t1.card_no              END) AS card_no,(CASE WHEN t2.card_ser             IS NOT NULL THEN t2.card_ser             ELSE t1.card_ser             END) AS card_ser,(CASE WHEN t2.prod_line_id         IS NOT NULL THEN t2.prod_line_id         ELSE t1.prod_line_id         END) AS prod_line_id,(CASE WHEN t2.card_qty             IS NOT NULL THEN t2.card_qty             ELSE t1.card_qty             END) AS card_qty,(CASE WHEN t2.card_id              IS NOT NULL THEN t2.card_id              ELSE t1.card_id              END) AS card_id,(CASE WHEN t2.item_no              IS NOT NULL THEN t2.item_no              ELSE t1.item_no              END) AS item_no,(CASE WHEN t2.is_chong             IS NOT NULL THEN t2.is_chong             ELSE t1.is_chong             END) AS is_chong,(CASE WHEN t2.real_code            IS NOT NULL THEN t2.real_code            ELSE t1.real_code            END) AS real_code,current_timestamp AS sys_update_time FROM dwd.mesbh_mes_reck_t_a t1  --取前天的数据
LEFT JOIN ods.mesbh_mes_reck_t_i t2  --取昨天的数据ON t2.ss_dt = '${startDay}' AND t1.BC_ID = t2.BC_ID  AND t1.trace_no = t2.trace_no 
WHERE t1.ss_dt = '${startDayP1}' --保留一份完整的旧的数据,两表交叉取交叉部分,能重叠代表有数据被更新过UNION ALL  --新数据部分:直接合并新进入的数据
SELECT t1.org_id           ,t1.trace_no         ,t1.bc_id            ,t1.creation_date    ,t1.created_by       ,t1.last_update_date ,t1.last_update_by   ,t1.lot_code         ,t1.scan_code        ,t1.card_no          ,t1.card_ser         ,t1.prod_line_id     ,t1.card_qty         ,t1.card_id          ,t1.item_no          ,t1.is_chong         ,t1.real_code        ,current_timestamp AS sys_update_time FROM ods.mesbh_mes_reck_t_i t1 
LEFT JOIN dwd.mesbh_mes_reck_t_a t2 ON  t2.ss_dt = '${startDayP1}' AND t1.BC_ID = t2.BC_ID  AND t1.trace_no = t2.trace_no  
WHERE t1.ss_dt = '${startDay}' --只保留最新分区的那一份的数据AND t2.org_id IS NULL --去掉新分区数据中,和旧表重叠的数据部分,只保留新数据AND t2.trace_no IS NULL 
;
http://www.dtcms.com/a/482656.html

相关文章:

  • AWS同一账号下创建自定义VPC并配置不同区域的对等链接
  • 企业营销网站建设公司淘宝客 网站备案
  • 软件工程的知识领域
  • Unity进阶--C#相关
  • 网页模板网站cms网站建设免费视频教程
  • 板块运动和地震分类
  • 用OpenCV实现智能图像处理从基础操作到实战应用全解析
  • 大庆门户网站wordpress大学主题3.5
  • C++ - vector
  • 做百度竞价网站搜索不到百度北京总部电话
  • Process Monitor 学习笔记(5.5):保存并打开追踪记录(PML/CSV)与协作分享全攻略
  • 论MyBatis和JPA权威性
  • SAP MM采购订单创建接口分享
  • 基于单片机的简易智能衣架控制系统设计
  • rrk3588 与 NPU 主机下的异构通信:基于 PCIe 的设计与实现
  • 2025年--Lc185--63.不同路径II(动态规划,矩阵)--Java版
  • 跨境电商网站排行榜wordpress数据量大网站访问
  • 从零起步学习MySQL || 第四章:DQL语句定义及常见用法示例
  • 网站建设费如何核算.la域名的门户网站
  • 场景中的建筑静态物体转为actor,保持建筑的相对位置。
  • 数字孪生为什么需要5G?低延迟与高可靠实现精准控制
  • Idea 启动项目把启动类显示在左下角 并显示端口号
  • 网站网页模板网页设计培训哪家机构好
  • SLAM: 如何生成odom数据
  • 环境搭建node.js gnvm
  • 网站建设 就业方向东莞房价2021
  • Spring容器的实现
  • JWT 漏洞全解析:从原理到实战
  • 基于Redis6.2.8版本部署Redis Cluster集群
  • 工控一体机在智慧称重食堂中的应用