dbt™️ Source checks

check-source-columns-have-desc

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-columns-have-desc

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • If any column in the source does not contain a description, the hook fails.


check-source-has-all-columns

Arguments

--manifest: location of manifest.json file. Usually target/manifest.json. This file contains a full representation of dbt project. Default: target/manifest.json --catalog: location of catalog.json file. Usually target/catalog.json. dbt uses this file to render information like column types and table statistics into the docs site. In dbt-checkpoint is used for column operations. Default: target/catalog.json

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-has-all-columns

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

❌ No

✅ Yes

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • The catalog is scanned for a model.

  • If there is any discrepancy between found yml sources and catalog sources, the hook fails.

Known limitations

If you did not update the catalog and manifest results can be wrong.


check-source-table-has-description

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-table-has-description

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

❌ Not needed

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • If the source table does not have a description, the hook fails.


check-source-has-freshness

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-has-freshness
        args: ["--freshness", "error_after", "warn_after", "--"]

⚠️ do not forget to include -- as the last argument. Otherwise pre-commit would not be able to separate a list of files with args.

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

❌ Not needed

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • If the source does not have freshness correctly set, the hook fails.


check-source-has-loader

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-has-loader

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

❌ Not needed

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • If the source does not have a loader set, the hook fails.


check-source-has-meta-keys

Arguments

--meta-keys: list of the required keys in the meta part of the model.

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-has-meta-keys
        args: ['--meta-keys', 'foo', 'bar', "--"]

⚠️ do not forget to include -- as the last argument. Otherwise pre-commit would not be able to separate a list of files with args.

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

❌ Not needed since it also validates properties files

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • If the source does not have the required meta keys set, the hook fails.


check-source-has-labels-keys

Arguments

--labels-keys: list of the required keys in the labels part of the model.

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-has-labels-keys
        args: ['--labels-keys', 'foo', 'bar', "--"]

⚠️ do not forget to include -- as the last argument. Otherwise pre-commit would not be able to separate a list of files with args.

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

❌ Not needed since it also validates properties files

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • If the source does not have the required labels keys set, the hook fails.


check-source-has-tests-by-name

Arguments

--tests: key-value pairs of test names. Key is the name of test and value is required minimal number of tests eg. --test unique=1 not_null=2 (do not put spaces before or after the = sign).

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-has-tests-by-name
        args: ["--tests", "unique=1", "data=1", "--"]

⚠️ do not forget to include -- as the last argument. Otherwise pre-commit would not be able to separate a list of files with args.

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

❌ Yes

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • If the source does not have the required test names, the hook fails.


check-source-has-tests-by-type

Arguments

--tests: key-value pairs of test types. Key is a type of test (data or schema) and value is required eg. --test data=1 schema=2 (do not put spaces before or after the = sign).

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-has-tests-by-type
        args: ["--tests", "schema=1", "data=1", "--"]

⚠️ do not forget to include -- as the last argument. Otherwise pre-commit would not be able to separate a list of files with args.

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

❌ Yes

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • If the source does not have the required test types, the hook fails.


check-source-has-tests

Arguments

--test-cnt: Minimum number of tests required.

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-has-tests
        args: ["--test-cnt", "2", "--"]

⚠️ do not forget to include -- as the last argument. Otherwise pre-commit would not be able to separate a list of files with args.

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

❌ Yes

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • If the source does not have the required test count, the hook fails.


check-source-has-tests-by-group

Arguments

--tests: list of test names. --test_cnt: number of tests required across test group.

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-has-tests-by-group
        args: ["--tests", "unique", "unique_where", "--test-cnt", "1", "--"]

⚠️ do not forget to include -- as the last argument. Otherwise pre-commit would not be able to separate a list of files with args.

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

✅ Yes

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed SQL files.

  • The source name is obtained from the SQL file name.

  • If any source does not have the number of required tests, the hook fails.


check-source-tags

Arguments

--tags: A list of tags that sources can have.

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-tags
        args: ["--tags", "foo", "bar", "--"]

⚠️ do not forget to include -- as the last argument. Otherwise pre-commit would not be able to separate a list of files with args.

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

❌ Not needed

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • If the source has different tags than specified, the hook fails.


check-source-childs

Arguments

--manifest: location of manifest.json file. Usually target/manifest.json. This file contains a full representation of dbt project. Default: target/manifest.json --min-child-cnt: Minimal number of child models. --max-child-cnt: Maximal number of child models.

Example

repos:
  - repo: https://github.com/dbt-checkpoint/dbt-checkpoint
    rev: v1.0.0
    hooks:
      - id: check-source-childs
        args: ["--min-child-cnt", "2", "--"]

⚠️ do not forget to include -- as the last argument. Otherwise pre-commit would not be able to separate a list of files with args.

Requirements

Model exists in manifest.json 1

Model exists in catalog.json 2

✅ Yes

❌ Not needed

1 It means that you need to run dbt parse before run this hook (dbt >= 1.5). 2 It means that you need to run dbt docs generate before run this hook.

How it works

  • Hook takes all changed yml.

  • All sources from yml file are parsed.

  • The manifest is scanned for child models.

  • If any source does not have a number of required childs, the hook fails.

Last updated

Was this helpful?