dagster-malloy
dagster-malloy is an unofficial community integration library providing Dagster support for Malloy models (.malloy) and notebooks (.malloynb).
Note: This is an unofficial community package and is not affiliated with, endorsed by, or maintained by Dagster Labs or Google/Malloy.
It enables loading Malloy models as Dagster Software-Defined Assets, executing queries via malloy-cli or the malloy Python SDK, tracking lineage and metadata, and running data quality asset checks.
Demo Quickstart
Try the interactive Malloy demo webserver in a single command using uvx:
uvx dagster-malloy-demo
This generates a sample project (./malloy_demo) and launches the Dagster UI at http://127.0.0.1:3000.
Installation
uv add dagster-malloy
To enable DataFrame outputs via pandas:
uv add "dagster-malloy[pandas]"
To enable the in-process Python SDK backend:
uv add "dagster-malloy[python-backend]"
Usage
1. Loading Malloy Assets
Use load_malloy_assets to discover and construct Dagster assets from .malloy files or .malloynb notebooks in a directory:
from pathlib import Path
from dagster import Definitions
from dagster_malloy import load_malloy_assets, MalloyResource
malloy_assets = load_malloy_assets(path=Path(__file__).parent / "models")
defs = Definitions(
assets=[malloy_assets],
resources={
"malloy": MalloyResource(
execution_mode="auto", # 'cli' (default), 'python', or 'auto'
),
},
)
2. Execution Engines
dagster-malloy supports two execution backends via MalloyResource:
cli(Default / Recommended): Executes compilation and query execution usingmalloy-cli/npx malloy-cli.python: Executes queries in-process using themalloyPython SDK (malloy.Runtime).
resource = MalloyResource(
execution_mode="cli",
cli_path="npx malloy-cli", # Custom CLI executable path
config_path="path/to/malloy-config.json",
)
3. Custom Translator (MalloyTranslator)
Subclass MalloyTranslator to customize asset keys, tags, group names, metadata, or upstream dependencies:
from dagster import AssetKey
from dagster_malloy import MalloyTranslator, MalloyTranslatorData, load_malloy_assets
class CustomMalloyTranslator(MalloyTranslator):
def get_asset_key(self, data: MalloyTranslatorData) -> AssetKey:
return AssetKey(["analytics", data.query_info.name])
def get_group_name(self, data: MalloyTranslatorData) -> str:
return "malloy_models"
malloy_assets = load_malloy_assets(
path="./models",
translator=CustomMalloyTranslator(),
)
4. Data Quality Asset Checks
Use build_malloy_asset_checks to convert Malloy validation queries (check_* or # @check) into Dagster AssetCheckResult checks:
from dagster import AssetKey
from dagster_malloy import build_malloy_asset_checks
checks = build_malloy_asset_checks(
file_path="./models/sales.malloy",
target_asset_key=AssetKey(["sales", "customer_analytics"]),
)
Example Project
A self-contained runnable example project is available in examples/malloy_demo.
To clone and run the example locally:
git clone https://github.com/mathisdrn/dagster-malloy.git
cd dagster-malloy/examples/malloy_demo
python generate_data.py
dagster dev -f definitions.py -p 3000
Open http://127.0.0.1:3000 to view the asset catalog and lineage graph.
Testing
Run unit tests using pytest:
pytest tests/ -v
Contributing
Contributions, issues, and pull requests are welcome! Feel free to open an issue or submit a pull request on GitHub.
License
Apache License 2.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dagster_malloy-0.1.2.tar.gz.
File metadata
- Download URL: dagster_malloy-0.1.2.tar.gz
- Upload date:
- Size: 493.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e499b5e79e3af1eddc4d5ebb7cf09e3ad0750ce16f8615399ad4e7ae1456cd46
|
|
| MD5 |
108365a8212647769c158917af8b8b43
|
|
| BLAKE2b-256 |
3508f51d014457a9bf5973ff2fbb40ca38097a4ab7c5bedc08c622db801e5f70
|
File details
Details for the file dagster_malloy-0.1.2-py3-none-any.whl.
File metadata
- Download URL: dagster_malloy-0.1.2-py3-none-any.whl
- Upload date:
- Size: 20.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ec2116b6a8190f0070b91b4898c38046e48c311e6d65dae66d42078419e6233
|
|
| MD5 |
ca40935d8c7229404f97651a2cd5a626
|
|
| BLAKE2b-256 |
2e81a85c269b188745c0a36b5d86c7181ef0d906a7803d9917bc429f71d416ab
|