yugong之单张表迁移

场景

要对愚公二开,所以先做一个测试,将愚公跑通,之前一直比较忙,今天将日志补上,以防遗忘

开始

单张表从orale到mysql的迁移,源端oracle和目标端mysql的表结构不完全相同

源库目标库
数据库类型ORACLEMYSQL
用户user1root
密码123456root
URLjdbc:oracle:thin:@127.0.0.1:1521:user1jdbc:mysql://127.0.0.1:3306/root
表名称yugong_example_oracleyugong_example_mysql_mysql

源端oracle

创建user1用户 直接授权dba
原因:oracle全量基于JDBC拉取数据,增量基于物化视图来实现,所以这里需要给oracle数据库账号开权限

创建测试表

create table yugong_example_oracle(

id NUMBER(11)  ,

name varchar2(32) ,

alias_name  char(32) default ' ' not null,

amount number(11,2),

score  number(20),

text_b blob,

text_c clob,

gmt_create date not null,

gmt_modified date not null,

CONSTRAINT yugong_example_oracle_pk_id  PRIMARY   KEY (id)
);

插入2条测试数据

insert into yugong_example_oracle values(1,'herche','herche',11.2,100, NULL , NULL ,sysdate,sysdate);

insert into yugong_example_oracle values(2,'naraku','naraku',20.33,8888, NULL , NULL ,sysdate,sysdate);

commit;


目标端MySQL

create table yugong_example_mysql

 ( id bigint(20) unsigned auto_increment,

     display_name varchar(128) ,

     amount varchar(32),

     score bigint(20) unsigned ,

     text_b blob,

     text_c text,

     gmt_create timestamp not null,

     gmt_modified timestamp not null,

     gmt_move timestamp not null,

     CONSTRAINT yugong_example_mysql_pk_id  PRIMARY KEY (id)

 );

拉取愚公代码之后改配置

#源库配置

yugong.database.source.username=user1

yugong.database.source.password=123456

yugong.database.source.type=ORACLE

yugong.database.source.url=jdbc:oracle:thin:@127.0.0.1:1521:user1

yugong.database.source.encode=UTF-8

yugong.database.source.poolSize=30

#目标库配置

yugong.database.target.url=jdbc:mysql://127.0.0.1:3306/demo01

yugong.database.target.username=root

yugong.database.target.password=root

yugong.database.target.type=MYSQL

yugong.database.target.encode=UTF-8

yugong.database.target.poolSize=30

 

yugong.table.batchApply=true

yugong.table.onceCrawNum=1000

yugong.table.tpsLimit=0

# use connection default schema

yugong.table.ignoreSchema=false

# skip Applier Load Db failed data

yugong.table.skipApplierException=false

 

#需要同步表的黑白名单:表可加逗号分隔,白名单为空,代表整个库所有表


yugong.table.white= yugong_example_oracle

yugong.table.black=

 

# tables use multi-thread enable or disable

yugong.table.concurrent.enable=true

# tables use multi-thread size

yugong.table.concurrent.size=5

# retry times

yugong.table.retry.times = 3

# retry interval or sleep time (ms)

yugong.table.retry.interval = 1000

# MARK/FULL/INC/ALL(REC+FULL+INC)/CHECK/CLEAR

yugong.table.mode=ALL     # (自动全量+增量模式)

 

# yugong extractor

yugong.extractor.dump=false

yugong.extractor.concurrent.enable=true

yugong.extractor.concurrent.size=20

yugong.extractor.noupdate.sleep=1000

yugong.extractor.noupdate.thresold=0

yugong.extractor.once=false

# {0} is all columns , {1}.{2} is schemaName.tableName , {3} is primaryKey

#yugong.extractor.sql=select /*+parallel(t)*/ {0} from {1}.{2} t

#yugong.extractor.sql=select * from (select {0} from {1}.{2} t where {3} > ? order by {3} asc) where rownum <= ?

 

# yugong applier

yugong.applier.concurrent.enable=true

yugong.applier.concurrent.size=20

yugong.applier.dump=false

 

# stats

yugong.stat.print.interval=5

yugong.progress.print.interval=1

 

# alarm email

yugong.alarm.email.host = smtp.163.com

yugong.alarm.email.username = test@163.com

yugong.alarm.email.password =

yugong.alarm.email.stmp.port = 465

配置数据转换逻辑

