event_time
- Модели
- Сиды
- Снапшоты
- Источники
models:
resource-path:
+event_time: my_time_field
models:
- name: model_name
config:
event_time: my_time_field
{{ config(
event_time='my_time_field'
) }}
seeds:
resource-path:
+event_time: my_time_field
seeds:
- name: seed_name
config:
event_time: my_time_field
snapshots:
resource-path:
+event_time: my_time_field
sources:
resource-path:
+event_time: my_time_field
sources:
- name: source_name
config:
event_time: my_time_field
Определение
dbt использует event_time, чтобы понимать, когда произошло событие. Его можно настроить в YAML-файле проекта (dbt_project.yml), YAML-файле свойств (models/properties.yml) или в конфигурации SQL-файла для models, seeds или sources.
Для инкрементальных 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:
| Loading table... |
Примеры
- Модели
- Сиды
- Снапшоты
- Источники
Вот пример в файле dbt_project.yml:
models:
my_project:
user_sessions:
+event_time: session_start_time
Пример в property-файле:
models:
- name: user_sessions
config:
event_time: session_start_time
Пример в блоке config для модели:
{{ config(
event_time='session_start_time'
) }}
Эта настройка устанавливает session_start_time как event_time для модели user_sessions.
Вот пример в файле dbt_project.yml:
seeds:
my_project:
my_seed:
+event_time: record_timestamp
Пример в файле свойств сида YAML:
seeds:
- name: my_seed
config:
event_time: record_timestamp
Эта настройка устанавливает record_timestamp как event_time для my_seed.
Вот пример в файле dbt_project.yml:
snapshots:
my_project:
my_snapshot:
+event_time: record_timestamp
Пример в файле свойств снапшота YAML:
snapshots:
- name: my_snapshot
config:
event_time: record_timestamp
Эта настройка устанавливает record_timestamp как event_time для my_snapshot.
Вот пример файла свойств источника:
sources:
- name: source_name
tables:
- name: table_name
config:
event_time: event_timestamp
Эта настройка устанавливает event_timestamp как event_time для указанной таблицы источника.