增量抽取-时间戳方式实现

----------时间戳方式抽取数据------------------------
介绍:它是一种基于快照比较的变化数据捕获方式,在源表上增加一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值。当进行数据抽取时,通过比较上次
         抽取时间与时间戳字段的值来决定抽取那些数据。有的数据库的时间戳支持自动更新,即表的其他字段的数据发生变化时,自动更新时间戳字段。有的数据库不支持时间戳的自动
         更新,这就要求业务系统在更新业务数据时,手工更新时间戳字段。

一:在数据源上增加一个时间戳字段
       时间戳:oracle提供了时间戳数据类型Timestamp,将定义为时间戳数据类型的字段做查询时,查询到的结果为:18-4月 -10 03.31.06.000000 下午
     这种格式不太符合我们的需要,用to_char函数把一个日期数据转换为任何一个我们想要的格式。
     to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss‘)-----将时间戳类型转换为字符串类型
     oracle还提供了一种日期类型Date,也可以用to_char()转换成自己想要的格式。
     两种类型都是对日期和时间的表示,只是两种类型的精度不同,date精确到秒,而Timestamp精确到小数秒,两者格式化显示都一样。
     to_char函数对两种类型都支持,但是turnc函数不支持时间戳类型。
                    当两个时间的差别极其重要时,使用时间戳类型要比日期类型更加精确。
     两个date类型相减的结果是以天为单位,而两个时间戳类型相减的结果是直观的显示“多少天+多少小时+多少分钟+多少秒+多少小数秒”;
     例如:
     select to_timestamp(‘2018-11-11 12:12:12.23‘,‘yyyy-mm-dd hh24:mi:ss.ff‘)-to_timestamp(‘2018-10-11 12:12:12.23‘,‘yyyy-mm-dd hh24:mi:ss.ff‘) from dual
     结果为:
     查询结果显示(多少天 多少小时 多少分钟 多少秒 多少小数秒 ):000000001 01:30:10.100000
     date类型转化为timestamp类型要使用cast函数:
     select cast(sysdate as Timestamp) from dual
