From bb00d65589f5e86f6fd41fcd82c44a55e74b32ed Mon Sep 17 00:00:00 2001 From: lord-skinner Date: Tue, 14 Jan 2025 11:36:28 -0600 Subject: [PATCH 1/2] adding fct_unused_staging_models --- models/marts/dag/dag.yml | 4 ++++ .../marts/dag/fct_unused_staging_models.sql | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 models/marts/dag/fct_unused_staging_models.sql diff --git a/models/marts/dag/dag.yml b/models/marts/dag/dag.yml index 5ce89973..478ecb77 100644 --- a/models/marts/dag/dag.yml +++ b/models/marts/dag/dag.yml @@ -48,6 +48,10 @@ models: description: "This table shows each source with 0 children." data_tests: - is_empty + - name: fct_unused_staging_models + description: "This table shows each staging model with 0 children." + data_tests: + - is_empty - name: fct_exposure_parents_materializations description: "This table shows each direct parent of an exposure that is not materialized as a table or incremental." data_tests: diff --git a/models/marts/dag/fct_unused_staging_models.sql b/models/marts/dag/fct_unused_staging_models.sql new file mode 100644 index 00000000..f520ec76 --- /dev/null +++ b/models/marts/dag/fct_unused_staging_models.sql @@ -0,0 +1,23 @@ +-- this model finds cases where a source has no children + +with source_relationships as ( + select + * + from {{ ref('int_all_dag_relationships') }} + where parent_resource_type = 'model' + and parent_id like '%stg_%' + and not parent_is_excluded + and not child_is_excluded +), + +final as ( + select + parent + from source_relationships + group by 1 + having max(distance) = 0 +) + +select * from final + +{{ filter_exceptions() }} \ No newline at end of file From e338932de5499703786bf8c90f758410b3f9516e Mon Sep 17 00:00:00 2001 From: lord-skinner Date: Tue, 14 Jan 2025 12:04:47 -0600 Subject: [PATCH 2/2] updating docs --- docs/img/unused_staging_models.png | Bin 0 -> 23023 bytes docs/rules.md | 1 + docs/rules/modeling.md | 20 ++++++++++++++++++ integration_tests/seeds/dag/dag_seeds.yml | 6 ++++++ .../dag/test_fct_unused_staging_models.csv | 3 +++ 5 files changed, 30 insertions(+) create mode 100644 docs/img/unused_staging_models.png create mode 100644 integration_tests/seeds/dag/test_fct_unused_staging_models.csv diff --git a/docs/img/unused_staging_models.png b/docs/img/unused_staging_models.png new file mode 100644 index 0000000000000000000000000000000000000000..5ff612afc99b46726d7befdfedae95bfe90a0dbc GIT binary patch literal 23023 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 PGJdVC>@8oK`)2+Z%J~Dv literal 0 HcmV?d00001 diff --git a/docs/rules.md b/docs/rules.md index a6f814ed..96687369 100644 --- a/docs/rules.md +++ b/docs/rules.md @@ -19,6 +19,7 @@ hide: |Modeling |[Root Models](../rules/modeling/#root-models) |`fct_root_models`| |Modeling |[Staging Models Dependent on Downstream Models](../rules/modeling/#staging-models-dependent-on-downstream-models) |`fct_staging_dependent_on_marts_or_intermediate`| |Modeling |[Unused Sources](../rules/modeling/#unused-sources) |`fct_unused_sources`| +|Modeling |[Unused Staging Models](../rules/modeling/#unused-staging-models) |`fct_unused_staging_models`| |Modeling |[Models with Too Many Joins](../rules/modeling/#models-with-too-many-joins) |`fct_too_many_joins`| |Testing |[Missing Primary Key Tests](../rules/testing/#missing-primary-key-tests) |`fct_missing_primary_key_tests`| |Testing |[Missing Source Freshness](../rules/testing/#missing-source-freshness) |`fct_sources_without_freshness`| diff --git a/docs/rules/modeling.md b/docs/rules/modeling.md index b00f0610..5e76b97a 100644 --- a/docs/rules/modeling.md +++ b/docs/rules/modeling.md @@ -430,6 +430,26 @@ or any other nested information. ![A refactored DAG showing three sources which are each being referenced by an accompanying staging model](https://user-images.githubusercontent.com/30663534/159603703-6e94b00b-07d1-4f47-89df-8e5685d9fcf0.png){ width=500 } +--- +## Unused Staging Models + +`fct_unused_staging_models` ([source](https://github.com/dbt-labs/dbt-project-evaluator/tree/main/models/marts/dag/fct_unused_staging_models.sql)) shows each staging model with 0 children. + +**Example** + +`model.stg_auditboard__teams` isn't being referenced. + +![A DAG showing three staging_models which are each being referenced by an accompanying staging model, and one source that isn't being referenced at all](../img/unused_staging_models.png){ width=500 } + +**Reason to Flag** + +This represents a staging models that was created but never used in downstream models. This simply +represents the buildup of cruft in the project that doesn’t need to be there. + +**How to Remediate** + +Remove the unused staging model and their sources from the project. + --- ## Models with Too Many Joins diff --git a/integration_tests/seeds/dag/dag_seeds.yml b/integration_tests/seeds/dag/dag_seeds.yml index b963404a..6e6861d3 100644 --- a/integration_tests/seeds/dag/dag_seeds.yml +++ b/integration_tests/seeds/dag/dag_seeds.yml @@ -42,6 +42,12 @@ seeds: name: equality_fct_unused_sources compare_model: ref('fct_unused_sources') + - name: test_fct_unused_staging_models + data_tests: + - dbt_utils.equality: + name: equality_fct_unused_staging_models + compare_model: ref('fct_unused_staging_models') + - name: test_fct_source_fanout data_tests: - dbt_utils.equality: diff --git a/integration_tests/seeds/dag/test_fct_unused_staging_models.csv b/integration_tests/seeds/dag/test_fct_unused_staging_models.csv new file mode 100644 index 00000000..de3a8302 --- /dev/null +++ b/integration_tests/seeds/dag/test_fct_unused_staging_models.csv @@ -0,0 +1,3 @@ +parent +model.stage_model_4 +model.stage_model_5 \ No newline at end of file