概述
数据集成致力于提供复杂网络环境下、丰富的异构数据源之间高速稳定的数据移动及同步能力。
一般我们我们通过离线方式或实时方式进行数据汇聚。
这篇文章简述使用离线方式进行数据集成的几种方式:
离线同步时需要考虑的技术要点
- 全量或增量数据同步
- 定义字段映射关系并为目标表字段赋值:通过字段映射,来定义源端字段与目标端字段的读取和写入关系,源端字段将会根据字段映射关系写入目标端对应类型的字段中。
- 作业速率上限控制:避免同步速度过快对数据来源端或者数据去向端造成太大的压力
- 脏数据个数控制:脏数据是对于业务没有意义,格式非法或者同步过程中出现问题的数据。单条数据写入目标数据源过程中发生了异常,则此条数据为脏数据。 因此只要是写入失败的数据均被归类于脏数据。例如,源端是VARCHAR类型的数据写到INT类型的目标列中,导致因为转换不合理而无法写入的数据。
库表
如果对方的数据库对外开发,也就是我们的数据平台能够直连对方数据库,我们可以采用库表的方式来直接读取对方的数据。
另外如果对方考虑对生产库的影响提供了备份库的信息,那也可以通过直连对方备份库的方式直接采集。
使用这种方式的主要依赖字段为增量字段,如果数据的唯一id为自增的话可以使用自增ID,否则需要根据业务的创建时间字段来作为增量依据。
数据库视图
原则上与库表接口类似
接口调用
有些数据提供方会在规划初期就规划了对外提供开放数据,这时如果对方能够提供API接口的方式来获取数据,那数据平台可通过调用api的方式来对数据进行汇聚。
增量字段策略与库表接口类似。
文件读取
如果对方定期将数据归档至指定文件目录,那可以使用文件同步的方式将数据进行汇聚,汇聚至数仓后进行下一步的解析动作。这时候一般使用ftp或者rsync的方式进行数据汇聚。
ftp
在对方数据源搭建ftp服务器,数据平台作为ftp客户端定期去拉取数据。
rsync
rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。
它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以减少数据的传输。
rsync算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快。
除此之外,rsync可拷贝、显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。
工作原理:
a、客户端构造FileList,FileList包含了需要与服务器同步的所有文件信息对name->id
(id用来唯一表示文件例如MD5)
b、客户端将FileList发送到服务器。
c、服务器上rsync处理客户端发过来的FileList,构建新的NewFileList。
其中根据MD5值比较,删除服务器上已经存在的文件信息对,只保留服务器上不存在或变化的文件。
d、客户端得到服务器发送过来的NewFileList,然后把NewFileList中的文件重新传输到服务器。
优点:
1)可以镜像保存整个目录树和文件系统。
2)可以很容易做到保持原来文件的权限、时间、软硬连接等。
3)无需特殊权限即可安装。
4)快速:第一次同步时rsync复制全部内容,但在下一次值传输修改过的内容
5)压缩传输:rysnc在传输的过程中可以实行压缩及解压缩操作,可以使用更少的带宽
6)安全:可以使用scp、ssh等方式来进行文件传输
7)支持匿名传输,以方便进行网站镜像
8)rsync不仅可以远程同步数据(类似于scp),而且可以本地同步数据(类似于cp),做差异同步
9)openssh 8.0已经把scp标记为过时不建议使用了。建议用sftp或者rsync替代scp