Умножение чисел с использованием оконных функций для условной вероятности в улье SQL - PullRequest
1 голос
/ 09 января 2020

У меня есть таблица улья, которая выглядит следующим образом

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))

enter image description here

Например, для id=2 это будет p_1 + (1-p_1)*p2 + (1-p_1)*(1-p_2)*p3, поскольку оно имеет только три вероятности. Есть ли способ сделать это в Hive с помощью оконных функций?

1 Ответ

4 голосов
/ 09 января 2020

Вы можете попробовать использовать продукт с окнами, разделением по идентификатору и упорядочением по индексу. Я не уверен, есть ли агрегатная функция для продукта, но если нет, то можно использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...