has_tags

Rule: has_tags


has_tags details
This rule ensures that dbt objects (model, seed, source, macro, etc.) contain tags specified in the configuration. It can be configured to "all", "any" or "one_of" (maximum one) tags from a specified list.

Configuration

  • type: Must be has_tags.
  • applies_to: (optional) List of dbt object types to include.
    • Default: ["models", "seeds", "snapshots", "analyses", "sources", "exposures"]
    • Options: models, seeds, snapshots, analyses, sources, exposures
  • tags: List of tags to check for.
  • criteria: Criteria for tag presence.
    • Options:
      • all: All specified tags must be present.
      • any: At least one of the specified tags must be present.
      • one_of: Exactly one of the specified tags must be present.
    • Default: all
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: "everything_has_tags"
    type: "has_tags"
    required_tags: ["tag1", "tag2", "tag3"]
    criteria: "all"  # options: "all", "any", "one_of"
    description: "Everything must have tags."
    # severity: "warning"  (optional)
    # applies_to: ['models', 'seeds']  (optional)
    # includes: ["path/to/include/*"]
    # excludes: ["path/to/exclude/*"]
[[manifest_tests]]
name = "everything_has_tags"
type = "has_tags"
required_tags = ["tag1", "tag2", "tag3"]
criteria = "all"  # options: "all", "any", "one_of"
description = "Everything must have tags."
# severity = "warning"  # (optional)
# applies_to = ["models", "seeds"]  # (optional)
# includes = ["path/to/include/*"]
# excludes = ["path/to/exclude/*"]
[[tool.dbtective.manifest_tests]]
name = "everything_has_tags"
type = "has_tags"
required_tags = ["tag1", "tag2", "tag3"]
criteria = "all"  # options: "all", "any", "one_of"
description = "Everything must have tags."
# severity = "warning"  # (optional)
# applies_to = ["models", "seeds"]  # (optional)
# includes = ["path/to/include/*"]
# excludes = ["path/to/exclude/*"]
Relevant dbt code
models:
  - name: model_with_tags
    # Either in config block
    config:
        tags:
          - tag1
          - tag2
    # Or directly as a property
    tags: ["tag1", "tag2"]
  - name: model_without_tags