数仓建设过程中DB层增量到ODS层情况解析

    to_date(days_sub(NOW(), 1)) 前一天日期

背景:每5个小时抽取一次oracle里面6个小时内的数据到DB层,抽完之后,将数据增量到ODS层

 DB层是textfile文件表,ODS层是parquet按天dt分区的表,每个dt里面存的是增量数据,总ODS层表示一份全量数据

 

增量过程中有两种情况,能生成唯一键和没有唯一键的情况

1、对于有唯一键的数据我们操作比较简单,取ods层数据和DB层数据并集,然后开窗函数根据唯一键分组,生成TMP临时表;

最后取TMP表 lv=1的数据写入ODS表

--  #能取唯一键的方式来处理增量
WITH TMP AS
  (SELECT a.*, row_number() over (partition BY LPN_ID    ORDER BY LAST_UPDATE_DATE DESC) AS lv FROM
     (SELECT *    FROM SOURCE_ODS.ODS_WMS_WMS_LICENSE_PLATE_NUMBERS OH
      UNION ALL SELECT *, NOW(), NOW(),TO_DATE(NOW()) AS DT
      FROM SOURCE_DB.DB_WMS_WMS_LICENSE_PLATE_NUMBERS) a)

INSERT OVERWRITE TABLE SOURCE_ODS.ODS_WMS_WMS_LICENSE_PLATE_NUMBERS  PARTITION (DT) SELECT  LPN_ID,LICENSE_PLATE_NUMBER,INVENTORY_ITEM_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CATCH_WEIGHT_FLAG,W_INSERT_DATE , W_UPDATE_DATE ,DT   FROM TMP WHERE LV=1;
 

 

2、对没有唯一键的表,取ods层两天之内的所有数据,并且时间小于db层最小时间,将这份数据与DB层数据合并,

合并后的数据写入ODS层对应的分区

 
 -- #不能取唯一键的方式来处理增量,首先我取了
WITH TMP AS
  ( SELECT *   FROM SOURCE_ODS.ODS_WMS_MTL_TRANSACTION_LOT_NUMBERS_OLD
   WHERE last_update_date <       (SELECT LAST_UPDATE_DATE
        FROM SOURCE_DB.DB_WMS_MTL_TRANSACTION_LOT_NUMBERS_OLD
        ORDER BY LAST_UPDATE_DATE ASC
        LIMIT 1) AND dt in (to_date(now()),to_date(days_sub(NOW(), 1)),to_date(days_sub(NOW(), 2))) 
   UNION ALL SELECT *,  NOW(), NOW(),TO_DATE(NOW()) AS DT
   FROM SOURCE_DB.DB_WMS_MTL_TRANSACTION_LOT_NUMBERS_OLD)
INSERT OVERWRITE  TABLE SOURCE_ODS.ODS_WMS_MTL_TRANSACTION_LOT_NUMBERS_OLD PARTITION (DT)
SELECT     TRANSACTION_ID,     LAST_UPDATE_DATE,     LAST_UPDATED_BY,     CREATION_DATE, 
      CREATED_BY,     LAST_UPDATE_LOGIN,     INVENTORY_ITEM_ID,     ORGANIZATION_ID,     LOT_NUMBER,
      W_INSERT_DATE,     W_UPDATE_DATE,     DT  FROM TMP  ;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值