上文准备的测试环境的源端oracle的表yugong_example_oracle和目标端mysql的表yugong_example_mysql有如下不同的地方:

  1. table名不同. oracle中为yugong_example_oracle,mysql中为yugong_example_mysql

  2. 字段名字不同. oracle中的name字段,映射到mysql的display_name

  3. 字段逻辑处理. mysql的display_name字段数据来源为oracle库的:name+’(‘alias_name+’)’

  4. 字段类型不同. oracle中的amount为number类型,映射到mysql的amount为varchar文本型

  5. 源库多一个字段. oracle中多了一个alias_name字段

  6. 目标库多了一个字段.mysql中多了一个gmt_move字段,(简单的用迁移时的当前时间进行填充)

故,需要根据不同的地方定义DataTranslator.java,下文的YugongExampleOrackeDataTranslator.java中配置这里的6项不同之处

public class YugongExampleOracleDataTranslator extends AbstractDataTranslator implements DataTranslator {

 

    public boolean translator(Record record) {

        // 1. schema/table名不同

    

        record.setTableName("yugong_example_mysql");

            //至此可知道源表为yugong_example_oracle,目标表为yugong_example_mysql

      

 // 2. 字段名字不同,

//源表的name字段,目标表中叫display_name

        ColumnValue nameColumn = record.getColumnByName("name");

        if (nameColumn != null) {

            nameColumn.getColumn().setName("display_name");

        }

       

 // 3. 字段逻辑处理

        ColumnValue aliasNameColumn = record.getColumnByName("alias_name");

        if (aliasNameColumn != null) {

            StringBuilder displayNameValue = new StringBuilder(64);

            displayNameValue.append(ObjectUtils.toString(nameColumn.getValue()))

                .append('(')

                .append(ObjectUtils.toString(aliasNameColumn.getValue()))

                .append(')');

            nameColumn.setValue(displayNameValue.toString());

        }

 

        // 4. 字段类型不同

        ColumnValue amountColumn = record.getColumnByName("amount");

        if (amountColumn != null) {

            amountColumn.getColumn().setType(Types.VARCHAR);

            amountColumn.setValue(ObjectUtils.toString(amountColumn.getValue()));

        }

 

        // 5. 源库多一个字段

        record.removeColumnByName("alias_name");

 

        // 6. 目标库多了一个字段

        ColumnMeta gmtMoveMeta = new ColumnMeta("gmt_move", Types.TIMESTAMP);

        ColumnValue gmtMoveColumn = new ColumnValue(gmtMoveMeta, new Date());

        gmtMoveColumn.setCheck(false);// 该字段不做对比

        record.addColumn(gmtMoveColumn);


        return super.translator(record);

    }

}

启动

以增量形式启动即可。
创建物化视图日志:


create materialized view log on user1."yugong_example_oracle" with SEQUENCE including new values
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Halcon是一种常用的图像处理软件,可以用于各种缺陷检测任务。在Halcon中,可以使用不同的算法和技术来进行缺陷检测。根据引用\[1\]中提供的实例,Halcon可以用于背景网格产品刮伤缺陷检测、不均匀表面刮伤检测、产品表面三角缺陷检测、产品毛刺检测、产品上凹坑检测、产品周围缺口检测、电路板短路、断路检测、找出所有网格顶点的位置、化妆品标签褶皱检测、皮革纹理表面缺陷检测、手机摄像头图像表面的轻微缺陷检测、网状产品表面破损检测、铣刀刀口破损缺陷检测和检测印刷数字是否完整等任务。 根据引用\[2\]中的描述,缺陷检测是一项具有挑战性的任务,需要保证稳定性和精度。传统的算法检测缺陷通常需要进行复杂的调试和参数调整,而且容易出现检测不稳定和误测的情况。机器学习和深度学习成为缺陷检测领域的重要技术难点。机器学习方法通常使用类似MLP的神经网络对缺陷特征进行训练和分类。深度学习方法则需要大量的缺陷样本进行训练,并且需要手动标注缺陷位置,训练周期较长。迁移学习法是一种新兴的方法,可以利用已经训练好的网络模型进行缺陷检测。 在日常工程应用中,Halcon通常使用形状匹配进行定位,但当待匹配物体有较大变形时,形状匹配的结果可能不准确,特别是在塑料产品成形时变形或纺织产品因褶皱而变形的情况下。这时需要采用其他方法来获得精确的定位结果。 综上所述,Halcon可以应用于各种缺陷检测任务,并且可以根据具体情况选择合适的算法和技术来实现精确的检测结果。 #### 引用[.reference_title] - *1* [【愚公系列】2023年04月 Halcon机器视觉-15种常用缺陷检测实例](https://blog.csdn.net/aa2528877987/article/details/129943049)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [基于halcon—缺陷检测常用方法与示例总结](https://blog.csdn.net/weixin_50016546/article/details/124981131)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值