dagster-rocky
Dagster integration for Rocky, the typed graph between your code and your warehouse.
dagster-rocky wraps the rocky CLI as a Dagster ConfigurableResource and exposes Rocky-managed
tables as materializable Dagster assets. Compile-time contracts, column-level lineage, schema-drift
detection, quality check results, and per-model cost surface as native Dagster events, so the
guarantees Rocky enforces at compile time appear directly in the Dagster asset graph.
Two behaviors worth knowing. Rocky's per-check severity maps to Dagster's, so a failing
advisory check emits WARN instead of paging anyone. And when the engine's failure containment
is enabled, the models Rocky withholds behind a failed upstream appear as AssetObservation
events naming the blocking model, so a partial run reads honestly in the asset graph.
Install
uv add dagster-rocky
You'll also need the Rocky CLI on your $PATH:
https://github.com/rocky-data/rocky/releases?q=engine
Quick start (component)
Add a defs.yaml next to your other Dagster definitions:
type: dagster_rocky.RockyComponent
attributes:
binary_path: rocky
config_path: config/rocky.toml
models_dir: models
Dagster's component loader will:
- Run
rocky discover(androcky compile, when models are present) and cache the result. - Build one subset-aware
multi_assetper Rocky group, with declaredrow_count/column_match/freshnesschecks per table. - On materialization, shell out to
rocky run --filter <key>=<value>for the selected subset and yieldMaterializeResult+AssetCheckResultevents with rich metadata.
Quick start (resource)
import dagster as dg
from dagster_rocky import RockyResource
rocky = RockyResource(
binary_path="rocky",
config_path="config/rocky.toml",
timeout_seconds=3600,
)
defs = dg.Definitions(resources={"rocky": rocky})
Then in an asset:
@dg.asset
def acme_orders(rocky: RockyResource) -> dg.MaterializeResult:
result = rocky.run(filter="tenant=acme")
return dg.MaterializeResult(
metadata={"tables_copied": result.tables_copied, "duration_ms": result.duration_ms},
)
Public API
| Symbol | Purpose |
|---|---|
RockyResource |
ConfigurableResource wrapping the Rocky CLI |
RockyComponent |
State-backed Dagster component that loads Rocky tables as assets |
RockyDagsterTranslator |
Subclass to customize asset key / group / tag mapping |
RockyMetadataSet |
Namespaced metadata (source_id, strategy, watermark, …) |
load_rocky_assets() |
Functional helper that returns AssetSpec for each Rocky table |
emit_materializations() / emit_check_results() |
Convert a RunResult into Dagster events |
check_metadata() |
Build a metadata mapping for a single Rocky CheckResult |
cost_metadata_from_optimize() |
Extract per-model cost recommendations from OptimizeResult |
parse_rocky_output() |
Auto-detect a Rocky JSON payload and return the matching Pydantic model |
Documentation
- Dagster Integration docs: resource, component, translator, schedules, sensors, pipes, and more
- DEVELOPMENT.md: local setup, architecture, testing
- CHANGELOG.md: release notes
Related projects
- Rocky: the Rust SQL transformation engine
- Rocky VS Code extension: VS Code extension with LSP and AI features
License
Apache 2.0
Release files for dagster-rocky 1.62.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dagster_rocky-1.62.0.tar.gz | 375.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dagster_rocky-1.62.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 504.8 kB
Release files / dagster_rocky-1.62.0.tar.gz
| Download URL | dagster_rocky-1.62.0.tar.gz |
|---|---|
| Size | 375.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d2d30765cf5154c8bf1ff8a91e50bfd4bd1888385fff8ecbd005a04068d28f35
|
|
BLAKE2b-256 checksum How to use checksums |
7454552bbaa274422843e0f6395fa10111b696b6f4689069487de2b02315ba6c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency logRelease files / dagster_rocky-1.62.0-py3-none-any.whl
| Download URL | dagster_rocky-1.62.0-py3-none-any.whl |
|---|---|
| Size | 129.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9d9704982e64e0e2a52897489ffb0c04f80fabe22f89f2a985f632d4a7c2f83c
|
|
BLAKE2b-256 checksum How to use checksums |
b37b4152e1eadbf592fbfc088cf9970fb41ca95f7357daf9ed297352c43b26bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency log