Skip to main content

tags

dbt_project.yml
models/properties.yml
models:
- name: model_name
config:
tags: <string> | [<string>]
columns:
- name: column_name
config:
tags: <string> | [<string>] # changed to config in v1.10 and backported to 1.9
data_tests:
- test_name:
config:
tags: <string> | [<string>]
models/<modelname>.sql
{{ config(
tags="<string>" | ["<string>"]
) }}

select ...

Definition

Apply a tag (or list of tags) to a resource.

These tags can be used as part of the resource selection syntax, when running the following commands:

  • dbt run --select tag:my_tag — Run all models tagged with a specific tag.
  • dbt build --select tag:my_tag — Build all resources tagged with a specific tag.
  • dbt seed --select tag:my_tag — Seed all resources tagged with a specific tag.
  • dbt snapshot --select tag:my_tag — Snapshot all resources tagged with a specific tag.
  • dbt test --select tag:my_tag — Indirectly runs all tests associated with the models that are tagged.

Using tags with the + operator

You can use the + operator to include upstream or downstream dependencies in your tag selection:

  • dbt run --select tag:my_tag+ — Run models tagged with my_tag and all their downstream dependencies.
  • dbt run --select +tag:my_tag — Run models tagged with my_tag and all their upstream dependencies.
  • dbt run --select +tag:my_tag+ — Run models tagged with my_tag, their upstream dependencies, and their downstream dependencies.
  • dbt run --select tag:my_tag+ --exclude tag:exclude_tag — Run models tagged with my_tag and their downstream dependencies, and exclude models tagged with exclude_tag, regardless of their dependencies.
Usage notes about tags

When using tags, consider the following:

  • Each individual tag must be a string.
  • Tags are additive across project hierarchy.
  • Some resource types (like sources, exposures) require tags at the top level.

Refer to usage notes for more information.

Examples

The following examples show how to apply tags to resources in your project. You can configure tags in the dbt_project.yml, property files, or SQL files.

Use tags to run parts of your project

Apply tags in your dbt_project.yml as a single value or a string. In the following example, one of the models, the jaffle_shop model, is tagged with contains_pii.

dbt_project.yml
models:
jaffle_shop:
+tags: "contains_pii"

staging:
+tags:
- "hourly"

marts:
+tags:
- "hourly"
- "published"

metrics:
+tags:
- "daily"
- "published"

Apply tags to models

This section demonstrates applying tags to models in the dbt_project.yml, schema.yml, and SQL files.

To apply tags to a model in your dbt_project.yml file, you would add the following:

dbt_project.yml
models:
jaffle_shop:
+tags: finance # jaffle_shop model is tagged with 'finance'.

To apply tags to a model in your models/ directory YAML property file, you would add the following using the config property:

models/stg_customers.yml
models:
- name: stg_customers
description: Customer data with basic cleaning and transformation applied, one row per customer.
config:
tags: ['santi'] # stg_customers.yml model is tagged with 'santi'.
columns:
- name: customer_id
description: The unique key for each customer.
data_tests:
- not_null
- unique

To apply tags to a model in your SQL file, you would add the following:

models/staging/stg_payments.sql
{{ config(
tags=["finance"] # stg_payments.sql model is tagged with 'finance'.
) }}

select ...

Run resources with specific tags (or exclude resources with specific tags) using the following commands:

# Run all models tagged "daily"
dbt run --select tag:daily

# Run all models tagged "daily", except those that are tagged hourly
dbt run --select tag:daily --exclude tag:hourly

Apply tags to seeds

dbt_project.yml
seeds:
jaffle_shop:
utm_mappings:
+tags: marketing
dbt_project.yml
seeds:
jaffle_shop:
utm_mappings:
+tags:
- marketing
- hourly

Apply tags to saved queries

This following example shows how to apply a tag to a saved query in the dbt_project.yml file. The saved query is then tagged with order_metrics.

dbt_project.yml
saved-queries:
jaffle_shop:
customer_order_metrics:
+tags: order_metrics

Then run resources with a specific tag using the following commands:

# Run all resources tagged "order_metrics"
dbt run --select tag:order_metrics

The second example shows how to apply multiple tags to a saved query in the semantic_model.yml file. The saved query is then tagged with order_metrics and hourly.

semantic_model.yml
saved_queries:
- name: test_saved_query
description: "{{ doc('saved_query_description') }}"
label: Test saved query
config:
tags:
- order_metrics
- hourly

Run resources with multiple tags using the following commands:

# Run all resources tagged "order_metrics" and "hourly"
dbt build --select tag:order_metrics tag:hourly

Usage notes

Tags must be strings

Each individual tag must be a string value (for example, marketing or daily).

In the following example, my_tag: "my_value" is invalid because it is a key-value pair.

sources:
- name: ecom
schema: raw
description: E-commerce data for the Jaffle Shop
config:
tags:
my_tag: "my_value". # invalid
tables:
- name: raw_customers
config:
tags:
my_tag: "my_value". # invalid

A warning is raised when the tags value is not a string. For example:

Field config.tags: {'my_tag': 'my_value'} is not valid for source (ecom)

Tags are additive

Tags accumulate hierarchically. The earlier example would result in:

ModelTags
models/staging/stg_customers.sqlcontains_pii, hourly
models/staging/stg_payments.sqlcontains_pii, hourly, finance
models/marts/dim_customers.sqlcontains_pii, hourly, published
models/metrics/daily_metrics.sqlcontains_pii, daily, published
Loading table...

Applying tags to specific columns and tests

You can also apply tags to specific columns in a resource, and to tests.

models/properties.yml
models:
- name: my_model
columns:
- name: column_name
config:
tags: ['column_level'] # changed to config in v1.10 and backported to 1.9
data_tests:
- unique:
config:
tags: ['test_level'] # changed to config in v1.10

In the example above, the unique test would be selected by either of these tags:

dbt test --select tag:column_level
dbt test --select tag:test_level

Backwards compatibility for sources and exposures

For backwards compatibility, tags is supported as a top-level key for sources and exposures (prior to dbt v1.10), but without the capabilities of config inheritance.

models/properties.yml
exposures:
- name: my_exposure
tags: ['exposure_tag'] # top-level key (legacy)
# OR use config (v1.10+)
config:
tags: ['exposure_tag']

sources:
- name: source_name
tags: ['top_level'] # top-level key (legacy)
# OR use config (v1.10+)
config:
tags: ['top_level']
tables:
- name: table_name
tags: ['table_level'] # top-level key (legacy)
# OR use config (v1.10+)
config:
tags: ['table_level']
columns:
- name: column_name
config:
tags: ['column_level'] # changed to config in v1.10 and backported to 1.9

Was this page helpful?

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

0
Loading