Skip to content
Back to skills

Dbt Date Spines

ASecurity

- `dbt_project_map` reports "WARNING: Models use current_date" - `dbt run` produces far more rows than expected in a date-spine model

  • 485 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added June 7, 2026
researchsql

Works with

  • mcp

Security analysis

A100/100

Scanned June 7, 2026

npx -y skills add SignalPilot-Labs/SignalPilot --skill dbt-date-spines --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dbt Date Spines?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dbt Date Spines
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/signalpilot-labs-dbt-date-spines/badge)](https://www.skillsdirectory.com/skills/signalpilot-labs-dbt-date-spines)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: dbt-date-spines
type: skill
---

# dbt Date Spine Hazard — Fixing current_date in Model Files

## When This Applies
- `dbt_project_map` reports "WARNING: Models use current_date"
- `dbt run` produces far more rows than expected in a date-spine model

These are pre-shipped model SQL files in `models/` — you have direct write access.
For general date spine syntax, see `duckdb-sql` skill section 2.

## Fix Pattern

Edit the model SQL directly. Replace `current_date`/`current_timestamp`/`now()` with a data-driven endpoint — a subquery from the primary fact table:

```sql
-- Before:  ... CURRENT_DATE ...
-- After:   ... (SELECT MAX(order_date) FROM {{ ref('stg_orders') }}) ...
```

Use the fact table with the most rows, or the one referenced in the task instruction.

## Package Model Override

If the flagged file is in `dbt_packages/` (marked "PACKAGE MODEL" in the warning):
1. Read the full SQL from the package model file
2. Create `models/<same_filename>.sql` — dbt prioritizes local models over package models
3. Paste the entire package SQL into the new file and replace `current_date` with the data-driven endpoint
4. Add `{{ config(materialized='table') }}` at the top

Example: if `dbt_packages/shopify_source/models/stg_shopify__order.sql` uses `current_date`:
```sql
-- models/stg_shopify__order.sql  (local override — copy ENTIRE package SQL here)
{{ config(materialized='table') }}
-- Replace current_date with a data-driven endpoint:
-- (SELECT MAX(order_date) FROM {{ ref('stg_orders') }})
```

Do NOT edit files inside `dbt_packages/` directly — `dbt deps` will overwrite your changes.

## Finding the Right Date

Call `mcp__signalpilot__get_date_boundaries(connection_name="<id>")`.
Use the primary fact table's max date (marked "USE THIS"). Never use the global max — dimension tables often have later dates.

## Verification

```
dbt run --select <model_name>
```
```sql
SELECT MIN(date_col), MAX(date_col), COUNT(*) FROM <model_name>
```
The spine's max date must match the source data's endpoint, not today's date.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…