model-builder

Create well-structured dbt models following best practices for staging, intermediate, and mart layers.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "model-builder" with this command: npx skills add armanzeroeight/fastagent-plugins/armanzeroeight-fastagent-plugins-model-builder

dbt Model Builder

Quick Start

Create well-structured dbt models following best practices for staging, intermediate, and mart layers.

Instructions

Step 1: Create staging models

Staging models clean and standardize raw data:

-- models/staging/stg_orders.sql with source as ( select * from {{ source('raw', 'orders') }} ),

renamed as ( select order_id, customer_id, order_date, order_total, order_status, created_at, updated_at from source )

select * from renamed

Add schema file:

models/staging/schema.yml

version: 2

models:

  • name: stg_orders description: Cleaned and standardized orders from raw data columns:
    • name: order_id description: Unique order identifier tests:
      • unique
      • not_null
    • name: customer_id description: Customer who placed the order tests:
      • not_null

Step 2: Create mart models

Mart models contain business logic:

-- models/marts/fct_orders.sql with orders as ( select * from {{ ref('stg_orders') }} ),

customers as ( select * from {{ ref('stg_customers') }} ),

final as ( select orders.order_id, orders.customer_id, customers.customer_name, orders.order_date, orders.order_total, orders.order_status from orders left join customers on orders.customer_id = customers.customer_id )

select * from final

Step 3: Create incremental models

For large datasets, use incremental models:

-- models/marts/fct_events.sql {{ config( materialized='incremental', unique_key='event_id', on_schema_change='fail' ) }}

with events as ( select * from {{ source('raw', 'events') }}

{% if is_incremental() %}
where event_timestamp > (select max(event_timestamp) from {{ this }})
{% endif %}

)

select * from events

Step 4: Add documentation

models/marts/schema.yml

version: 2

models:

  • name: fct_orders description: Order facts with customer information columns:
    • name: order_id description: Unique order identifier tests:
      • unique
      • not_null
    • name: order_total description: Total order amount tests:
      • not_null
      • dbt_utils.accepted_range: min_value: 0

Model Layering

Staging (stg_):

  • Clean and standardize raw data

  • One-to-one with source tables

  • Minimal transformations

  • Column renaming and type casting

Intermediate (int_):

  • Complex transformations

  • Join multiple staging models

  • Not exposed to end users

Marts (fct_, dim_):

  • Business logic

  • Fact and dimension tables

  • Exposed to end users

Best Practices

  • Follow naming conventions (stg_, int_, fct_, dim_)

  • Use CTEs for readability

  • Document all models and columns

  • Add tests to all models

  • Use refs for dependencies

  • Implement incremental models for large datasets

  • Configure materialization appropriately

  • Use sources for raw data

Advanced

For detailed information, see:

  • Staging Patterns - Staging model best practices

  • Marts Patterns - Fact and dimension table patterns

  • Incremental - Incremental model strategies

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

gcp-cost-optimizer

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

schema-designer

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

terraform-state-manager

No summary provided by upstream source.

Repository SourceNeeds Review