基于DataX完成数据导入-仅新增方案

news2024/12/24 2:34:58

仅新增方式: 订单退款表为例, 探讨如何完成仅新增方式导入操作

从业务库将数据导入到ODS层, 分为 首次导入和增量导入两部分, 其中首次导入指的第一次建表, 导入数据, 此时一般都是全量导入, 后续每一天都是采用增量导入的方式,

当前项目, 增量模式: T+1(当天处理都是上一天的数据/ 每天的数据在下一天进行处理)

技术: DataX

当全量导入数据的时候, 整个数据集是应该放置到上一天的分区中呢? 还是说应该按照实际表数据创建时间划分到不同分区呢?

如果之前的数据不多, 且分区数量不多,一般我们采用第一种方式. 如果之前的数据体量较大, 此时务必选择第二种,防止出现单分区内超大规模数据现象.

二种方式均可以, 其实在实际应用中两种其实都是存在的, 只不过我们当前选择的第二种方式, 直接将数据不同的日期放置到不同的分区下


如何做呢? DataX不支持直接导入多个分区数据, 仅支持导入一个分区, 因为DataX本质上是将数据对接HDFS, 而非HIVE,只是HIVE正好映射到HDFS对应目录下, 正好吧数据加载到了, 所以在HIVE正好就看到了数据
    
既然dataX不支持那如何处理呢? 
    先创建一个临时表(没有分区), 通过DataX 将数据导入到临时表中, 然后在通过临时表灌入到HIVE的ODS层目标表表, 处理完成后, 删除临时表

首次导入:  

目的: Datax只支持一次抽取导入到分区表中的一个分区中, 很明显历史数据中存在多个分区, 所以首次导入,必须将所有数据导入到多个分区, 此时就不能直接将数据使用datax进行分区导入,需要先将其导入到临时非分区表中, 再将其进行间接导入到目标分区表.

1- 创建订单退款表的临时表:

-- 构建订单退款表 临时表:
drop table if exists ods.ods_sale_shop_refund_i_temp;
CREATE  TABLE IF NOT EXISTS ods.ods_sale_shop_refund_i_temp(
    id                    BIGINT COMMENT '主键',
    refund_no             STRING COMMENT '退款单号',
    refund_status         BIGINT COMMENT '退款状态:1-退款中;2-退款成功;3-退款失败',
    refund_code           BIGINT COMMENT '退款原因code',
    refund_msg            STRING COMMENT '退款原因',
    refund_desc           STRING COMMENT '退款描述',
    create_time           TIMESTAMP COMMENT '创建时间/退款申请时间',
    update_time           TIMESTAMP COMMENT '更新时间',
    cancel_time           TIMESTAMP COMMENT '退款申请取消时间',
    refund_amount         DECIMAL(27, 2) COMMENT '退款金额',
    refund_point_amount   DECIMAL(27, 2) COMMENT '扣减已赠积分',
    return_pay_point      BIGINT COMMENT '退还支付积分',
    return_point_amount   DECIMAL(27, 2) COMMENT '退还积分抵扣金额',
    refund_time           TIMESTAMP COMMENT '退款成功时间',
    less_weight           DECIMAL(27, 3) COMMENT '差额重量,单位kg',
    pick_weight           DECIMAL(27, 3) COMMENT '拣货重量,单位kg',
    is_deleted            BIGINT COMMENT '失效标志:0-正常;1-失效',
    refund_type           BIGINT COMMENT '退款类型:1-部分退;2-全额退; 3-差额退',
    order_no              STRING COMMENT '订单号',
    refund_apply_type     BIGINT COMMENT '退款申请类型:1-仅退款;2-退货退款',
    refund_delivery       DECIMAL(27, 2) COMMENT '运费退款',
    sync_erp_status       BIGINT COMMENT '同步erp状态:-1-失败,0-未同步,1-成功',
    sync_erp_msg          STRING COMMENT '同步erp失败消息',
    create_sys_user_id    BIGINT COMMENT '操作人id',
    create_sys_user_name  STRING COMMENT '操作人名称',
    store_no              STRING COMMENT '门店编码',
    store_leader_id       BIGINT COMMENT '团长id'
)
COMMENT '订单退款表'
row format delimited fields terminated by ','
stored as orc
tblproperties ('orc.compress'='ZLIB');

 2- 通过DataX完成数据导入操作

设置数据源: mysql连接 sale库 HIVE连接ODS库

 

配置DataX任务模板(后续调度时间依然凌晨20分, 可以省略配置)

构建任务

 

 

 点击构建, 生成Json采集信息内容, 将其中append 更改为truncate

点击选择模板 –> 下一步

执行任务:

校验是否ok:  

将临时表的数据导入到目标表  

insert overwrite table ods.ods_sale_shop_refund_i partition (dt)
select
    *,
   date_format(create_time,'yyyy-MM-dd') as dt
from ods.ods_sale_shop_refund_i_temp;

删除临时表  

drop table ods.ods_sale_shop_refund_i_temp;

 增量导入: T+1模式

为了测试方便, 将MySQL中数据, 更为其中一条为上一天的数据