二:新建time_test表
 CREATE TABLE `time_test` (
   `id` int(10) NOT NULL AUTO_INCREMENT,
   `name` varchar(50) DEFAULT NULL,
   `age` int(3) DEFAULT NULL,
   `time_smp` timestamp NULL DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
三:新建触发器
 当插入数据时,默认给当前时间;
 当修改数据时,时间戳更新为当前时间;
 以上两个触发器都在源表基础上做修改。
 a:触发器名称tri_time_test_insert---插入
    触发器没成tri_time_test_update---更新
 b:触发时间----都在触发事件之后触发
 c:执行语句
  插入后-------------------改变思路,将时间戳定义为默认值
  --------------------------更新mysql表中的某一字段,为其设置一个默认值
    ALTER TABLE time_test ALTER COLUMN time_smp SET DEFAULT now();
  d:触发器没成tri_time_test_update---更新
 create  trigger tri_time_test_update AFTER update
 on `time_test` FOR EACH ROW
 begin
 set @point=(select name from `time_test` where id = OLD.id ); 
 set @point02=(select age from `time_test` where id = OLD.id );
 if @point != old.name then
 update `time_test` set time_smp=now() where idC=OLD.id;
 end if;
 if @point02 != old.age then
 update `time_test` set time_smp=now() where idC=OLD.id;
 end if;
 end

原文地址:https://www.cnblogs.com/zja001/p/10095448.html

时间: 2024-10-29 08:55:09

增量抽取-时间戳方式实现的相关文章

ETL之增量抽取方式

1.触发器方式 触发器方式是普遍采取的一种增量抽取机制.该方式是根据抽取要求,在要被抽取的源表上建立插入.修改.删除3个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个增量日志表,ETL的增量抽取则是从增量日志表中而不是直接在源表中抽取数据,同时增量日志表中抽取过的数据要及时被标记或删除.为了简单起见,增量日志表一般不存储增量数据的所有字段信息,而只是存储源表名称.更新的关键字值和更新操作类型(KNSEN.UPDATE或DELETE),ETL增量抽取进程首先根据源表名称和更

Informatica增量抽取时间的设置

使用数据库或者系统变量的当前时间 Informatica中的$$SYSDATE是表示当前系统时间的系统变量. 通过这个变量,我们对每天抽取的数据可以使用以下表达式来实现增量抽取: 时间戳字段>= TRUNC($$SYSDATE – 1) 这种方法的实现比较简单,但是缺乏灵活性.不但需要另外开发一套相应的程序实现全量抽取,想要改变抽取时间范围还需要对每一个任务程序修改代码.例如需要抽取三天前的数据,我们需要对上面的表达式做如下修改: 时间戳字段>= TRUNC($$SYSDATE – 3) Ø

ETL中的数据增量抽取机制

ETL中的数据增量抽取机制 (     增量抽取是数据仓库ETL(extraction,transformation,loading,数据的抽取.转换和装载)实施过程中需要重点考虑的问 题.在ETL过程中,增量更新的效率和可行性是决定ETL实施成败的关键问题之一,ETL中的增量更新机制比较复杂,采用何种机制往往取决于源数据系统的 类型以及对增量更新性能的要求. 1 ETL概述 ETL包括数据的抽取.转换.加载.①数据抽取:从源数据源系统抽取目的数据源系统需要的数据:②数据转换:将从源数据源获取的

使用Kettle增量抽取MongoDB数据实践

需求: 增量抽取MongoDB数据并加载到MSSQL 由于不能使用关系型数据库的自定义SQL, 所以主要遇到的问题有: 增量时间的查询和参数控制 ETL的批次信息和调用参数的写入 第一个问题的解决如下: 使用命名参数在Query页中进行过滤, 一开始会担心${}的引用方式会用Mongo的语法冲突, 测试后发现运行正常 第二个问题: 先为结果增加常量值, 如常量值固定则直接写死, 不固定的常量值先设置为空串, 在后面使用字符串替换组件传入命名参数, 最后用字段选择把空串的常量值移除

sql中使用TIMESTAMP增量抽取数据

最近的项目中需要对上百万级的数据进行增量抽取操作,因此了解了一下TIMESTAMP的应用,特此记录 timestamp -- 时间戳:数据库中自动生成的唯一二进制数字,与时间和日期无关的, 通常用作给表行加版本戳的机制.存储大小为 8个字节 每个数据库都有一个计数器,当对数据库中包含 timestamp 列的表执行插入或更新操作时,该计数器值就会增加.该计数器是数据库时间戳.这 可以跟踪数据库内的相对时间,而不是时钟相关联的实际时间.一个表只能有一个 timestamp 列.每次修改或插入包含

kettle 6.1 按时间循环增量抽取数据

场景:假设有一张表数据量很大,需要按一个时间来循环增量抽取 方法:主要是通过JOB自身调用,实现循环调用,类似于 函数自调用 的循环. 1.JOB全图: 2.获取增量时间,并设置增量时间环境变量 3.通过增量环境变更,获取本次 增量数据 4.判断增量时间是否大于当前时间,判断是否继续执行一次的增量 5.调用总JOB自身,实现循环调用

Informatic学习总结_day02_增量抽取

思想:通过定义变量,通过函数改变变量的值  从而实现增量抽取

hive表增量抽取到mysql(关系数据库)的通用程序(三)

hive表增量抽取到oracle数据库的通用程序(一) hive表增量抽取到oracle数据库的通用程序(二) 这几天又用到了该功能了,所以又改进了一版,增加了全量抽取和批量抽取两个参数.并且可以设置每批次抽取到记录数. 使用shell脚本可以直接方便到将hive中到表抽取到任何关系型数据库中. shell脚本到demo如下,为便于测试,将每批次处理改为2条记录: #!/bin/sh ## !!!注意lib中jar包兼容性问题: ## 如果包含log4j-slf4j-impl-2.6.2.jar

SQOOP增量抽取时,在HIVE中实现类似Oracle的merge操作

数据仓库建设中的数据抽取环节,常常需要增量抽取业务库数据.但业务库数据不是一层不变的,会根据时间发生状态变更,那么就需要同步更新变化数据到HIVE中.过去在Oracle上做数据仓库时,可以使用merge的方法合并新老数据.但hive中没有该功能,本文旨在通过sqoop抽取后,自动实现数据合并. 表设计 将抽取表分为三张, 一张_arc表,保存每日合并后的快照,根据pt字段分区 一张_inc表,用于保存当日抽取的增量数据,根据pt字段分区 一张不带后缀的表,指向最终表给后续ETL任务使用. 步骤