schemachange is a Python-based database change management tool specifically designed for Snowflake that enables teams to manage schema changes through version control and CI/CD pipelines. The tool was formerly known as snowchange and has been renamed to schemachange. It implements an imperative-style approach to database change management, drawing inspiration from the Flyway database migration tool, and allows database changes to be approved and deployed through modern software delivery practices.
The tool supports three primary types of change scripts. Versioned scripts follow a naming convention starting with 'V' followed by a version number, two underscores, a description, and a .sql or .sql.jinja extension, such as V1.1.1__first_change.sql. Repeatable scripts begin with 'R__' and are applied each time schemachange runs if the file has changed, making them suitable for maintaining stored procedures, functions, and view definitions. Always scripts start with 'A__' and execute with every run, useful for environment setup tasks. Additionally, the tool supports CLI migration scripts in YAML format with extensions like .cli.yml or .cli.yml.jinja, allowing execution of command-line tools such as the Snowflake CLI as part of the deployment process.
schemachange provides flexible configuration options through multiple methods including environment variables, CLI arguments, and a connections.toml file for local development. The tool supports various authentication mechanisms including password authentication, external OAuth, browser-based authentication, Okta integration, and private key authentication. Users can store change history in a configurable location, with the default being a METADATA database, and the tool automatically creates the necessary schema and tracking table on first run if specified.
The repository shows active maintenance and community engagement. GitGenius tracking data reveals 117 total issues and pull requests with a median response latency of 0.0 hours and a mean of 6959.6 hours, indicating variable response times across different items. The most common issue labels are enhancement with 39 items, question with 36 items, and bug with 33 items. The primary contributors tracked include sfc-gh-tmathew with 247 events, sfc-gh-twhite with 41 events, and zanebclark with 25 events. The repository maintains connections with other major data engineering projects including pandas-dev/pandas, apache/airflow, and dbt-labs/dbt-core through overlapping contributors.
The tool includes several advanced features such as Jinja templating engine support for dynamic script generation, secrets filtering to prevent sensitive information from being logged, and support for using variables within scripts. schemachange offers multiple commands including deploy for executing changes, render for previewing templated output, and verify for validation. The tool handles deployment scenarios including out-of-order execution and provides comprehensive documentation on required Snowflake privileges, troubleshooting, and integration with DevOps workflows. As a community-developed tool rather than an official Snowflake offering, schemachange comes with no formal support or warranty but serves as a critical enabler for database DevOps practices when combined with version control systems and CI/CD tools.