Запрос Calcite для выбора заданного процента данных из таблицы

Я ищу способ выбрать заданный процент данных из таблицы с помощью запроса кальцита, например, скажем, у нас есть образец имени таблицы, который содержит около 800 записей, и я хочу выбрать только 30% от общего количества данных, представленных в пример, т.е. в результате мы получаем только 240 записей из 800 записей.

Добавление к нему, если мы также можем использовать какие-либо критерии с вышеуказанной ситуацией, будет дополнением.

Заранее спасибо.


person bforblack    schedule 28.04.2020    source источник


Ответы (2)


Вы можете использовать оконные функции:

select t.*
from (select t.*, count(*) over () as cnt,
             row_number() over (order by rand()) as seqnum
      from t
     ) t
where seqnum <= 0.4 * cnt;
person Gordon Linoff    schedule 28.04.2020
comment
привет @Gordon Linoff выдает ошибку Оператор: COUNT еще не поддерживается, поддерживает ли кальцит окно? - person bforblack; 28.04.2020
comment
@bforblack . . . Согласно документации, которую я видел (calcite.apache.org/docs/reference.html ), ответ - да. - person Gordon Linoff; 29.04.2020
comment
Я просмотрел документ, он не поддерживает подсчет внутри окна. - person bforblack; 29.04.2020

Анализатор SQL Calcite поддерживает стандартное ключевое слово SQL TABLESAMPLE, например

SELECT *
FROM t TABLESAMPLE BERNOULLI(30) REPEATABLE(42)

Но это не задокументировано в справочнике по Calcite SQL, и я не пробовал. совсем недавно. Попробуйте, и если это не сработает, зарегистрируйте кейс Calcite JIRA.

person Julian Hyde    schedule 30.04.2020