Перейти к основному содержимому

О флаге --sample

примечание

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

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

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

Режим выборки развивает идею проверки семантических результатов, предоставляемую флагом --empty, добавляя выборку данных из модели (или моделей) в вашей development-схеме. Он не покрывает абсолютно все сценарии — например, в некоторых случаях не все join’ы будут заполнены. Тем не менее, это жизнеспособное решение для более быстрой сборки, тестирования и валидации многих стратегий.

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

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

Флаг --sample доступен для команд run и build. При его использовании режим выборки генерирует отфильтрованные ref и source. Поскольку используется выборка на основе времени, если у вас есть ref, например {{ ref('some_model') }}, который должен семплироваться, необходимо задать event_time для some_model — поле, которое будет использоваться как временная метка.

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

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

Примеры

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

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

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

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

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

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

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


with

source as (

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

),

...

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

Нашли ошибку?

0
Loading