> 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/stage-2-productize/define-models-and-logic/data-models.md).

# Data models

Data models are the transformation layer of your data product. Each model file produces a physical table in your warehouse, and Vulcan manages execution order, versioning, and safe deployment automatically.

A Vulcan model has two parts:

1. **The `MODEL` block**: declares the model's name, kind, schedule, grain, documentation, and assertions.
2. **The `SELECT` query**: the transformation logic that produces the output.

The `kind` property inside the `MODEL` block determines how the table is materialized: rebuilt from scratch on every run (`FULL`), updated incrementally by time range, upserted by a unique key, or loaded from a CSV file (`SEED`). Choosing the right kind is the most important decision for each model.

***

## Pages in this section

| Page                                                                                            | What it covers                                                                                             |
| ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| [Properties](/build/stage-2-productize/define-models-and-logic/data-models/properties.md)       | All `MODEL` block properties: scheduling, grain, documentation, assertions, and storage options.           |
| [SQL models](/build/stage-2-productize/define-models-and-logic/data-models/sql-models.md)       | Writing SQL models with bronze, silver, and gold layer examples from `orders-analytics`.                   |
| [Python models](/build/stage-2-productize/define-models-and-logic/data-models/python-models.md) | Writing Python models using the `@model` decorator and `ExecutionContext`.                                 |
| [Model kinds](broken://pages/aPLn3fX52Pd3jsmKWWtU)                                              | Choosing the right materialization strategy: FULL, INCREMENTAL, VIEW, SEED, SCD Type 2.                    |
| [Statements](/build/stage-2-productize/define-models-and-logic/data-models/statements.md)       | Running SQL before or after a model executes using pre-statements, post-statements, and on-virtual-update. |
| [Macros](/build/stage-2-productize/define-models-and-logic/data-models/macros.md)               | Writing Python macros that generate SQL and make business logic reusable across models.                    |
| [Seeds](/build/stage-2-productize/define-models-and-logic/data-models/seeds.md)                 | Loading static CSV reference data as warehouse tables using `kind: SEED`.                                  |

***

## Next step

Start with [SQL models](/build/stage-2-productize/define-models-and-logic/data-models/sql-models.md) to write your first transformation, then choose a [model kind](broken://pages/aPLn3fX52Pd3jsmKWWtU) based on how your data refreshes.


---

# 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/stage-2-productize/define-models-and-logic/data-models.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.