insert into sale.shop_refund (id, refund_no, refund_status, refund_code, refund_msg, refund_desc, create_time, update_time,
                         cancel_time, refund_amount, refund_point_amount, return_pay_point, return_point_amount,
                         refund_time, less_weight, pick_weight, is_deleted, refund_type, order_no, refund_apply_type,
                         refund_delivery, sync_erp_status, sync_erp_msg, create_sys_user_id, create_sys_user_name,
                         store_no, store_leader_id)
values (13,'220731Y28899211127',2,999,'其他原因','','2023-09-21 17:50:24','2023-06-14 17:50:24',null,5.26,5.00,null,null,'2023-06-14 17:50:23',null,null,0,1,'BL22073199620677',1,0.00,1,null,1001107,1001107,'Y288',null);

目标表是一个分区表, 需要将数据导入到上一天的分区中, 每天导入上一天的即可, 每次新增数据, 都是简历一个新的分区, 将上一天的数据放置到这个分区中

create_time between concat(date_sub(current_date,INTERVAL 1 DAY),' 00:00:00') and concat(date_sub(current_date,INTERVAL 1 DAY),' 23:59:59')

或者:
date_format(create_time,'%Y-%m-%d') = DATE_FORMAT(date_sub(NOW(),INTERVAL 1 DAY),'%Y-%m-%d')

点击构建 –> 修改为truncate –> 点击选择模板 –> 下一步 生成任务

修改全局参数: dt的分区

执行任务

 

 

 通过hive查询:

 

会发现压根没有数据, 但是数据确实在HDFS中存在了  

查看当前有多少个分区内容?

 

如何解决呢? 
    方式一: 手动添加一个分区即可
    alter table ods.ods_sale_shop_refund_i add partition (dt='2023-06-18')
    
    方式二: HIVE自动修复分区 (比较适合于有多个分区的情况)
    MSCK REPAIR TABLE ods.ods_sale_shop_refund_i sync partitions;
    

在DataX中如何解决呢?  在写出到HIVE中, 添加一个后置SQL: 
MSCK REPAIR TABLE ods.ods_sale_shop_refund_i

 

 演示增量数据导入, 演示完, 需要将增量数据删除,恢复原样, 以免影响后续的计算的结果

hive:
	alter table  ods.ods_sale_shop_refund_i drop partition(dt='2023-06-18');

mysql:
   delete from sale.shop_refund where id = 13;

HIVE的函数库: LanguageManual UDF - Apache Hive - Apache Software Foundation


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1422247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中嵌入原生HTML页面

Vue中嵌入html页面并相互通信 需求&#xff1a;b2b支付需要从后获取到数据放到form表单提交跳转&#xff0c;如下&#xff1a; 但是vue目前暂时没找到有类似功能相关文档&#xff0c;所以我采用iframe嵌套的方式 1. Vue中嵌入Html <iframe src"/static/gateway.htm…

储能柜控制单元|EsccUnit8300储能柜控制单元功能简介及定制开发|储能EMS能量控制单元|储能控制单元|储能柜EMS系统|储能协调控制器

储能柜控制单元&#xff5c;EsccUnit8300储能柜控制单元功能简介及定制开发|储能EMS能量控制单元|储能控制单元|储能柜EMS系统|储能协调控制器 一&#xff1a;什么叫储能柜 Energy storage cabinet 储能柜包含柜体、由池组单元、由池管理单元、储能变流器、控制单元、消防单元…

【算法与数据结构】121、122、123、188、309、714、LeetCode买卖股票的最佳时机I II III IV+含冷冻期+含手续费

文章目录 一、121、LeetCode买卖股票的最佳时机1.1 动态规划1.2 动态规划-滚动数组 二、122、买卖股票的最佳时机 II三、123、买卖股票的最佳时机 III七、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、121、LeetCode买…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第23套

少儿编程 蓝桥杯青少组科技素养题真题及解析第23套 1、英国计算机科学家艾伦图灵于 1950 年提出了著名的“图灵测试”,用于判断计算机是否具有智能。“图灵测试”是通过()的方法进行判断的 A、让两台计算机对话 B、让人类与计算机对话 C、给计算机出题 D、让计算机分辨图…

Logstash 7.7.1版本安装系统梳理

前言 上一篇文章介绍了 《ElasticSearch7.7.1集群搭建 & Kibana安装》&#xff0c;今天说一下 Logstash的安卓和配置&#xff1b; Logstash是一个开源的数据收集引擎&#xff0c;具有实时管道功能。它可以动态地将来自不同数据源的数据统一起来&#xff0c;并将数据标准化…

【数据结构】双向带头循环链表实现及总结

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 1. 双向带头循环链表的实现2. 顺序表和链表的区别 1. 双向带头循环链表的实现 List.h #pragma once #include <stdio.h> #include <assert.h> #include <stdlib.h> #include <stdbool.h>typede…

Springboot-SpringCloud学习

