金仓KFS数据过滤-列过滤

156 阅读2分钟

关键字:

KingbaseFlysync、数据同步、数据过滤、表结构变更、列过滤、dropcolumn

一、需求背景

针对数据分发、数据集成、引用改变等场景,客户因为实际业务等原因,存在表结构变更的场景,这种场景下针对增量数据和存量数据如何保证目标端表结构发生改变之后能够正常入库和比对一致,这种情况下就需要一个中间转换的过程,KFS为这种场景提供了一个列级过滤功能

二、原理介绍

KFS的列过滤功能使用dropcolumn过滤器实现,我们获取源端表数据(存量、增量)的同时获取表结构,KFS数据是通过流的方式进行两端迁移和同步,流的过程中是一个节点一个节点的方式,每个节点都有过滤器,过滤器将对应列和数据去掉(会严格按照大小写进行模式、表、列名匹配),然后重组数据流转到下一个节点

三、配置使用方式

在flysync.ini文件中添加如下配置:

svc-remote-filters= dropcolumn  
-----过滤器中添加dropcolumn过滤器
property=replicator.filter.dropcolumn.definitionsFile=${replicator.home.dir}/support/filters-config/dropcolumn.json 
---------------指定dropcolumn过滤规则文件路径

四、示例及配置效果展示

4.1 配置文件说明

[
    {
        "schema": "vip",  ----------过滤表模式名
        "table": "clients",   -------------过滤表名
        "columns": [           -----------过滤列
            "personal_code",
            "birth_date",
            "email"
        ]
},
{ 
"schema": "realestate",  ----------过滤表模式名
        "table": "test",   -------------过滤表名
        "columns": [           -----------过滤列
            "a"
        ]
    }
]

以上配置文件表示过滤vip模式下clients表的personal_code,birth_date,email列及realestate模式下test表的a列

4.2 效果展示

源端向clients 表插入数据 insert into clients values (1,'zhangsan','2000-01-02','zhangsan@163.com');

图片.png

目标端的clients表同步数据时personal_code,birth_date,email列数据丢弃,只保留id

目标端kufl

图片.png

目标端数据

图片.png

五、常见问题

过滤器使用串行方式运行,当dropcolumn过滤器配置在rename或casetransform等过滤器之后时,需要将配置文件修改为已转换过的表、列名才能正常过滤,需要注意dropcolumn必须在rename、casetransform后面,否则不生效