1. 概述编辑
1.1 版本说明
FineDataLink 版本 | 功能变动 |
---|---|
1.6 |
|
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 |
|
1.2 应用场景
用户希望将大量的数据直接抽取同步写入数据库中,且想要同步的数据不需要非常复杂的处理步骤,就可以使用「数据同步」节点。如下图所示:
1.3 功能简介
通过「设置需要抽取的数据」>「设置需要写入的数据表」>「调整数据表字段」将数据直接抽取并写入数据库中。
数据来源:设置源表,从哪个数据库的哪张表抽取数据,可写 SQL 语句
数据去向:设置目标表,抽取的数据保存到哪个数据库的哪张表下,可存放到已有的表,也支持自动新建一个表
字段映射:设置源表跟目标表之间的字段映射关系,支持手动调整映射关系
注:数据同步后的定时更新可以参考:数据更新专题
1.4 前提条件
拥有能够进行数据开发的 FineDataLink 系统用户:用户管理
对用户进行了数据开发权限分配:数据平台使用权限、定时任务管理权限
配置了需要接入FineDataLink 作为数据来源的数据连接,详情参见:[通用]配置数据连接
2. 示例编辑
此处给出一个示例,演示从一个 SQLite 数据库的客户表中将华北地区的所有数据,抽取到另一个 MySQL 数据库中去。
2.1 创建任务
新建一个 ETL 任务,将一个「数据同步」节点拖到设计界面,点击该节点进行设置。
2.2 设置数据来源
数据源类型选择「SQLite」,数据连接选择「FRDemo」,SQL 语句填写:select * from 客户 where 地区='华北'
配置选项 | 说明 |
---|---|
数据源类型 | FineDataLink支持的数据源 (支持数据读取的数据库) |
数据连接 | 连接到源数据库,配置数据连接的方法参见文档 [通用]配置数据连接 |
SQL 语句 | 通过 SQL 从源数据库的表中查询取数,且支持引用定时任务中的参数,参数的定义和使用方式可参见文档 自定义参数 |
数据预览 | 可查看当前语句对应的数据,一般用来检查语句写得对不对,预览时最多只显示 20 行且与实际数据可能存在差异 |
此时可以先用「数据预览」看下取数效果,如下图所示:
此时若发现取出的数据需要进行一些复杂的操作,例如行列转换、数据关联、JSON解析等数据处理和转换,则可以使用「生成数据转换」功能,将根据数据同步节点的数据来源和去向设置,新增一个「数据转换」节点,你可以使用数据转换替代数据同步进行复杂的数据处理工作,如下图所示:
注1:当「循环容器」内的「数据同步」「参数赋值」快速转「数据转换」时,生成的「数据转换」限制在循环容器内。
注2:若「数据同步」、「参数赋值」前后有节点连线,转「数据转换」时,生成的「数据转换」不影响原先节点连线关系。
2.3 设置数据去向
数据源类型选择「MySQL」,数据连接选择「demo」,由于没有事先建表,所以目标表选择「自动建表」,并给表命名为「customcopy」。
写入方式和比对字段此处无需设置,采用默认的即可,如下图所示:
数据去向一些设置的介绍和注意事项如下:
配置选项 | |
---|---|
数据源类型 | FineDataLink定时任务支持的数据源 (支持数据读取的数据库) |
数据连接 | 连接到目标数据库,配置数据连接的方法参见文档 [通用]配置数据连接 |
目标表 | 「已存在表」是选择目标数据库中已有的表来存放数据 「自动建表」是直接在目标数据库中新建一张表来存放 |
写入方式 | 数据写入目标数据库表的方式,可以选择「直接将数据写入目标表」或者「清空目标表再写入数据」 |
比对字段 | 允许指定一个或多个字段作为比对字段,来更新目标表中的数据,实现增量写入。目标表有主键时该项必须设置,否则节点运行会报错 |
更新策略 | 上面「比对字段」选择之后( 选择框里不为空 ),就会显示改设置项,可以根据选择的字段,选择数据的更新策略,是覆盖、忽略还是直接报错 |
写入方式、比对字段、更新策略 3 个设置项某种程度上具有关联性,此处给一个详细的介绍:
1)写入方式
写入方式 | 介绍 |
---|---|
直接将数据写入目标表 | 直接将数据写入到目标表中:
|
清空目标表再写入数据 | 直接先把目标表清空掉,然后再写入数据 |
注:数据量较大情况下,「直接将数据写入目标表」会比「清空目标表再写入数据」的执行效率更高,因为后者方案需要先清空目标表数据,再将来源表的数据全量抽取至目标表中;而前者方案直接利用目标表的主键,将来源表数据和目标表数据进行比对,若数据有变化即更新,若数据无变化则不更新,相比后者方案,更新的数据会更少,所以抽数速度更快。
2)比对字段和更新策略
目标表 | 比对字段 | 更新策略 |
---|---|---|
如果目标表设置了主键 | 目标表有主键,也就是对数据唯一性有约束 有增量数据要写到目标表中时,就要判断是插入目标表中没有的新数据,还是更新目标表中已有的数据,判断就要用到「比对字段」
点击「比对字段」后,主键字段会自动选中 主键字段可以取消,但是建议保留,在此基础上还可以选择其他字段: 这样有更新的数据过来后,就可以根据这些比对字段来实现数据更新,但是要结合更新策略来判断,是覆盖掉、忽略掉还是直接报错 注:目标表有主键,比对字段必须要选,选择框里不能空着,否则会有报错: compare columns is empty | 只要设置了比对字段,就会显示「更新策略」这个选项 因为目标表有主键时,必须要选择比对字段 所以在点击「比对字段」后,更新策略必定出现 可选项有 3 个,分别如下:
增量数据和目标表中比对字段有相同的,也就是更新操作,那么直接将这些相同字段对应的记录覆盖到目标表中去
增量数据和目标表中比对字段有相同的,那么直接忽略掉这些相同字段对应的记录,只插入目标表中没有的数据
增量数据和目标表中比对字段有相同的,那么停止写入并报错 |
如果目标表没有主键 | 目标表没有主键,也就是对数据唯一性没有约束 那么此时点击「比对字段」后,可以不选择字段,如果不选,不会显示更新策略,那么增量数据都是直接插入到目标表里,没有更新数据这一说 当然也可以选择比对字段,这时就会出现更新策略,可以区别是插入目标表中没有的新数据,还是更新目标表中已有的数据 | 不选比对字段,不出现更新策略 选择了比对字段,更新策略同上 |
注1:如果字段映射里目标表中缺少比对字段,那么写入数据时就会找不到比对字段。所以字段映射时必须包含比对字段。
注2:若目标表中的字段包含约束,则写入的字段需要满足约束。
注3:当选择比对字段为主键时,若目标表中未写入的字段存在约束,那么写入数据会出现失败,这种场景仅在 MySQL 和 Postgre SQL 中出现。
注4:字段中若有 null 则不能作为比对字段;不能选择字段类型为 float 的字段作为比对字段。
2.4 设置字段映射
字段映射就是查看或修改源表跟目标表的字段关系,此处用默认的即可,如下图所示:
数据映射一些设置的介绍和注意事项如下:
配置项 | 说明 |
---|---|
映射方式 | 选择源表字段跟目标表字段的映射方式,有两种分别是「同名映射」和「同行映射」 |
建表语句 | 如果设置「数据去向」时是「自动建表」的,那么就会有这个入口,点开后可查看和复制建表语句,如果自动建表不满足要求,可粘贴到 SQL脚本 修改并建表 |
编辑映射 | 用户能够选择性地使用获取到的来源字段,不想写入的字段删除映射字段即可 |
重新获取 | 源表的字段、字段类型发生改变时,点击该按钮可重新获取,并初始化字段映射界面 |
两种映射方式的匹配逻辑如下:
映射方式 | 匹配逻辑 |
---|---|
同名映射 | 按照目标表字段与来源表字段字符重合的情况匹配,整体逻辑为: 1)根据来源字段,在目标表中寻找同名(字符完全相同)字段对其进行匹配 2)没有同名字段时:
3)如果在目标表中找不到同名或者包含目标表字段字符的字段,则右侧映射字段显示为空 |
同行映射 | 源头字段和目标表字段按顺序匹配:同行则建立映射关系 |
使用时一些需要注意的点:
1)映射时删除了一些来源表字段,那么切换映射方式后,还是会根据剩下来的这些字段进行调整
2)手动将映射方式从默认项「同名映射」切换到「同行映射」,点击「重新获取」字段,获取的字段将按照「同行映射」的方式自动匹配
3)以下两种场景会出现目标表无字段可匹配源头表的情况,在这两种情况下,右侧目标表字段可展示为空:
同名映射:目标表不存在包含源头表字段的字段
同行映射:源头表字段数量大于目标表字段数量
4)映射时,如果右侧目标表有空字段,会出现提示图标,悬浮在其上方提示:目标表字段存在空值
注:如果字段映射里目标表中缺少比对字段,那么写入数据时就会找不到比对字段。所以字段映射时必须包含比对字段。
2.5 运行节点
右键节点后选择「运行节点」,下方运行日志出现执行成功信息即表示节点执行成功。
节点运行成功后,可以看到 MySQL 数据库中多了一张表 customcopy,如下图所示: