历史版本33 :数据同步概述 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

[helpvideo]3256[/helpvideo]

1.1 版本说明

FineDataLink 版本功能变动
1.6
  • 新增「自动建表」功能,详情参见本文 3.2 节

  • 下拉框支持模糊搜索,详情参见本文 4.1 节

  • 字段映射界面增加刷新按钮,详情参见本文 3.3 节

1.7

字段映射界面可编辑映射并删除字段映射关系,详情参见本文 3.3 节

1.9允许指定一个或多个字段作为比对字段,来更新目标表中的数据,详情参见本文 3.2 节
2.1

字段映射时支持模糊匹配,可选择映射方式,详情参见本文 3.3 节

2.2

数据来源支持服务器数据集,支持从 CSV、Excel 文件中读取数据

3.0

原「离线同步」节点更名为「数据同步」

3.7数据去向中若选择自动建表」字段映射Tab下可删除表字段、修改表字段展示顺序、修改表字段长度、修改字段类型,详情参见本文 2.3 节

4.0.1「数据去向」中若选择自动建表」字段映射Tab下修改表字段展示顺序的方式,从点击调整字段顺序调整为拖拽调整字段顺序,详情参见本文 2.3 节
4.0.13
  • 「数据来源」支持 MongoDB 和简道云

  • 支持自动将数据同步内容生成「数据转换」节点,详情参见本文 2.2 节

4.0.14
  • 「数据来源」支持「FTP/SFTP」数据源

  • 「数据来源」支持「服务器本地目录」数据源

1.2 应用场景

用户希望将大量的数据直接抽取同步写入数据库中,且想要同步的数据不需要非常复杂的处理步骤,就可以使用「数据同步」节点。如下图所示:

1.3 功能简介

通过「设置需要抽取的数据」>「设置需要写入的数据表」>「调整数据表字段」将数据直接抽取并写入数据库中。

  • 数据来源:设置源表,从哪个数据库的哪张表抽取数据,可写 SQL 语句

  • 数据去向:设置目标表,抽取的数据保存到哪个数据库的哪张表下,可存放到已有的表,也支持自动新建一个表

  • 字段映射:设置源表跟目标表之间的字段映射关系,支持手动调整映射关系

注:数据同步后的定时更新可以参考:数据更新专题

1.4 前提条件

拥有能够进行数据开发的 FineDataLink 系统用户:用户管理

对用户进行了数据开发权限分配:数据平台使用权限定时任务管理权限

配置了需要接入FineDataLink 作为数据来源的数据连接,详情参见:[通用]配置数据连接

2. 示例编辑

此处给出一个示例,演示从一个 SQLite 数据库的客户表中将华北地区的所有数据,抽取到另一个 MySQL 数据库中去。

2.1 创建任务

新建一个 ETL 任务,将一个「数据同步」节点拖到设计界面,点击该节点进行设置。

2022-11-15_15-35-39.gif

2.2 设置数据来源

数据源类型选择「SQLite」,数据连接选择「FRDemo」,SQL 语句填写:select * from 客户 where 地区='华北'

配置选项说明
数据源类型FineDataLink支持的数据源 (支持数据读取的数据库)
数据连接连接到源数据库,配置数据连接的方法参见文档 [通用]配置数据连接
SQL 语句
通过 SQL 从源数据库的表中查询取数,且支持引用定时任务中的参数,参数的定义和使用方式可参见文档 自定义参数
数据预览可查看当前语句对应的数据,一般用来检查语句写得对不对,预览时最多只显示 20 行且与实际数据可能存在差异

此时可以先用「数据预览」看下取数效果,如下图所示:

2022-11-15_15-40-49.gif

此时若发现取出的数据需要进行一些复杂的操作,例如行列转换数据关联JSON解析等数据处理和转换,则可以使用「生成数据转换」功能,将根据数据同步节点的数据来源和去向设置,新增一个「数据转换」节点,你可以使用数据转换替代数据同步进行复杂的数据处理工作,如下图所示:

2022-11-15_15-48-02.gif

注1:当「循环容器」内的「数据同步」「参数赋值」快速转「数据转换」时,生成的「数据转换」限制在循环容器内。

注2:若「数据同步」、「参数赋值」前后有节点连线,转「数据转换」时,生成的「数据转换」不影响原先节点连线关系。

2.3 设置数据去向

数据源类型选择「MySQL」,数据连接选择「demo」,由于没有事先建表,所以目标表选择「自动建表」,并给表命名为「customcopy」。

写入方式和比对字段此处无需设置,采用默认的即可,如下图所示:

数据去向一些设置的介绍和注意事项如下:

配置选项
数据源类型FineDataLink定时任务支持的数据源 (支持数据读取的数据库)
数据连接连接到目标数据库,配置数据连接的方法参见文档 [通用]配置数据连接
目标表

「已存在表」是选择目标数据库中已有的表来存放数据

「自动建表」是直接在目标数据库中新建一张表来存放

写入方式数据写入目标数据库表的方式,可以选择「直接将数据写入目标表」或者「清空目标表再写入数据」
比对字段允许指定一个或多个字段作为比对字段,来更新目标表中的数据,实现增量写入。目标表有主键时该项必须设置,否则节点运行会报错
更新策略上面「比对字段」选择之后( 选择框里不为空 ),就会显示改设置项,可以根据选择的字段,选择数据的更新策略,是覆盖、忽略还是直接报错

写入方式、比对字段、更新策略 3 个设置项某种程度上具有关联性,此处给一个详细的介绍:

1)写入方式

写入方式介绍
直接将数据写入目标表

