How to Organize dbt Assets into Different Groups in Dagster
Last updated: October 23, 2025
To organize dbt assets into different groups, create a custom DagsterDbtTranslator class that overrides the get_group_name method. Here's an example implementation:
from dagster_dbt import DagsterDbtTranslator
class CustomDagsterDbtTranslator(DagsterDbtTranslator):
def get_group_name(self, dbt_resource_props: Mapping[str, Any]) -> Optional[str]:
# Option A: Group by dbt model directory
model_path = dbt_resource_props.get("original_file_path", "")
if "marts/" in model_path:
return "marts"
elif "staging/" in model_path:
return "staging"
elif "intermediate/" in model_path:
return "intermediate"
# Option B: Group by dbt tags
tags = dbt_resource_props.get("tags", [])
if "finance" in tags:
return "finance"
elif "marketing" in tags:
return "marketing"
# Option C: Group by dbt meta config
meta = dbt_resource_props.get("config", {}).get("meta", {})
if "dagster_group" in meta:
return meta["dagster_group"]
# Default fallback
return "dbt_models"Use the custom translator in your dbt assets definition:
@dbt_assets(
manifest=MANIFEST_PATH,
dagster_dbt_translator=CustomDagsterDbtTranslator()
)
def dbt_assets(context: AssetExecutionContext, dbt_cli: DbtCliResource):
yield from dbt_cli.cli(["build"], context=context).stream()This solution allows you to organize dbt assets based on different criteria:
Model directory structure (marts, staging, intermediate)
dbt tags (finance, marketing)
Custom meta configurations in your dbt models Instead of having all models in a single "dbt" group
For more information about working with dbt in Dagster, refer to the dbt integration documentation.