---
title: "dbt models that declare no columns | Metacenta"
description: "A dbt model with no columns in its YAML has nothing to document, test or contract against. How to generate the stub, and when it can wait."
url: "https://metacenta.com/rules/model-no-column-schema"
updated: "2026-10-14"
tokens: 556
---

Documentation · rule model-no-column-schema

# dbt models that declare no columns

A Metacenta review checks this under the rule **Models declare their columns**. Everything below applies whether or not you ever commission one.

## What this rule checks

This rule flags dbt models whose schema YAML lists no columns at all. A model that declares even one column passes here, and the column rules take it from there.

## Why it matters

A declared column list is what every column description, column test and contract hangs off. Without one there is nothing to check a schema change against, so a renamed or dropped column goes unnoticed.

## How to fix it

**Declare column schemas for the models that have none.** Declare the model's columns in its schema YAML. The `dbt-codegen` package can generate the stub from the built model, so you only fill in descriptions and tests.

Before:

```yaml
models:
  - name: dim_customers
    description: One row per customer.
```

After:

```yaml
models:
  - name: dim_customers
    description: One row per customer.
    columns:
      - name: customer_id
      - name: first_order_at
      - name: lifetime_value
```

## When it is fine to leave

A short-lived or scratch model that nothing else reads. For everything else the stub costs a minute to generate.

## What we need to check it

`manifest.json`. If no model or source in the manifest carries a `columns` object at all, we cannot tell a missing schema from a manifest built without one. The rule then says it could not assess, rather than flagging every model.

[Ask about a review](https://metacenta.com/enquire?src=rule-model-no-column-schema&via=md)

## Related pages

- [dbt models with no description](https://metacenta.com/rules/model-undocumented)
- [dbt columns with no description](https://metacenta.com/rules/model-columns-undocumented)
- [dbt sources with no description](https://metacenta.com/rules/source-undocumented)
- [dbt source groups with no description](https://metacenta.com/rules/source-parent-undocumented)
- [A sample review, as a client reads it](https://metacenta.com/sample)
- [All published rules](https://metacenta.com/rules)
- [How a review is assessed](https://metacenta.com/standard)
