Ваш запрос на выполнение (частичной) суммы фактов легко решается оконными функциями. К сожалению, я не использую Hive, поэтому вот мое Postgres рабочее решение
with t (month, name, id, target) as (values
(1 , 'Comp1', 1 , 6000 ),
(2 , 'Comp1', 1 , 6000 ),
(3 , 'Comp1', 1 , 6000 ),
(1 , 'Comp2', 2 , 6000 ),
(2 , 'Comp2', 2 , 6000 ),
(3 , 'Comp2', 2 , 6000 ),
(1 , 'Comp3', 3 , 6000 ),
(2 , 'Comp3', 3 , 6000 ),
(3 , 'Comp3', 3 , 6000 ),
(1 , 'Comp4', 4 , 6000 ),
(2 , 'Comp4', 4 , 6000 ),
(3 , 'Comp4', 4 , 6000 )
), d (yyyy_mm_dd, name, id, actual, region) as (values
( date '2019-01-01' , 'Comp1' , 1 , 1000 , 'LATAM' ),
( date '2019-01-01' , 'Comp1' , 1 , 0 , 'EU' ),
( date '2019-01-02' , 'Comp1' , 1 , 2000 , 'EU' ),
( date '2019-01-03' , 'Comp1' , 1 , 4000 , 'EU' ),
( date '2019-01-01' , 'Comp2' , 2 , 1000 , 'EU' ),
( date '2019-01-02' , 'Comp2' , 2 , 2000 , 'EU' ),
( date '2019-01-03' , 'Comp2' , 2 , 3000 , 'EU' ),
( date '2019-01-01' , 'Comp3' , 3 , 1000 , 'EU' ),
( date '2019-01-02' , 'Comp3' , 3 , 2000 , 'EU' ),
( date '2019-01-03' , 'Comp3' , 3 , 8000 , 'EU' ),
( date '2019-01-01' , 'Comp4' , 4 , 1000 , 'EU' ),
( date '2019-01-02' , 'Comp4' , 4 , 2000 , 'EU' ),
( date '2019-02-03' , 'Comp4' , 4 , 3000 , 'EU' )
)
select dr.yyyy_mm_dd, dr.name, dr.id, dr.actual,
case when dr.running_sum < t.target then 0 else (dr.running_sum - t.target) / 100 end as payment
from t
join (
select dg.*, sum(actual) over (partition by name order by yyyy_mm_dd) as running_sum
from (
select yyyy_mm_dd, name, id, sum(actual) as actual
from d
group by yyyy_mm_dd, name, id
) dg
) dr on dr.name = t.name
and month(dr.yyyy_mm_dd) = t.month -- edited to hive equivalent of postgres' extract(month from dr.yyyy_mm_dd) = t.month
Извлечение месяца из даты может быть сделано иначе, но я надеюсь, что вы поняли.