Skip to main content

Model configurations

Available configurations

Model-specific configurations

Resource-specific configurations are applicable to only one dbt resource type rather than multiple resource types. You can define these settings in the project file (dbt_project.yml), a property file (models/properties.yml for models, similarly for other resources), or within the resource’s file using the {{ config() }} macro.

The following resource-specific configurations are only available to Models:
dbt_project.yml
models:
<resource-path>:
+materialized: <materialization_name>
+sql_header: <string>

General configurations

General configurations provide broader operational settings applicable across multiple resource types. Like resource-specific configurations, these can also be set in the project file, property files, or within resource-specific files.

dbt_project.yml
models:
<resource-path>:
+enabled: true | false
+tags: <string> | [<string>]
+pre-hook: <sql-statement> | [<sql-statement>]
+post-hook: <sql-statement> | [<sql-statement>]
+database: <string>
+schema: <string>
+alias: <string>
+persist_docs: <dict>
+full_refresh: <boolean>
+meta: {<dictionary>}
+grants: {<dictionary>}
+contract: {<dictionary>}

Warehouse-specific configurations

Configuring models

Models can be configured in one of three ways:

  1. Using a config() Jinja macro within a model
  2. Using a config resource property in a .yml file
  3. From the dbt_project.yml file, under the models: key.

Model configurations are applied hierarchically. The most-specific config always "wins": In the project file, configurations applied to a marketing subdirectory will take precedence over configurations applied to the entire jaffle_shop project. To apply a configuration to a model, or directory of models, define the resource path as nested dictionary keys.

Example

Configuring directories of models in dbt_project.yml

To configure models in your dbt_project.yml file, use the models: configuration option. Be sure to namespace your configurations to your project (shown below):

dbt_project.yml


name: dbt_labs

models:
# Be sure to namespace your model configs to your project name
dbt_labs:

# This configures models found in models/events/
events:
+enabled: true
+materialized: view

# This configures models found in models/events/base
# These models will be ephemeral, as the config above is overridden
base:
+materialized: ephemeral

...


Apply configurations to one model only

Some types of configurations are specific to a particular model. In these cases, placing configurations in the dbt_project.yml file can be unwieldy. Instead, you can specify these configurations at the top of a model .sql file, or in its individual YAML properties.

models/events/base/base_events.sql
{{
config(
materialized = "table",
sort = 'event_time',
dist = 'event_id'
)
}}


select * from ...
models/events/base/properties.yml
version: 2

models:
- name: base_events
config:
materialized: table
sort: event_time
dist: event_id
0