Skip to main content

event_time

πŸ’‘Did you know...
Available from dbt v1.9 or with the dbt Cloud "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'
) }}

Definition​

You can configure event_time for a model, seed, or source in your dbt_project.yml file, property YAML file, or config block.

event_time is required for the incremental microbatch strategy and highly recommended for Advanced CI's compare changes in CI/CD workflows, where it ensures the same time-slice of data is correctly compared between your CI and production environments.

Best practices​

Set the event_time to the name of the field that represents the actual timestamp of the event (like account_created_at). The timestamp of the event should represent "at what time did the row occur" rather than an event ingestion date.

However, if an ingestion date (like loaded_at, ingested_at, or last_updated_at) are the only timestamps you use, you can set event_time to these fields. Here are some considerations to keep in mind if you do this:

  • Using last_updated_at or loaded_at β€” May result in duplicate entries in the resulting table in the data warehouse over multiple runs. Setting an appropriate lookback value can reduce duplicates but it can't fully eliminate them since some updates outside the lookback window won't be processed.
  • Using ingested_at β€” Represents when data was ingested, (not when the event occurred). This is less semantically meaningful for the underlying data and may require more filtering during query time.

Here are some examples of recommended and not recommended event_time columns:

Status
Column nameDescription
βœ… Recommendedaccount_created_atRepresents the specific time when an account was created, making it a fixed event in time.
βœ… Recommendedsession_began_atCaptures the exact timestamp when a user session started, which won’t change and directly ties to the event.
❌ Not recommended_fivetran_syncedThis represents the time the event was ingested, not when it happened.
❌ Not recommendedlast_updated_atChanges over time and is not tied to the event itself. If used, note the considerations regarding duplicates.

Examples​

Here's an example in the dbt_project.yml file:

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

Example in a properties YAML file:

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

Example in sql model config block:

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

This setup sets session_start_time as the event_time for the user_sessions model.

0