has_refs
Rule: has_refs
Manifest Rule
has_refs details
This rule ensures that dbt objects have at least one upstream reference. An upstream reference is created using
ref() or source() in your dbt model.This may indicate that you’re using hardcoded SQL to reference data directly from the warehouse instead of leveraging dbt’s dependency management. Or that an object is simply not being used.
Configuration
- type: Must be
has_refs. - applies_to: (optional) List of dbt object types to include.
- Default:
["models", "snapshots", "analyses", "exposures"] - Options:
models,seeds,snapshots,analyses,exposures,semantics_models
- Default:
Common Rule Config
- name: Human-readable name of the rule.
- severity:
"error"(fail) or"warning"(warn only).- (optional, defaults to
"error"if not specified)
- (optional, defaults to
- description: Human-readable explanation of the rule.
- includes: List of patterns to explicitly include for this rule.
Paths are relative to theoriginal_file_pathfrom the manifest.
Pattern syntax:*matches any characters except/(within a single directory)**matches any characters including/(across directories)^at the start anchors to the beginning of the path$at the end anchors to the end of the path- Without anchors, pattern matches if it appears anywhere in the path (contains)
Examples:^models/staging/- paths starting withmodels/staging/orders- paths containingordersanywhere.sql$- paths ending with.sql^models/*.sql$- SQL files directly inmodels/folder^models/**/*.sql$- SQL files in any subfolder ofmodels/
- excludes: List of patterns to explicitly exclude from this rule.
Uses the same pattern syntax asincludes.
Examples:^models/legacy/- exclude legacy models folder_deprecated- exclude paths containing_deprecated^tests/- exclude test files - model_materializations: Filter models by materialization type. Only applies when
applies_toincludesmodels.
(optional, if not specified all materializations are included)
Built-in types:table,view,incremental,ephemeral,materialized_view. Custom materializations are also supported.
Example:["table", "incremental"]
Example Config
manifest_tests:
- name: "references_must_exist"
type: "has_refs"
description: "All dbt objects must reference at least one source or model."
# severity: "warning" (optional)
# applies_to: ['models', 'seeds'] (optional)
# includes: ["models/staging/*"]
# excludes: ["models/base/*"][[manifest_tests]]
name = "references_must_exist"
type = "has_refs"
description = "All dbt objects must reference at least one source or model."
# severity = "warning" # (optional)
# applies_to = ["models", "seeds"] # (optional)
# includes = ["models/staging/*"]
# excludes = ["models/base/*"][[tool.dbtective.manifest_tests]]
name = "references_must_exist"
type = "has_refs"
description = "All dbt objects must reference at least one source or model."
# severity = "warning" # (optional)
# applies_to = ["models", "seeds"] # (optional)
# includes = ["models/staging/*"]
# excludes = ["models/base/*"]Relevant dbt code
-- Valid model with references
select
customer_id,
first_name,
last_name
from {{ source('raw', 'customers') }}-- Valid model referencing another model
select
customer_id,
order_count
from {{ ref('stg_customers') }}