数据转换作业主要是指在数据仓库内的结构化数据批量加工,对于非结构化数据以及在线查询接口、数据流的开发主要是遵循代码开发规范以及各中间件的开发规范,如使用java来开发遵守java开发规范,使用Kafka需要遵循Kafka的使用和设计规范。同时做好组件的设计,提高复用程度和开发效率。这里就不再赘述,那对于批量加工数据各平台也有相应的开发规范,对于不同的平台有不同的规范,用来提高代码的运行效率和可维护性,以下是一些共性的设计规范。
1、常见算法及选择
数据转换作业从开发上可以分为两个步骤,一是数据映射,即每个字段的来源即计算方式,比如 目标表D字段是来自于源表S字段,计算方式是SUM(S)。二是目标表加工的算法,比如delete/insert,upsert等,它是将增量数据如何和历史数据融合转化为全量数据的常用处理方式,以下是在数据仓库中经常使用的一些算法:
(1)delete all/insert:先删除目标表当前所有数据,再插入全量最新数据,此算法适用于数据量较小且不需要保留历史数据的表。如代码表、参数表。例如:
Delete from D ;
insert D select * from A;
(2) Append:增量追加:将当前源表数据直接追加到目标表中。此算法需要源表数据以增量提供。这种算法一般在事件表(交易流水表)和总账表中使用较多,用来记录所有的历史交易记录,记录每天的交易以及总账的切片数据。
delete from D where trans_date=current_date ;
insert into A select * from S wheretrans_date=current_date ;
(3)UPSERT:使用源表数据更新目标表。如果新来的源数据已经在目标表中存在,则使用新来的源数据更新目标表中的相应数据,如果新来的源数据在目标表中不存在,则直接将其加入目标表中。针对此算法,源表选择全量或增量方式提供数据均可以。此算法适应于不保留历史的当前表。如集市区的账户或客户基本信息当前表。简要步骤如下:
步骤1:根据映射关系生成临时目标表T,已有目标表为D;
步骤2:update D set D.C1=T.C1 … where D.key in ( select T.key from T);
步骤3:insert D select * from T whereT.key not in (select key from D); </