# How to Manage SQL Models using Rudder CLI


{{< announcement >}}
This feature is in **Public Beta**, where we work with early users and customers to test new features and get feedback before making them generally available. 

[Contact the Product team](mailto:product@rudderstack.com) if you have any questions.
{{< /announcement >}}

The **SQL Models** feature in Rudder CLI lets you manage your [Reverse ETL SQL model sources]({{< ref "data-pipelines/reverse-etl/features/models.md" >}}) through a Git-based workflow. It lets you store your SQL model configurations as YAML files in Git repositories, and use standard Git workflows to collaborate on any changes.

This approach brings version control, collaboration, and review processes to your SQL model configurations, addressing key limitations of managing these resources solely through the UI.

## Key features

**Bi-directional management**

- Create new SQL model resources directly from CLI
- Import existing SQL model sources from your workspace into Git

**Validation and preview**

- Validate SQL syntax and connectivity before deployment
- Preview query results to ensure correctness
- Check primary key constraints and column mappings

**Flexible configuration**

- Define SQL queries inline in YAML files or reference external `.sql` files
- Support for multiple warehouse types (listed below)

**Automation ready**

- GitHub Actions integration for CI/CD workflows
- Dry-run capabilities to preview changes before applying them
- Cross-domain resource management alongside [Data Catalog and Tracking Plan resources]({{< ref "dev-tools/rudder-cli/data-catalog-and-tracking-plans/" >}})

## Supported warehouses

The SQL Models feature supports the following data warehouses:

- PostgreSQL
- MySQL
- Snowflake
- Amazon Redshift
- Google BigQuery
- Databricks
- Trino

## Workflow overview

1. Configure your Git repository and Rudder CLI project.
2. Create new SQL models or import existing ones from your workspace.
3. Make changes to your SQL models using your preferred editor.
4. Validate your changes using the `validate` command and `apply` command in dry-run mode (via the `--dry-run` flag).
5. Use the `preview` command for SQL validation and connection validation.
6. Apply your changes using the `apply` command.
7. Create pull requests for team review and approval.
8. Automatically sync approved changes to your workspace via GitHub Actions.

## Get started

See the following guides for detailed documentation on managing SQL models using Rudder CLI:

- [Manage SQL Models using Rudder CLI]({{< ref "dev-tools/rudder-cli/sql-models/" >}})
- [Create New SQL Model Resource using Rudder CLI]({{< ref "dev-tools/rudder-cli/sql-models/create.md" >}})
- [Import Existing SQL Model Resource using Rudder CLI]({{< ref "dev-tools/rudder-cli/sql-models/import.md" >}})
- [Validate SQL Model Resource using Rudder CLI]({{< ref "dev-tools/rudder-cli/sql-models/validate.md" >}})
- [SQL Model Resources YAML Reference]({{< ref "dev-tools/rudder-cli/yaml-sql-models.md" >}})
