---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ytsaurus.tech/docs/en/yql/syntax/select/sample.md
  - https://ytsaurus.tech/docs/ru/yql/syntax/select/sample.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ytsaurus.tech/docs/ru/llms.txt

# TABLESAMPLE и SAMPLE

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

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

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

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

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

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

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

{% note info "Примечание" %}

В режиме `BERNOULLI` при наличии ключевого слова `REPEATABLE` в seed подмешивается chunk id для каждого чанка таблицы. Поэтому выборка для разных таблиц с одинаковым содержимым может давать разные результаты.

{% endnote %}

## Примеры

```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; -- треть таблицы
```
