# SnowDDL
[](https://badge.fury.io/py/snowddl)
[](https://github.com/littleK0i/SnowDDL/actions/workflows/getting_started.yml)
[](https://github.com/littleK0i/SnowDDL/actions/workflows/pytest.yml)
SnowDDL is a [declarative-style](https://www.snowflake.com/blog/embracing-agile-software-delivery-and-devops-with-snowflake/) tool for object management automation in [Snowflake](http://snowflake.com).
It is not intended to replace other tools entirely, but to provide an alternative approach focused on practical data engineering challenges.
You may find SnowDDL useful if:
- complexity of object schema grows exponentially, and it becomes hard to manage;
- your organization maintains multiple Snowflake accounts (dev, stage, prod);
- your organization has multiple developers sharing the same Snowflake account and suffering from conflicts;
- it is necessary to generate some part of configuration dynamically using Python;
## Main features
1. SnowDDL is "stateless".
2. SnowDDL can revert any changes.
3. SnowDDL supports ALTER COLUMN.
4. SnowDDL provides built-in "Role hierarchy" model.
5. SnowDDL re-creates invalid views automatically.
6. SnowDDL simplifies code review.
7. SnowDDL supports creation of isolated "environments" for individual developers and CI/CD scripts.
8. SnowDDL strikes a good balance between dependency management overhead and parallelism.
9. SnowDDL configuration can be generated dynamically in Python code.
10. SnowDDL can manage packages for Java and Python UDF scripts natively.
## Quick links
- [Getting started](https://docs.snowddl.com/getting-started)
- [Main features](https://docs.snowddl.com/features)
- [Object types](https://docs.snowddl.com/object-types)
- [Role hierarchy](https://docs.snowddl.com/guides/role-hierarchy)
- [CLI interface](https://docs.snowddl.com/basic/cli)
- [YAML configs](https://docs.snowddl.com/basic/yaml-configs)
- [Changelog](/CHANGELOG.md)
## Introduction videos
- [:video_camera: Main features](https://www.youtube.com/watch?v=e5K4jmlxvWc "SnowDDL: Main Features")
- [:video_camera: Getting started](https://www.youtube.com/watch?v=OtMebyQizRA "SnowDDL: Getting Started")
## Mini-roadmap
- ~~placeholders in YAML configs~~ (done)
- ~~documentation for dynamic config generation in Python ("advanced mode")~~ (done)
- ~~video tutorials~~ (done, but more tutorials are coming in future)
- full test coverage for all object types and transformations
## Issues? Questions? Feedback?
Please use GitHub "Issues" to report bugs and technical problems.
Please use GitHub "Discussions" to ask questions and provide feedback.
## Created by
[Vitaly Markov](https://www.linkedin.com/in/markov-vitaly/), 2025
Enjoy!
Raw data
{
"_id": null,
"home_page": null,
"name": "snowddl",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "snowflake, database, schema, object, change, ddl, sql, create, alter, drop, grant, table, view",
"author": null,
"author_email": "Vitaly Markov <wild.desu@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/74/46/e100bb7c2ca617d200c29ff6d045bd2ba4030101d8311face9c8aed8dd71/snowddl-0.58.1.tar.gz",
"platform": null,
"description": "# SnowDDL\n\n[](https://badge.fury.io/py/snowddl)\n[](https://github.com/littleK0i/SnowDDL/actions/workflows/getting_started.yml)\n[](https://github.com/littleK0i/SnowDDL/actions/workflows/pytest.yml)\n\nSnowDDL is a [declarative-style](https://www.snowflake.com/blog/embracing-agile-software-delivery-and-devops-with-snowflake/) tool for object management automation in [Snowflake](http://snowflake.com).\n\nIt is not intended to replace other tools entirely, but to provide an alternative approach focused on practical data engineering challenges.\n\nYou may find SnowDDL useful if:\n\n- complexity of object schema grows exponentially, and it becomes hard to manage;\n- your organization maintains multiple Snowflake accounts (dev, stage, prod);\n- your organization has multiple developers sharing the same Snowflake account and suffering from conflicts;\n- it is necessary to generate some part of configuration dynamically using Python;\n\n## Main features\n\n1. SnowDDL is \"stateless\".\n2. SnowDDL can revert any changes.\n3. SnowDDL supports ALTER COLUMN.\n4. SnowDDL provides built-in \"Role hierarchy\" model.\n5. SnowDDL re-creates invalid views automatically.\n6. SnowDDL simplifies code review.\n7. SnowDDL supports creation of isolated \"environments\" for individual developers and CI/CD scripts.\n8. SnowDDL strikes a good balance between dependency management overhead and parallelism.\n9. SnowDDL configuration can be generated dynamically in Python code.\n10. SnowDDL can manage packages for Java and Python UDF scripts natively.\n\n## Quick links\n\n- [Getting started](https://docs.snowddl.com/getting-started)\n- [Main features](https://docs.snowddl.com/features)\n- [Object types](https://docs.snowddl.com/object-types)\n- [Role hierarchy](https://docs.snowddl.com/guides/role-hierarchy)\n- [CLI interface](https://docs.snowddl.com/basic/cli)\n- [YAML configs](https://docs.snowddl.com/basic/yaml-configs)\n- [Changelog](/CHANGELOG.md)\n\n## Introduction videos\n\n- [:video_camera: Main features](https://www.youtube.com/watch?v=e5K4jmlxvWc \"SnowDDL: Main Features\")\n- [:video_camera: Getting started](https://www.youtube.com/watch?v=OtMebyQizRA \"SnowDDL: Getting Started\")\n\n## Mini-roadmap\n\n- ~~placeholders in YAML configs~~ (done)\n- ~~documentation for dynamic config generation in Python (\"advanced mode\")~~ (done)\n- ~~video tutorials~~ (done, but more tutorials are coming in future)\n- full test coverage for all object types and transformations\n\n## Issues? Questions? Feedback?\n\nPlease use GitHub \"Issues\" to report bugs and technical problems.\n\nPlease use GitHub \"Discussions\" to ask questions and provide feedback.\n\n## Created by\n[Vitaly Markov](https://www.linkedin.com/in/markov-vitaly/), 2025\n\nEnjoy!\n",
"bugtrack_url": null,
"license": null,
"summary": "Object management automation tool for Snowflake",
"version": "0.58.1",
"project_urls": {
"Homepage": "https://github.com/littleK0i/snowddl"
},
"split_keywords": [
"snowflake",
" database",
" schema",
" object",
" change",
" ddl",
" sql",
" create",
" alter",
" drop",
" grant",
" table",
" view"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "95d41a0a251d83612e3fd5744401ef473cf6cc3db10165ba23a06643b8518426",
"md5": "fc210f68d0a22d2207a2a666ecb43ec2",
"sha256": "5db220700179b239ccb3543f89a6a18659e7d510362075ddb7b7aa475abae541"
},
"downloads": -1,
"filename": "snowddl-0.58.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "fc210f68d0a22d2207a2a666ecb43ec2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 275537,
"upload_time": "2025-10-06T12:26:12",
"upload_time_iso_8601": "2025-10-06T12:26:12.529409Z",
"url": "https://files.pythonhosted.org/packages/95/d4/1a0a251d83612e3fd5744401ef473cf6cc3db10165ba23a06643b8518426/snowddl-0.58.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7446e100bb7c2ca617d200c29ff6d045bd2ba4030101d8311face9c8aed8dd71",
"md5": "be234f4d1156656fda85d7fc58ac8c7f",
"sha256": "efc16d82d3b9026e3d5eeff68875e892d2ddc46b67f470aa78ad690767a32514"
},
"downloads": -1,
"filename": "snowddl-0.58.1.tar.gz",
"has_sig": false,
"md5_digest": "be234f4d1156656fda85d7fc58ac8c7f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 150345,
"upload_time": "2025-10-06T12:26:15",
"upload_time_iso_8601": "2025-10-06T12:26:15.856573Z",
"url": "https://files.pythonhosted.org/packages/74/46/e100bb7c2ca617d200c29ff6d045bd2ba4030101d8311face9c8aed8dd71/snowddl-0.58.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-06 12:26:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "littleK0i",
"github_project": "snowddl",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "snowddl"
}