> For the complete documentation index, see [llms.txt](https://v2.dataos.info/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://v2.dataos.info/build/v1/productize/assets/seeds.md).

# Seeds

A `SEED` model loads a static CSV file into a table. It is a model type that sources data from a static CSV file instead of a data source you'd query with SQL or Python. The CSV files live inside your Vulcan project. Seeds fit static datasets that rarely or never change, for example:

* National holidays and their dates
* A static list of IDs to exclude

Vulcan only reloads a seed when the model definition or the CSV changes, not on every run.

{% hint style="warning" %}
Python models don't support the `SEED` model kind; use a SQL model instead.
{% endhint %}

For the full seed reference, see [References → Vulcan → Models → Data Models → Seeds](https://v2.dataos.info/references/resources/vulcan/models/data-models/model-kinds#seed).

> In `orders-analytics`, `order_status_lookup` classifies each order status into a group, a fulfillment flag, and a description. Every model that validates or displays order status joins against it.

## The CSV

Place the file under `seeds/`, with a header row matching the columns you declare:

```csv
order_status,status_group,is_fulfilled,is_active_sort,description
Confirmed,Open,false,1,Order has been accepted but not yet shipped
Shipped,Fulfilled,true,2,Order has been shipped to the customer
Cancelled,Closed,false,3,Order was cancelled and excluded from revenue metrics
```

## The model

A `SEED` model points at the CSV, declares the schema, and carries assertions that run on every load. Two things catch people out:

* `path` is relative to the `.sql` file, not the project root. A model in `models/seeds/` reaching a CSV in `seeds/` needs to go up two levels: `../../`.
* A schema you specify in the `MODEL` definition takes precedence over the column names in the CSV header. So the column order in the `MODEL` definition must match the column order in the CSV file.

```sql
MODEL (
  name bronze.order_status_lookup,
  kind SEED (
    path '../../seeds/order_status_lookup.csv'
  ),
  columns (
    order_status TEXT,
    status_group TEXT,
    is_fulfilled BOOLEAN,
    is_active_sort INTEGER,
    description TEXT
  ),
  grains (order_status),
  owner 'johndoetmdcio',
  description 'Static lookup for order status classification.',
  assertions (
    unique_values(columns := (order_status)),
    not_null(columns := (order_status, status_group, is_fulfilled)),
    accepted_values(column := order_status, is_in := ('Confirmed', 'Shipped', 'Cancelled'))
  )
);
```

{% hint style="info" %}
**Reference a seed:** Once the seed materializes, join it by its fully-qualified name like any other model. Vulcan makes sure it materializes first. Example:

```sql
SELECT o.order_id, o.order_status, l.status_group, l.is_fulfilled
FROM bronze.orders AS o
LEFT JOIN bronze.order_status_lookup AS l
  ON o.order_status = l.order_status;
```

{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://v2.dataos.info/build/v1/productize/assets/seeds.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
