Skip to main content

Export Snowflake object definitions for use in a DCM project

Project description

dcmassist

Turn an existing Snowflake database into a DCM project in seconds.

You've decided to manage your Snowflake schema with Declarative Change Management. Now you need a DEFINE TABLE … block for every table, view, schema, stage, sequence, file format, and tag you already have. Hand-writing thousands of these is the wrong way to start.

Point dcmassist at your database and it produces a complete, ready-to-commit DCM project — manifest.yml, Makefile, definitions, optional macros, the lot.

uvx dcmassist export --database MYDB --out-folder ./my-dcm-project

That's it. Commit, deploy, done.

Why dcmassist

  • Zero-to-DCM in one command. No bespoke scripts, no copy-pasting from GET_DDL, no fixing up identifier quoting by hand.
  • Multi-environment from day one. Database names are templated to {{ database }} automatically, so the same project deploys to dev, staging, and prod.
  • Safe with secrets. Stage definitions are synthesized without credentials — credentials live on storage integrations, not in git. You won't accidentally commit AWS keys.
  • Built for real Snowflake accounts. Paginates SHOW past the 10K-row cap. Quotes identifiers properly so leading-digit and lowercase names survive. Skips objects your role can't see instead of failing the run.
  • Predictable output. Per-type files, deterministic ordering, automatic chunking when a type grows beyond a threshold. Diffs stay readable as your project evolves.
  • Optional Jinja macros. With --use-macros, every definition is a one-line macro invocation, so a column rename touches one file instead of hundreds.
  • Observable runs. Live status panel while it works; a per-run log file you can tail when something looks wrong.

What you get

my-dcm-project/
├── manifest.yml                # targets, configurations, templating defaults
├── Makefile                    # deploy, plan, sync, validate
├── dcmassist.log               # per-run log of options + per-object results
└── sources/
    ├── definitions/
    │   ├── schema.sql          # one file per type
    │   ├── table.sql           # auto-chunked into table2.sql, table3.sql … past the threshold
    │   ├── view.sql
    │   ├── sequence.sql
    │   ├── stage.sql           # synthesized — no credentials
    │   ├── file_format.sql
    │   └── tag.sql
    └── macros/                 # only with --use-macros
        └── <type>.sql

Run

Requires Python ≥ 3.10, uv, and a configured snow CLI connection.

dcmassist is a one-shot tool — you run it when you need a DCM project and rarely after that. The simplest way is uvx, which fetches and runs without a permanent install:

uvx dcmassist export --database MYDB

Pin a version for reproducibility:

uvx dcmassist@0.1.15 export --database MYDB

If you'd rather keep it installed:

uv tool install dcmassist
# or
pipx install dcmassist

Quick examples

The examples below use uvx; substitute dcmassist if you've installed it.

Just tables and views from one schema, with macros, into a custom folder:

uvx dcmassist export \
    --database MYDB \
    --schema PUBLIC \
    --include Table --include View \
    --use-macros \
    --out-folder ./project

Multi-environment manifest with templated configurations:

uvx dcmassist export \
    --database MYDB \
    --target dev --target prod \
    --configuration STAGING \
    --templating-default warehouse=COMPUTE_WH

Run uvx dcmassist export --help for every option.

Type support

Implemented: Schema, Table, View, Sequence, Stage, File format, Tag.

Recognized but not yet exported: Dynamic table, Task, Alert, SQL function, Data metric function, SQL procedure, Role, Database role, Grant, Authentication policy. Including these in --include is accepted (they pass validation) but they produce no output yet — contributions welcome.

Database is intentionally never exported: DCM rejects DEFINE DATABASE for the project's own parent database.

Configuration

Environment variable Effect
DCMASSIST_EXPORT_OBJECTS_PER_FILE Max objects per chunked SQL file (default: 100). Lower it if your DDL files grow uncomfortably large.
DCMASSIST_NO_STATUS=1 Disable the live status panel (also auto-disabled on non-TTY and NO_COLOR=1).
Exit code Meaning
0 Success
4 Ran to completion but exported nothing — every object failed (typically permission errors)
5 Setup error — bad env var, or non-empty output folder without --force

Project status

Pre-1.0. The output layout, CLI flags, and log format are stable enough to use; expect breaking changes between minor versions until 1.0. Issues and pull requests welcome at github.com/jamiekt/dcmassist.

License

MIT.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dcmassist-0.2.18.tar.gz (169.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dcmassist-0.2.18-py3-none-any.whl (35.1 kB view details)

Uploaded Python 3

File details

Details for the file dcmassist-0.2.18.tar.gz.

File metadata

  • Download URL: dcmassist-0.2.18.tar.gz
  • Upload date:
  • Size: 169.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dcmassist-0.2.18.tar.gz
Algorithm Hash digest
SHA256 dabae1e6df17b32f7f339f895bdfe8f069cbda85f07ed6281ec94d224e98696f
MD5 17406f2e79e0a6ce9a54cfe08b85eb46
BLAKE2b-256 d14aa58f627918a38e0be19e4838d4e1b4d0b3d2627dcb1fc7986e908857d6d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for dcmassist-0.2.18.tar.gz:

Publisher: ci.yml on jamiekt/dcmassist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dcmassist-0.2.18-py3-none-any.whl.

File metadata

  • Download URL: dcmassist-0.2.18-py3-none-any.whl
  • Upload date:
  • Size: 35.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dcmassist-0.2.18-py3-none-any.whl
Algorithm Hash digest
SHA256 d357be2ce2a0eefb7ee6d5d2b1dd395b5be5c5e3b57800b3730a04f9e021a71f
MD5 62ed007f290176a1b7f3a16669b31bd6
BLAKE2b-256 a3e8134477ede8d3694edf00875b179afa44151d1c8e739db99aa393da43de37

See more details on using hashes here.

Provenance

The following attestation bundles were made for dcmassist-0.2.18-py3-none-any.whl:

Publisher: ci.yml on jamiekt/dcmassist

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page