New to Kestra?
Use blueprints to kickstart your first workflows.
Compile and run a Dataform project against BigQuery with Kestra. Load SQLX from namespace files, validate before running, and report every run to Slack.
Dataform turns SQL transformations into a dependency-aware DAG of SQLX files, but the CLI still needs somewhere to run on schedule, with credentials, logs, and alerting. This blueprint executes the whole lifecycle through io.kestra.plugin.dataform.cli.DataformCLI: the project arrives from Kestra namespace files, dataform compile validates every SQLX definition before anything touches the warehouse, dataform run executes the compiled DAG against BigQuery, and Slack receives the outcome with the execution ID. Every transformation run becomes a versioned execution with full logs.
compile_and_run (io.kestra.plugin.dataform.cli.DataformCLI) loads the Dataform project from namespace files with namespaceFiles: enabled, so the SQLX definitions live in the Kestra editor or sync from Git.inputFiles delivers the BigQuery service account key from {{ secret('GCP_SERVICE_ACCOUNT_JSON') }} as sa.json, and env points GOOGLE_APPLICATION_CREDENTIALS at it. Keep the project's .df-credentials.json (created by dataform init-creds) in the namespace files alongside the SQLX sources.beforeCommands runs dataform install to fetch the project's pinned @dataform/core dependency before any compilation.commands runs dataform compile first, so a broken ref, a missing dependency, or invalid SQLX stops the execution before any BigQuery job starts, then dataform run executes the full DAG in dependency order.notify posts the outcome to Slack, and the errors block posts a distinct alert when compile or run fails.Schedule trigger rebuilds the models daily at 05:00.Dataform compiles and runs the SQL DAG, but it does not schedule itself, keep an execution history, hold credentials safely, or tell anyone when a model breaks. Kestra wraps the unchanged dataform commands with all of that: the project files live in namespace files or Git, every command's logs land in the execution view, secrets stay in Kestra's secret backend, and downstream flows can chain on completion.
dataform.json or workflow_settings.yaml, and a .df-credentials.json created by dataform init-creds) stored as namespace files.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..df-credentials.json.disabled: false on the daily trigger to run every morning.dataform run --tags, as shown in the tag-scoped run blueprint.