etl全量增量抽取方式
我们在大数据进行数据抽取(入湖)中离不开从源系统的数据库同步数据到大数据平台(hive)中。我的平台(带有调度工具):联想大数据平(LeapHD)。
同步的方式有两种:
1.增量抽取:即每次抽取表的全部数据然后覆盖表的全部数据。频率一般每天抽取或者每周每月抽取,具体看业务需求。
1.1在hive中建一张结构与源表的相同表
eg:
源表(mysql)的结构:
表名:user 字段为:user_id int,user_name varchar,create_time datetime,phone varchar ;
hive建表:
create table ods.user_id (
etl_date string COMMENT '入湖时间',
user_id string COMMENT '客户id',
user_name string COMMENT '客户姓名',
create_time string COMMENT '创建时间',
phone string COMMENT '电话'
)comment '客户信息表'
row format delimited fields terminated by '\001' --换行方式
1.2 同步 用sqoop 或者用kettle工具同步。我用的是联想平台的自带的etl工具。
抽取全量的源表,进行任务调度的设置,是每天或者每周每月(看业务需求)。
select
'${now}' etl_time,
user_id ,
user_name ,
create_time ,
phone
from dd.user
导入到创建的hive表
ods.user_id
2.增量导入
增量方式的话我处理的方法是创建分区表,按照同步方式建立相应的分区。比如在单表数据量较大(比如:100万以上)的我会按照日分区,数据量较小的按照月分区。
2.1日分区
2.1.1 创建日分区表
create table ods.user_id (
etl_date string COMMENT '入湖时间',
user_id string COMMENT '客户id',
user_name string COMMENT '客户姓名',
create_time string COMMENT '创建时间',
phone string COMMENT '电话'
)comment '客户信息表'
partitioned by (day_id string comment '日分区')
row format delimited fields terminated by '\001' --换行方式
2.1.2 进行表的初始化数据(跟全量的操作差不多,多了分区)
全量抽取
select
'${now}' etl_time,
user_id ,
user_name ,
create_time ,
phone
from dd.user
导入到创建的hive表指定临时分区
ods.user_id[day_id='1']
2.1.3 将临时分区导入到动态分区
insert overwrite table ods.user_id partition(day_id)
select
etl_time ,
user_id ,
user_name ,
create_time ,
phone ,
substr(create_time,1,10) as day_id --日期格式为 YYYY-MM-DD
from ods.user_id partition
where day_id='1'
2.1.4 删除表的临时分区
alter table ods.user_id drop partition (day_id='1');
2.1.5 完成初始化后就是增量导入增量数据
设置把昨天的日期设置成变量:{last_day} = {now} - 1
抽取昨天的数据
select
'${now}' etl_time ,
user_id ,
user_name ,
create_time ,
phone
from dd.user
where substr(create_time,1,10)='{last_day}'
同理,抽数放到临时分区
ods.user_id[day_id='000']
2.1.6 将临时分区换成动态分区
insert overwrite table ods.user_id partition(day_id)
select
etl_time ,
user_id ,
user_name ,
create_time ,
phone ,
substr(create_time,1,10) as day_id --日期格式为 YYYY-MM-DD
from ods.user_id partition
where day_id='000'
2.1.7 删除临时分区
alter table ods.user_id drop partition (day_id='000');
这样就完成每天的抽数定时任务。
etl全量增量抽取方式相关推荐
- mysqldump备份(全量+增量)
在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景: 每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备 ...
- “全量增量” 与 “增量同步” 一文了解清楚【建议收藏】
大家在同步数据的时候都会接触到2个名词,"全量增量" 与 "增量同步" ,名字都长得差不多,但是意思和操作却不一样:比如部门领导给你方案,那我们要如何去选择其中 ...
- 331全量增量数据、同步ld
-- 数据同步 1 全量数据同步 1.1 不带参数的实现方式 每次更新目标表的时候,先把目标表中的数据清空,然后用源表的数据插入目标表中 . 1.2 通过参数 ,会计期(一个会计期 = 1个月 ,格式 ...
- MySQL数据库之全量+增量+二进制日志的备份与恢复
一.简介数据的备份与恢复 1.为什么备份? 灾难恢复:人为错误.硬件故障(冗余).软件故障(bug).自然灾害.黑客攻击.误操作.-: 测试: 2.备份时应该注意些什么? 能容忍最多丢失多少数据: 恢 ...
- mysqldump全量恢复_【MySQL】全量+增量的备份/恢复
生产环境中,有时需要做MySQL的备份和恢复工作.因MySQL是在运行过程中的,做全量备份需要时间,全量备份完成后又有数据变动,此时需要增量备份辅助.如果想恢复数据到一个空库(例如数据迁移或者上云等更 ...
- Elasticsearch和MySQL数据同步(logstash-input-jdbc)全量增量方式同步近千万数据
同步方案: 同步读写:最为简单的方式在将数据写到mysql时,同时将数据写到ES,实现数据的双写. 异步双写(MQ方式):MQ的性能基本比mysql高出一个数量级,所以性能可以得到显著的提高. 定时器 ...
- oracle全表增量抽取,每日数据增量抽取问题讨论
每日数据增量抽取问题讨论[@more@]咨询各位高人. 目前状况是 我单位每天都要产生 一个单品资料的基础表, 是所有单品,大约5万条数据 ,但是每天这个表都有多少改变,比如:有些单品更新,有一些删除 ...
- 一个脚本实现全量增量备份,并推送到远端备份中心服务器
2019独角兽企业重金招聘Python工程师标准>>> 摘要 由于工作需要,刚好需要这样一个功能的脚本,主要解决: 1. 不想在crontab中调度两条备份任务,一个做全量一个做增量 ...
- hbase集群 数据写入_Hbase实用技巧:全量+增量数据的迁移方法
摘要:本文介绍了一种Hbase迁移的方法,可以在一些特定场景下运用. 背景 在Hbase使用过程中,使用的Hbase集群经常会因为某些原因需要数据迁移.大多数情况下,可以跟用户协商用离线的方式进行迁移 ...
- Hbase实用技巧:全量+增量数据的迁移方法
摘要:本文介绍了一种Hbase迁移的方法,可以在一些特定场景下运用. 背景 在Hbase使用过程中,使用的Hbase集群经常会因为某些原因需要数据迁移.大多数情况下,可以跟用户协商用离线的方式进行迁移 ...
最新文章
- 综述 | 图像去噪方法比较
- [Vue CLI 3] 插件开发之 registerCommand 到底做了什么
- 机器视觉_Java机器学习,第2部分
- APAX-5017PG 项目开发全程记录 - 筹备篇
- c++17(21)-volatile和const、const_cast
- mac上搭建vue环境及webstorm新建vue项目
- HP-UX的终端TERM要设置成什么,才能输入中文呢?
- 搭建负载均衡器nginx_为什么要使用NGINX作为负载均衡器?
- Django:静态文件staticfiles
- 洛谷 [POI2007]BIU-Offices 解题报告
- 搜索引擎只能抓取html文件,为什么有些明明存在的网页不能被搜索到?
- python代码段_python代码段有哪些
- c语言删除堆栈所有的结点,深入浅出数据结构C语言版(15)——优先队列(堆)(示例代码)...
- 小米允许安装未知来源不用sim卡_视频能独立通话的小米手表,会像小米手机一样好用吗?...
- 【Word】公式“大括号”中的内容对齐
- Javadoc 使用详解
- 【华为OD机试真题 JS】竖直四子棋
- 【思维题】Bazinga
- 《数据结构与算法分析》课程设计——贪吃蛇问题
- leetcode第一题
热门文章
- Mac 科研常用软件
- ODL之VTN详解-如何提供虚拟2层网络-port-map
- python输入名字配对情侣网名_输入名字配置情侣网名-网名搜索
- Unity/C# 随机生成中文名
- ffmpeg 中av_rescale_rnd 与av_rescale ()(AVRounding结构体)
- mysql角色权限关系表查询_用户、角色和权限,多表查询
- 惠普计算机如何用u盘引导启动不了系统安装系统,惠普笔记本进BIOS设置U盘启动教程...
- ROSDUCT:通过rosbridge在本地公开远程ROS主题、服务和参数
- SpringMVC框架中@Controller类的方法的返回值的详细介绍
- 8086/8088 CPU的段寻址方式,段地址和偏移地址