Как отфильтровать таблицу по процентили, а затем по случайной выборке в HQL? - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь случайным образом выбрать 200 строк из таблицы, но сначала я хочу отфильтровать ее, чтобы выбрать только верхние 1-процентные значения из переменной.

Я получаю следующую ошибку -

Ошибка при компиляции оператора: FAILED: ParseException строка 3:31 не может распознать ввод рядом с «select» «процентным_апроксом» («в спецификация выражения

Ниже мой запрос-

> with sample_pop as (select * from
> mytable a where
> a.transaction_amount > (select
> percentile_approx(transaction_amount, 0.99) as top1
>                             from mytable) )
> 
> select * from sample_pop  distribute by rand(1) sort by rand(1) limit
> 200;

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Решил мою проблему с помощью следующего запроса -

with sample_pop as (select a.* from 
          (
          select *, cum_dist() over (order by transaction_amount asc) pct
          from mytable
          ) a
where pct >= 0.99
)
select * 
from sample_pop distribute by rand(1) 
order by rand(1)
limit 200;
0 голосов
/ 08 мая 2018

Я не думаю, что Hive поддерживает скалярные подзапросы так, как вы их используете (только для IN / EXISTS). Так что переместите логику в предложение FROM:

with sample_pop as (
      select *
      from mytable a cross join
           (select percentile_approx(transaction_amount, 0.99) as top1
            from mytable
           ) aa
      where a.transaction_amount > aa.top1
     )
select * 
from sample_pop distribute by rand(1) 
order by rand(1)
limit 200;
...