HIVE 模拟事务管理代码示例
1-已生成中间表,但未覆盖DWD 2-已覆盖DWD
--没有生成中间表时,不会走DWD覆盖环节
--生成中间表前,判断控制表状态是否为1,如果不是1,置为0,否则保持为1; 生成中间表后,生成控制表状态为1,覆盖完DWD后,生成控制表状态为2
--控制表初始化值必输为0
1、控制表生成SQL例子
insert overwrite 控制表select 1 as 状态 from 控制表 where 状态 = '1'union allselect 0 from 控制表 where not exists (select 1 from 控制表 where 状态 = '1')
2、中间表、DWD覆盖环节例子,只增加控制表的判断逻辑,旧的影响分区判断条件与此无关。
with 控制表 as (select 1 as 状态 from dual),DWD表 as( select 1 as 分区, '旧数据' 数据 from dualunion allselect 2 as 分区, '旧数据' 数据 from dual),prosess表 as (select 1 as 分区, '新数据' 数据 from dualunion allselect 3 as 分区, '新数据' 数据 from dual),原prosess表生成逻辑 as (select 1 as 分区, 'prosess新数据' 数据 from dualunion allselect 3 as 分区, 'prosess新数据' 数据 from dual)--insert overwrite prosess表select * from prosess表 where exists (select 1 from 控制表 where 状态 = '1')union allselect * from 原prosess表生成逻辑 where NOT exists (select 1 from 控制表 where 状态 = '1')