Skip to main content

meta

dbt_project.yml
models:
<resource-path>:
+meta: {<dictionary>}

models/schema.yml

models:
- name: model_name
config:
meta: {<dictionary>}

columns:
- name: column_name
config:
meta: {<dictionary>} # changed to config in v1.10 and backported to 1.9

The meta config can be defined:

  • Under the models config in the project file (shown in previous 'models/schema.yml' example)
  • Under the models config in the project file (dbt_project.yml)
  • in a config() Jinja macro within a model's SQL file

See configs and properties for details.

Definition

The meta config sets metadata for a resource and accepts any key-value pairs. This metadata is compiled into the manifest.json file generated by dbt, and is visible in the auto-generated documentation.

Depending on the resource you're configuring, meta may be available within the config property, and/or as a top-level key. (For backwards compatibility, meta is often (but not always) supported as a top-level key, though without the capabilities of config inheritance.)

Effect on state comparison

Changes to meta, including at the column level, don't trigger state:modified. dbt treats meta (and tags) as metadata only, since it doesn't affect how a resource is materialized. Refer to caveats to state comparison for more detail.

Examples

To demonstrate how to use the meta config, here are some examples:

Designate a model owner

Additionally, indicate the maturity of a model using a model_maturity: key.

models/schema.yml

models:
- name: users
config:
meta:
owner: "@alice"
model_maturity: in dev

Designate a source column as containing PII

models/schema.yml

sources:
- name: salesforce
tables:
- name: account
config:
meta:
contains_pii: true
columns:
- name: email
config:
meta: # changed to config in v1.10 and backported to 1.9
contains_pii: true

Configure one meta attribute for all seeds

dbt_project.yml
seeds:
+meta:
favorite_color: red

Override one meta attribute for a single model

models/my_model.sql
{{ config(meta = {
'single_key': 'override'
}) }}

select 1 as id

Assign owner and favorite_color in the dbt_project.yml as a config property

dbt_project.yml
models:
jaffle_shop:
+meta:
owner: "@alice"
favorite_color: red

Assign meta to semantic model

(Applies to dbt v1.12 and later)

The following example shows how to assign a meta value to a semantic model in the model YAML file and dbt_project.yml file:

models:
- name: fact_transactions
description: "Transaction fact table at the transaction level. This table contains one row per transaction and includes the transaction timestamp."
semantic_model:
enabled: true
name: transaction
config:
meta:
data_owner: "Finance team"
used_in_reporting: true

agg_time_dimension: transaction_date

Assign meta to dimensions, measures, entities

(Applies to dbt v1.12 and later)

The following example shows how to assign a meta value to a dimension, entity, and simple metrics in a semantic model:

model_name.yml
models:
- name: model_name
semantic_model:
enabled: true
name: semantic_model

agg_time_dimension: order_date

columns:
- name: order_date
dimension:
type: time
config:
meta:
data_owner: "Finance team"
used_in_reporting: true

- name: customer_id
entity:
type: primary
config:
meta:
description: "Unique identifier for customers"
data_owner: "Sales team"
used_in_reporting: false

metrics:
- name: count_of_users
type: simple
agg: count_distinct
expr: user_id
config:
meta:
used_in_reporting: true

Add meta to generic and singular data tests

The following examples show how to add meta to generic data tests in a properties.yml file, and to singular data tests using config(). You can also set defaults in dbt_project.yml or tests/properties.yml.

models/properties.yml
models:
- name: orders
columns:
- name: order_id
data_tests:
- not_null:
config:
meta:
owner: "@data_team"

Access meta values in Python models

To access custom meta values in Python models, use the dbt.config.meta_get() method.

For example, if you have a model named my_python_model and you want to store custom values, you can do the following:

models/schema.yml
models:
- name: my_python_model
config:
meta:
batch_size: 1000
processing_mode: "incremental"
models/my_python_model.py
def model(dbt, session):
# Access custom values stored in meta directly
batch_size = dbt.config.meta_get("batch_size")
processing_mode = dbt.config.meta_get("processing_mode")

# Use the meta values in your model logic
df = dbt.ref("upstream_model")

if processing_mode == "incremental":
df = df.limit(batch_size)

return df

Was this page helpful?

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

0
Loading