DataWorks实战7-数据集成之数据同步详解
开始之前,我们先聊下数据的分类吧。数据可以从多种维度进行分类,但从数仓开发角度看, 数据可以分为"结构化数据"、"半结构化数据"、"非结构化数据"、"时序数据"等。其中结构化数据包括关系型数据库如RDS、ORACLE,半结构化数据包括如可以解析成结构化数据的xml、json文件,非结构化数据包括如音频、视频、文本,时序数据包括设备上报的数据。应对不同的数据我们需要做的事情或能做的事情往往不同,需要结合业务区别对待。
从数仓分层角度看,数据同步是ODS层(数据接入层)的第一步,在之前的文章《DataWorks实战2-业务流程的模块规划》我们提到了在Dataworks需要创建3个数据同步业务流程,即What?(1、数据同步_全量_DI_DW,2、数据同步_增量_DI_小时_DW,3、数据同步_增量_RI_小时_DW。),今天我们说下为什么需要创建且只创建这3个,即Why?怎么实现这3个,即How?。 --可能后续会变化,不妨听我好好解释下为啥当下我这样吧。
先解释Why!《大数据之路-阿里巴巴大数据实践》的P30里对数据同步是这样说明的:"总的来说,同步方式可以分为三种:直连同步、数据文件同步和数据库日志解析同步"。在文章《Dataworks实战5-数据集成之技术选型》里我们最终选择了实时增量+离线全量、离线增量+离线全量的这2种方式作为我们的主要ETL方式,其中离线全量可以由直连同步方式完成、实时增量可以由数据库日志解析同步完成,离线增量可以由数据文件同步完成。所以我们定义了流程命名规则:{数据同步}_{同步方式}_{接入方式}_{同步频度}_[同步工具]。为了兼容业务发展,我们建议同步频率尽量低些,如到小时粒度。
再解释How!
数据同步_全量_DI_DW
这个业务流程包括2个作用,数据的离线全量同步、数据的离线清洗入库。离线全量同步:一般只有首次通过离线方式完成数据的全量同步到数仓,同步完毕后会将任务调度改为暂停,后续发生数据不一致时作为备用方案使用。2、离线清洗入库。数据清洗包含了如格式转换、数据分区、数据归档等过程。格式转换:源端数据格式不符合要求。数据分区、归档:源端数据量极大,下游业务使用起来性能较差,可以将全量数据进行按时间字段进行分区,根据前端应用系统的老化策略进行数据归档。
离线全量同步:方便进行数据管理,建议按微服务管理离线同步任务。建议将同一个微服务下的数据离线同步任务配置在同一个文件夹下,文件夹名称为微服务对应的英文三字码或者微服务中文名称。
离线任务命名规则:{di}_[同步周期]_{ods}_[数据源类型]_[数据源服务名]_{数据源表名}。其中同步周期可以为h(小时)、d(天),如果同步周期不填则表示这个仅仅是首次同步后会暂停的的离线任务(举例:di_ods_t_axx_user,di_d_ods_t_axx_user后者会每天进行一次全量同步,而前者不会)。数据源类型是数据源的组件名简写,如t、ts、tp、hb (t:Mysql,ts:TableStore,tp:MQ,hb:Hbase)。说明:如果数据源表名中已标志数据源类型,则数据源类型不需要填写。同理,如果数据源表名中已标注数据源微服务名,则数据源服务名也不需要填写。
离线清洗入库:一般情况下,使用离线全量同步即可。后期会在"数据集成之超级大表的处理"详细介绍。
数据同步_增量_DI_小时_DW
命名规则与与数据同步_增量_DI_DW一致,两者不同点这是按小时抽取源端数据,需要配置按小时的任务调度。实际场景如读取TableStore的增量日志到MaxCompute,再进行日志的列转行存储到增量表中。又如读取远程FTP增量文件后解析到MaxCompute中
数据同步_增量_RI_小时_DW
Dataworks可以按数据库实例将数据表的binlog日志解析到我们的maxcompute里来,我们只需要配置实时任务即可。因为Dataworks实时任务是配置到数据源下的,所以命名规则:{ri}_{同步周期}_{数据源简写}_2_odps。如: ri_h_axx_2_odps 表示axx数据库(微服务)的表的binlog日志同步到maxcompute中。
总结:诠释了3种数据同步业务流程是什么,为什么,怎么做。目前数据只是同步到数据中台的ODS层里,ODS层还需要开展数据的周期调度,包括清洗、整合、归档等操作,我们将在下一章《数据集成之数据合并详解》开始说明。
喜欢的朋友请帮忙点赞,谢谢大家!