aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/docs/ru/syntax/select/sample.md
blob: 09fc5d89ad75e27fc4bfd2dab922a1baf1ad2b1c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# TABLESAMPLE и SAMPLE

Построение случайной выборки из указанного во `FROM` источника данных.

`TABLESAMPLE` является частью SQL стандарта и работает следующим образом:

* Указывается режим работы:

  * `BERNOULLI` означает «медленно, честно просмотрев все данные, но по-настоящему случайно»;
  * `SYSTEM` должен использовать знание о физическом хранении данных, чтобы избежать полного их чтения частично жертвуя случайностью выборки.

Данные разбиваются на достаточно большие блоки, и происходит сэмплирование данных блоков целиком. Для прикладных расчётов на достаточно больших таблицах результат вполне может оказаться состоятельным.

* Размер случайной выборки указывается в процентах следом за режимом в круглых скобках.
* Если при семплировании размер результата получается меньше одного блока, то выдается пустой результат.
* Опционально далее указывается ключевое слово `REPEATABLE` и целое число в скобках, которое будет использовано как seed для генератора псевдослучайных чисел.

`SAMPLE` является более коротким алиасом, где нет сложных настроек, а размер выборки указывается в долях. На данный момент он соответствует режиму `BERNOULLI`.

## Примеры

```yql
SELECT *
FROM my_table
TABLESAMPLE BERNOULLI(1.0) REPEATABLE(123); -- один процент таблицы
```

```yql
SELECT *
FROM my_table
TABLESAMPLE SYSTEM(1.0); -- примерно один процент таблицы
```

```yql
SELECT *
FROM my_table
SAMPLE 1.0 / 3; -- треть таблицы
```