# О флаге `--sample`

примечание

Флаг `--sample` в настоящее время недоступен для Python-моделей. Если этот флаг используется с Python-моделью, он будет проигнорирован.

Seeds создаются как обычно, но при обращении к ним из downstream-узлов они будут семплироваться.

Большие наборы данных могут значительно увеличивать время сборки и снижать скорость, с которой разработчики dbt могут разрабатывать и тестировать новый код. Флаг dbt `--sample` помогает сократить время сборки и затраты на хранилище данных за счёт запуска dbt в режиме выборки (sample mode). Режим выборки позволяет обрабатывать сценарии, в которых нет необходимости строить модель целиком в процессе разработки или CI, но при этом важно включить достаточный объём данных для валидации результатов.

Режим выборки развивает идею проверки семантических результатов, предоставляемую флагом [`--empty`](https://docs.getdbt.tech/docs/build/empty-flag.md), добавляя выборку данных из модели (или моделей) в вашей development-схеме. Он не покрывает абсолютно все сценарии — например, в некоторых случаях не все join’ы будут заполнены. Тем не менее, это жизнеспособное решение для более быстрой сборки, тестирования и валидации многих стратегий.

Со временем флаг `--sample` станет более функциональным, но на данный момент он поддерживает только выборку на основе времени.

## Использование флага `--sample`

Флаг `--sample` доступен для команд [`run`](https://docs.getdbt.tech/reference/commands/run.md) и [`build`](https://docs.getdbt.tech/reference/commands/build.md). При его использовании режим выборки генерирует отфильтрованные `ref` и `source`. Поскольку используется выборка на основе времени, если у вас есть `ref`, например `{{ ref('some_model') }}`, который должен семплироваться, необходимо задать [`event_time`](https://docs.getdbt.tech/reference/resource-configs/event-time.md) для `some_model` — поле, которое будет использоваться как временная метка.

Для режима выборки поддерживаются два типа спецификаций на основе времени:

* **Относительные спецификации времени (relative time specs):** фильтруют данные выборки от момента запуска команды назад на заданное целое значение и гранулярность. Поддерживаемые гранулярности:

  * часы
  * дни
  * месяцы
  * годы

* **Статические спецификации времени (static time specs):** фильтруют данные между заданными начальным и конечным периодами с использованием даты и/или timestamp.

### Примеры

Предположим, вы хотите запустить модель `stg_customers` и построить таблицу в вашей development-схеме, используя относительную выборку размером три дня. Команда в IDE будет выглядеть примерно так:

```text
dbt run --select path/to/stg_customers --sample="3 days"
```

Если у вас есть ещё более крупная модель, например `stg_orders`, вы можете задать режим выборки в часах:

```text
dbt run --select path/to/stg_customers --sample="6 hours"
```

Теперь предположим, что вы хотите провалидировать данные по всему бизнесу, используя выборку за более ранний период — вашу самую загруженную неделю в июле, с первого числа до момента закрытия восьмого. В этом случае можно выполнить следующую команду:

```text
dbt run --sample="{'start': '2024-07-01', 'end': '2024-07-08 18:00:00'}"
```

Чтобы предотвратить семплирование `ref`, добавьте к нему `.render()`:

```sql

with

source as (

    select * from {{ ref('stg_customers').render() }}

),

...
```

Затем dbt выполнит SQL-код модели в целевом хранилище данных и создаст таблицы с данными из выборок указанного размера.
