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.