直接将数据写入到目标表中:

  • 如果是目标表中没有的数据,直接写入就好

  • 如果是更新的数据,还需要根据「比对字段」和「更新策略」来决定是覆盖、忽略还是报错

清空目标表再写入数据

直接先把目标表清空掉,然后再写入数据

注:数据量较大情况下,「直接将数据写入目标表」会比「清空目标表再写入数据」的执行效率更高,因为后者方案需要先清空目标表数据,再将来源表的数据全量抽取至目标表中;而前者方案直接利用目标表的主键,将来源表数据和目标表数据进行比对,若数据有变化即更新,若数据无变化则不更新,相比后者方案,更新的数据会更少,所以抽数速度更快。

2)比对字段和更新策略

目标表比对字段
更新策略
如果目标表设置了主键

目标表有主键,也就是对数据唯一性有约束

有增量数据要写到目标表中时,就要判断是插入目标表中没有的新数据,还是更新目标表中已有的数据,判断就要用到「比对字段」

  • 比对字段值相同:更新操作

  • 比对字段值不同:插入操作

点击「比对字段」后,主键字段会自动选中

42.png

主键字段可以取消,但是建议保留,在此基础上还可以选择其他字段:

43.png

这样有更新的数据过来后,就可以根据这些比对字段来实现数据更新,但是要结合更新策略来判断,是覆盖掉、忽略掉还是直接报错

注:目标表有主键,比对字段必须要选,选择框里不能空着,否则会有报错:

compare columns is empty

44.png

只要设置了比对字段,就会显示「更新策略」这个选项

因为目标表有主键时,必须要选择比对字段

所以在点击「比对字段」后,更新策略必定出现

可选项有 3 个,分别如下:

  • 覆盖:

增量数据和目标表中比对字段有相同的,也就是更新操作,那么直接将这些相同字段对应的记录覆盖到目标表中去

  • 忽略:

增量数据和目标表中比对字段有相同的,那么直接忽略掉这些相同字段对应的记录,只插入目标表中没有的数据

  • 报错:

增量数据和目标表中比对字段有相同的,那么停止写入并报错

47.png

如果目标表没有主键

目标表没有主键,也就是对数据唯一性没有约束

那么此时点击「比对字段」后,可以不选择字段,如果不选,不会显示更新策略,那么增量数据都是直接插入到目标表里,没有更新数据这一说

45.png

当然也可以选择比对字段,这时就会出现更新策略,可以区别是插入目标表中没有的新数据,还是更新目标表中已有的数据

46.png

不选比对字段,不出现更新策略

选择了比对字段,更新策略同上

注1:如果字段映射里目标表中缺少比对字段,那么写入数据时就会找不到比对字段。所以字段映射时必须包含比对字段。

注2:若目标表中的字段包含约束,则写入的字段需要满足约束。

注3:当选择比对字段为主键时,若目标表中未写入的字段存在约束,那么写入数据会出现失败,这种场景仅在 MySQL 和 Postgre SQL 中出现。

注4:字段中若有 null 则不能作为比对字段;不能选择字段类型为 float 的字段作为比对字段。

2.4 设置字段映射

字段映射就是查看或修改源表跟目标表的字段关系,此处用默认的即可,如下图所示:

数据映射一些设置的介绍和注意事项如下:

配置项
说明
映射方式选择源表字段跟目标表字段的映射方式,有两种分别是「同名映射」和「同行映射」
建表语句如果设置「数据去向」时是「自动建表」的,那么就会有这个入口,点开后可查看和复制建表语句,如果自动建表不满足要求,可粘贴到 SQL脚本 修改并建表
编辑映射用户能够选择性地使用获取到的来源字段,不想写入的字段删除映射字段即可
重新获取源表的字段、字段类型发生改变时,点击该按钮可重新获取,并初始化字段映射界面

两种映射方式的匹配逻辑如下:

映射方式匹配逻辑
同名映射

按照目标表字段与来源表字段字符重合的情况匹配,整体逻辑为:

1)根据来源字段,在目标表中寻找同名(字符完全相同)字段对其进行匹配

2)没有同名字段时:

  1. 寻找目标表中包含来源表字段字符的字段,或者来源表中包含目标表字段字符的字段,对其进行匹配

  2. 如果存在多个字符符合上述条件,则按照字段在目标表中出现的顺序进行优先级区分,出现顺序靠前的优先级高,匹配时优先展示

  3. 已被匹配的字段不再被匹配,即不存在多个源头字段对应同一个目标表字段的情况

3)如果在目标表中找不到同名或者包含目标表字段字符的字段,则右侧映射字段显示为空

同行映射源头字段和目标表字段按顺序匹配:同行则建立映射关系

使用时一些需要注意的点:

1)映射时删除了一些来源表字段,那么切换映射方式后,还是会根据剩下来的这些字段进行调整

2)手动将映射方式从默认项「同名映射」切换到「同行映射」,点击「重新获取」字段,获取的字段将按照「同行映射」的方式自动匹配

3)以下两种场景会出现目标表无字段可匹配源头表的情况,在这两种情况下,右侧目标表字段可展示为空:

  • 同名映射:目标表不存在包含源头表字段的字段

  • 同行映射:源头表字段数量大于目标表字段数量

4)映射时,如果右侧目标表有空字段,会出现提示图标,悬浮在其上方提示:目标表字段存在空值

注:如果字段映射里目标表中缺少比对字段,那么写入数据时就会找不到比对字段。所以字段映射时必须包含比对字段。

2.5 运行节点

右键节点后选择「运行节点」,下方运行日志出现执行成功信息即表示节点执行成功。

2022-11-15_16-03-54.gif

节点运行成功后,可以看到 MySQL 数据库中多了一张表 customcopy,如下图所示: