在配置单元SQL中使用条件概率的窗口函数乘以数字

在配置单元SQL中使用条件概率的窗口函数乘以数字,sql,hive,conditional-statements,probability,windowing,Sql,Hive,Conditional Statements,Probability,Windowing,我有一张蜂巢桌,看起来像这样 id, index, p 1, 1, 0.2 1, 2, 0.1 1, 3, 0.3 1, 4, 0.1 2, 1, 0.2 2, 2, 0.3 2, 3, 0.4 对于每个id,我要计算以下内容: \sum_{i=1}^n(\prod _{k=1}^{i-1}(1-p_k)) 例如,对于id=2,这将是p_1+(1-p_1)*p2+(1-p_1)*(1-p_2)*p3,因为它只有三个概率。有没有一种方法可以在Hive中使用窗口功能来实现这一点?您

我有一张蜂巢桌,看起来像这样

id, index, p
1, 1, 0.2 
1, 2, 0.1 
1, 3, 0.3 
1, 4, 0.1 
2, 1, 0.2 
2, 2, 0.3 
2, 3, 0.4
对于每个
id
,我要计算以下内容:

\sum_{i=1}^n(\prod _{k=1}^{i-1}(1-p_k))


例如,对于
id=2
,这将是
p_1+(1-p_1)*p2+(1-p_1)*(1-p_2)*p3
,因为它只有三个概率。有没有一种方法可以在Hive中使用窗口功能来实现这一点?

您可以尝试使用带有窗口、按id分区和按索引排序的产品。我不确定产品是否有聚合函数,但如果没有,可以使用log+sum+exp来获得相同的效果

with table1 as (
    select *, 
    sum(log(1-p)) over(partition by id order by index rows between unbounded preceding and 1 preceding) as log_sum
    from source_table
)
select id, sum(p*coalesce(exp(log_sum), 1)) as p_prod_q_prior
from table1
group by id

您可以尝试使用带有窗口、按id分区和按索引排序的产品。我不确定产品是否有聚合函数,但如果没有,可以使用log+sum+exp来获得相同的效果

with table1 as (
    select *, 
    sum(log(1-p)) over(partition by id order by index rows between unbounded preceding and 1 preceding) as log_sum
    from source_table
)
select id, sum(p*coalesce(exp(log_sum), 1)) as p_prod_q_prior
from table1
group by id

hi ahoosh,什么是p_1?
p_1
概率与
index=1
hi ahoosh,什么是p_1?
p_1
概率与
index=1