New to Kestra?
Use blueprints to kickstart your first workflows.
Run only tagged Dataform models with Kestra. Refresh the marketing slice at 06:00 without rebuilding the whole BigQuery project, with Slack alerts.
A whole-project dataform run is the wrong tool when the marketing team needs their models fresh at 06:00 and nobody wants to rebuild finance's fact tables to get there. Dataform solves the selection with tags: any SQLX action can declare tags: ["marketing"] in its config block, and dataform run --tags marketing executes just that slice with its dependencies. This blueprint parameterizes the tag as a Kestra input through io.kestra.plugin.dataform.cli.DataformCLI, so one flow serves every team's schedule, and each run reports to Slack.
tag input (default marketing) selects the slice. Executing the flow manually with a different value runs a different team's models with zero YAML changes.run_tagged_models (io.kestra.plugin.dataform.cli.DataformCLI) loads the project from namespace files, installs the pinned @dataform/core dependency in beforeCommands, and runs dataform run --tags {{ inputs.tag }} against BigQuery with credentials from inputFiles and GOOGLE_APPLICATION_CREDENTIALS.notify posts the finished run to Slack with the tag name, and the errors block posts a distinct alert on failure.Schedule trigger runs the default tag every morning at 06:00. Duplicate the trigger, or the whole flow, per team and cadence.Dataform selects and runs the tagged slice, but the cadence, the credentials, the retry behavior, and the notification live outside the CLI. Kestra provides them around the unchanged command: inputs make the tag a first-class parameter, schedules give each slice its own cadence, every run is an execution with logs, and secrets never touch the project files.
tags declared in the config blocks of the models to scope.GCP_SERVICE_ACCOUNT_JSON: the service account key JSON, delivered to the task as sa.json.SLACK_WEBHOOK_URL: Slack incoming webhook URL.GCP_SERVICE_ACCOUNT_JSON and SLACK_WEBHOOK_URL secrets to your Kestra namespace.marketing.disabled: false on the morning_marketing trigger for the daily 06:00 refresh.inputs, one cadence per team.