文章目录 web项目开发历史 SpringBootSpring以及Springboot是什么微服务第一个Springboot项目配置如何编写 yaml自动装配原理集成 web开发&#xff08;业务核心&#xff09;集成 数据库 Druid分布式开发&#xff1a;Dubbo&#xff08;RPC&#xff09; zookeeperswagger&#x…

免费的ppt网站分享

前言 相信大学生们深有体会&#xff0c;对于学校而言&#xff0c;好像是任何活动都需要我们做ppt&#xff0c;当你拿着自己辛苦做的ppt去展示现场的时候&#xff0c;你看到别人的ppt比你的还好&#xff0c;此时心情就是毙&#xff0c;当你知道人家不过是仅仅的1个小时不到就完成…

Springboot集成Javamelody

JavaMelody的目标是监视QA和生产环境中的Java或Java EE应用服务器。它不是模拟用户请求的工具&#xff0c;而是根据用户对应用程序的使用情况来衡量和计算应用程序实际操作的统计信息的工具。JavaMelody主要基于请求统计和演化图。 它允许改进QA和生产中的应用程序&#xff0c…

海外云手机对于亚马逊卖家的作用

近年来&#xff0c;海外云手机作为一种新型模式迅速崭露头角&#xff0c;成为专业的出海SaaS平台软件。海外云手机在云端运行和存储数据&#xff0c;通过网页端操作&#xff0c;将手机芯片放置在机房&#xff0c;通过网络连接到服务器&#xff0c;为用户提供便捷的上网功能。因…

WebService的services.xml问题

WebService有多种实现方式&#xff0c;这里使用的是axis2 问题&#xff1a; 在本地开发&#xff0c;访问本地的http://localhost:8080/services/ims?wsdl&#xff0c;正常访问 但是打成jar包&#xff0c;不管是linux还是window启动&#xff0c;都访问不到&#xff0c;报错…

双创竞赛项目申报:Java + Spring Boot的实战指南

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

2024前端面试总结—JS篇(文档持续更新中。。。)

1、Event Loop&#xff08;事件循环&#xff09;机制 JS是单线程的非阻塞语言 为什么是单线程&#xff08;如果js是多线程&#xff0c;那么两个线程同时对同一个Dom进行操作&#xff0c;一个增一个删&#xff0c;浏览器该如何执行&#xff1f;&#xff09; 非阻塞&#xff08;…

如何线上发布寒假作业,让学生在线确认签收?

老师们可以利用易查分制作一个寒假作业查询系统&#xff0c;在线发布学生的寒假作业&#xff0c;让学生本人在线上获取寒假作业&#xff1b;如果希望由学生本人进行签收&#xff0c;还可通过手写签名功能来进行确认&#xff0c;确保由学生本人收到寒假作业。 &#x1f4cc;使用…

Java项目要不要部署在Docker里?

部署Java项目有很多种方式&#xff0c;传统的方式是直接在物理机或虚拟机上部署应用&#xff0c;但为什么现在容器化部署变得越来越流行&#xff0c; 个人觉得原因有以下几个&#xff1a; 1、 环境一致性&#xff1a;使用Docker可以确保开发、测试和生产环境的一致性&#xff…

管理的四种风格

前言 管理的四种风格,一般的领导大概就是这几种管理模式,告知,辅导,参与,授权,还有就是乱搞式(神经病模式)。 一、告知式 告知式是指组织通过正式、明确的渠道,将信息传达给员工。这种方式通常用于传递基本的规章制度、工作流程、政策文件等。告知式的作用在于确保员…

Yalmip学习笔记

这里写自定义目录标题 基本用法变量定义关于大MBilevel programming 注&#xff1a;这篇文章主要是留给自己查漏补缺的&#xff0c;所以从来没有使用过yalmip的读者看着会觉得跳来跳去。 基本用法 建模开始前&#xff0c;使用yalmip(clear)清空Yalmip的内部数据库。 下面是一个…

Win10+wsl2+mmdetection3d(GPU)

2024部署mmdetection3d在win10wsl2 实现过程安装wsl2安装docker与VSCode插件连接其他问题 实现过程 安装WSL2 踩坑点&#xff1a; 基于发行版安装&#xff0c;无法更新wsl1&#xff0c;查证了当前的wi10的驱动是满足要求的&#xff0c;但是无法更新。所以一定要先去更新驱动&…

【程序员英语】【美语从头学】初级篇(入门)(笔记)Lesson13(买东西)(餐厅点餐事宜;询问有无座位;食物如何调理:牛排、咖啡等;菜单等相关)

《美语从头学初级入门篇》 注意&#xff1a;被 删除线 划掉的不一定不正确&#xff0c;只是不是标准答案。 文章目录 Lesson 13 At the Restaurant 在餐厅会话A会话B笔记餐厅询问有无座位&#xff1b;餐厅电话订座其他餐厅询问有无座位的问法 吸烟区与非吸烟区&#xff08;smo…

序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类+IO流知识回顾④】

序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类IO流知识回顾④】 序列化流序列化和反序列化如何实现序列化ObjectOutputStreamObjectInputStream 序列化流 什么是序列化&#xff1f;如何实现序列化&#xff1f;什么是反序列化&#xff1f;需要了解的类…