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
Common Rule Config
  • name: Human-readable name of the rule.
  • severity: "error" (fail) or "warning" (warn only).
    • (optional, defaults to "error" if not specified)
  • description: Human-readable explanation of the rule.
  • includes: List of patterns to explicitly include for this rule.
      Paths are relative to the original_file_path from 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 with models/staging/     orders - paths containing orders anywhere     .sql$ - paths ending with .sql     ^models/*.sql$ - SQL files directly in models/ folder     ^models/**/*.sql$ - SQL files in any subfolder of models/
  • excludes: List of patterns to explicitly exclude from this rule.
      Uses the same pattern syntax as includes.
      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_to includes models.
      (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') }}