业务增量数据入仓以及增全量合并工作

简介: 增量数据入库与增量全合并工作

当某张表中存在上亿条或者数据量很大的情况下,每天全量同步数据会消耗大量的资源,为此可以考虑仅仅将当天的增量数据同步到数仓中
首先需要先将历史数据全量同步到数仓b_order_df表中,之后进行增量数据同步到b_order_di表中,剩下的就是每天将同步过来的增量数据与历史全量数据进行合并的工作。

-- 通过创建时间或者更新时间筛选出业务日期中新增或者变化的输入。同步到数仓中的增量表b_order_di中
select 
        order_code
        ,external_order_code
        ,total_order_code
        ,order_type
        ,business_type
        ,order_tag
        ,channel_code
        ,terminal
        ,shop_code
        ,shop_name
        ,customer_id
from b_order 
where (create_time >= ${bizdate} and create_time < DATE_ADD(${bizdate}, 1))
or (update_time >= ${bizdate} and update_time < DATE_ADD(${bizdate}, 1))

同步入仓完成后需要进行增量数据与全量数据合并工作

-- 将业务日期的增量数据与业务日期前一天的全量数据进行合并成为业务日期下的全量数据,并写入到业务日期的全量表中
insert overwrite table b_order_df paritition(ds = ${bizdate})
select
     coalesce(di.order_code,df.order_code) as order_code
    ,coalesce(di.external_order_code,df.external_order_code) as external_order_code
    ,coalesce(di.total_order_code,df.total_order_code) as total_order_code
    ,coalesce(di.order_type,df.order_type) as order_type
    ,coalesce(di.business_type,df.business_type) as business_type
    ,coalesce(di.order_tag,df.order_tag) as order_tag
    ,coalesce(di.channel_code,df.channel_code) as channel_code
    ,coalesce(di.terminal,df.terminal) as terminal
    ,coalesce(di.shop_code,df.shop_code) as shop_code
    ,coalesce(di.shop_name,df.shop_name) as shop_name
    ,coalesce(di.customer_id,df.customer_id) as customer_id
from(
    select 
            order_code
            ,external_order_code
            ,total_order_code
            ,order_type
            ,business_type
            ,order_tag
            ,channel_code
            ,terminal
            ,shop_code
            ,shop_name
            ,customer_id
    from b_order_di
    where ds = ${bizdate} -- 业务日期
)di
full join
(
    select 
            order_code
            ,external_order_code
            ,total_order_code
            ,order_type
            ,business_type
            ,order_tag
            ,channel_code
            ,terminal
            ,shop_code
            ,shop_name
            ,customer_id
    from b_order_df
    where DATE_SUB(${bizdate}, 1) -- 业务日期的前一天
)df on di.order_code = df.order_code
目录
相关文章
|
SQL druid 搜索推荐
最强最全面的数仓建设规范指南 (一)
本文将全面讲解数仓建设规范,从数据模型规范,到数仓公共规范,数仓各层规范,最后到数仓命名规范,包括表命名,指标字段命名规范等!
14673 2
|
消息中间件 关系型数据库 Kafka
深入理解数仓开发(二)数据技术篇之数据同步
深入理解数仓开发(二)数据技术篇之数据同步
|
8月前
|
存储 SQL 监控
实时数仓和离线数仓还分不清楚?看完就懂了
本文通俗易懂地解析了实时数仓与离线数仓的核心区别,涵盖定义、特点、技术架构与应用场景,助你快速掌握两者差异,理解数据处理的“快慢之道”。
实时数仓和离线数仓还分不清楚?看完就懂了
|
7月前
|
SQL 存储 分布式计算
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场
本文旨在帮助非专业数据研发但是有高频ODPS使用需求的同学们(如数分、算法、产品等)能够快速上手ODPS查询优化,实现高性能查数看数,避免日常工作中因SQL任务卡壳、失败等情况造成的工作产出delay甚至集群资源稳定性问题。
1493 36
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场
|
SQL 数据库 HIVE
hive数仓 ods层增量数据导入
根据业务需求,当表数据量超过10万条时采用增量数据导入,否则全量导入。增量导入基于`create_date`和`modify_date`字段进行,并确保时间字段已建立索引以提升查询效率。避免在索引字段上执行函数操作。创建增量表和全量表,并按日期进行分区。首次导入全量数据,后续每日新增或变更数据保存在增量表中,通过全量表与增量表的合并保持数据一致性。
781 13
|
SQL 分布式计算 关系型数据库
|
SQL Java 关系型数据库
Hive常见的报错信息
文章列举了Hive常见的几种报错信息,并提供了错误复现、原因分析以及相应的解决方案。
2119 1
|
SQL JSON DataX
离线数仓(六)【ODS 层开发】
离线数仓(六)【ODS 层开发】
|
机器人
Dataphin功能Tips系列(5)-手工表上传及长期维护
有些业务数据是手工excel维护的,这时我们要如何将数据上传至dataphin并进行维护?
352 7
Dataphin功能Tips系列(5)-手工表上传及长期维护
|
SQL 存储 Java
Hive 拉链表详解及实例
拉链表是一种数据仓库技术,用于处理持续增长且存在时间范围内的重复数据,以节省空间。它在Hive中通过列式存储ORC实现,适用于大规模数据场景,尤其当数据在有限时间内有多种状态变化。配置涉及事务管理和表合并选项。示例中展示了如何从原始订单表创建拉链表,通过聚合操作和动态分区减少数据冗余。增量数据可通过追加到原始表然后更新拉链表来处理。提供的Java代码用于生成模拟的订单增量数据,以演示拉链表的工作流程。
1077 3