MergeDelta2.0实现

实现了由mergedelta调用的任务对结果写成ORC格式的支持。但部分ods任务是由starshuttle调用的,即hive表是增量表的mysql2hive任务。本文主要说明mergedelta对将增量表支持写ORC的实现。

为了将增量表改造为ORC,那么wormhole不能直接写入目标表所在目录,需要先将TEXT结果存在临时目录,再转换为ORC格式。这个过程和mergedelta有相似之处,可以考虑把这个过程交由mergedelta统一处理,因此mergedelta将不仅仅是合并增量部分的功能,也有把TEXT结果转换为ORC结果的功能。最终,mergedelta可以改名叫load data,由其调用wormhole,并根据任务的情况进行mergedelta或convert。

主要的问题:

从不同维度来看,任务分多种类型,同时在灰度期间必须支持旧的运行方式,所以组合起来的情况比较多,必须同时支持运行各种组合情况的任务。

从hive表角度:分为全量表、增量表、快照表

从调用方式:分为mergedelta、starshuttle

从目标表格式:分为orc、text

运行时间:分为第一次运行、预跑、普通运行


实现要点:

总结以上各种不同情况,分析出共有3种调用wormhole的方式

1.READ_DIRECT_WRITE_DIRECT

直接根据任务配置读写,会直接写入目标表目录
适用情况:
a.目标表仍是text的使用mergedelta的预跑和第一次跑
2.目标表仍是text的使用starshuttle的增量表任务

b.READ_DIRECT_WRITE_TMP

直接根据任务配置读,但是写入tmp库
适用情况:
a.目标表已经是orc的使用mergedelta的预跑和第一次跑
b.目标表已经是orc的使用starshuttle的增量表任务

3.READ_DELTA_WRITE_DELTA

在原任务配置上加上增量限定,写入delta表
适用情况:
使用mergedelta的非预跑、非第一次运行的任务(目标表是text、orc都适用)

 

调用完wormhole后可能会有三种不同的后续操作,后续操作是和wormhole调用方式一一对应的。

1.NONE

什么也不做

2.CONVERT

把TEXT结果转换为ORC写入目标表

3.MERGE

把增量部分数据和原先的数据进行合并再写入目标表

你可能感兴趣的:(MergeDelta2.0实现)