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

event_time

💡Did you know...
Available from dbt v1.9 or with the dbt "Latest" release track.
dbt_project.yml
models:
resource-path:
+event_time: my_time_field
models/properties.yml
models:
- name: model_name
config:
event_time: my_time_field
models/modelname.sql
{{ config(
event_time='my_time_field'
) }}

Определение

dbt использует event_time, чтобы понимать, когда произошло событие. Его можно настроить в YAML-файле проекта (dbt_project.yml), YAML-файле свойств (models/properties.yml) или в конфигурации SQL-файла для models, seeds или sources.

Required

Для инкрементальных microbatch-моделей, если в ваших upstream-моделях не настроен параметр event_time, dbt не сможет автоматически фильтровать их во время пакетной обработки и будет выполнять полное сканирование таблиц при каждом запуске batch.

Чтобы избежать этого, настройте event_time для каждой upstream-модели, которая должна фильтроваться. О том, как исключить модель из автоматической фильтрации, см. раздел opting out of auto-filtering.

Использование

event_time обязателен для стратегии incremental microbatch и настоятельно рекомендуется для сравнения изменений в Advanced CI в CI/CD‑процессах, где он гарантирует, что между CI‑окружением и продакшеном сравнивается один и тот же временной срез данных.

Лучшие практики

Указывайте event_time как имя поля, которое отражает фактический временной момент события (например, account_created_at). Временная метка должна отвечать на вопрос: «в какой момент произошла эта строка данных», а не быть датой загрузки или обработки. Назначение event_time колонке, которая не соответствует этому смыслу, нарушает семантику поля и может привести к путанице, когда другие инструменты будут использовать эти метаданные.

Тем не менее, если единственные временные метки, которые вы используете, — это даты загрузки (например, loaded_at, ingested_at или last_updated_at), вы можете задать event_time на основе этих полей. В этом случае стоит учитывать следующие моменты:

  • Использование last_updated_at или loaded_at — может приводить к дублирующимся записям в результирующей таблице хранилища данных при нескольких запусках. Установка подходящего значения lookback может уменьшить количество дубликатов, но не устранит их полностью, так как некоторые обновления за пределами окна lookback не будут обработаны.
  • Использование ingested_at — поскольку этот столбец создаётся инструментом загрузки/ELT, а не поступает из исходной системы, его значение изменится, если вам потребуется повторная синхронизация коннектора. В результате данные будут повторно обработаны и загружены в хранилище с другой датой. Пока этого не происходит (или если вы выполняете full refresh в таких случаях), микробатчи будут корректно обрабатываться при использовании ingested_at.

Ниже приведены примеры рекомендуемых и нерекомендуемых колонок для event_time:

Статус
Имя колонкиОписание
✅ Рекомендуетсяaccount_created_atПредставляет конкретный момент времени создания аккаунта, то есть фиксированное событие во времени.
✅ Рекомендуетсяsession_began_atФиксирует точную временную метку начала пользовательской сессии, которая не изменяется и напрямую связана с событием.
❌ Не рекомендуется_fivetran_syncedОтражает момент загрузки события, а не момент, когда оно произошло.
❌ Не рекомендуетсяlast_updated_atМеняется со временем и не привязано к самому событию. При использовании учитывайте соображения, описанные выше в разделе лучшие практики.
Loading table...

Примеры

Вот пример в файле dbt_project.yml:

dbt_project.yml
models:
my_project:
user_sessions:
+event_time: session_start_time

Пример в property-файле:

models/properties.yml
models:
- name: user_sessions
config:
event_time: session_start_time

Пример в блоке config для модели:

models/user_sessions.sql
{{ config(
event_time='session_start_time'
) }}

Эта настройка устанавливает session_start_time как event_time для модели user_sessions.

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

0
Loading