New to Kestra?
Use blueprints to kickstart your first workflows.
Build an event-driven cross-cloud ETL pipeline from Azure Blob Storage to Google BigQuery with Kestra, then transform raw data with a dbt Cloud job.
Move data across clouds without a fragile chain of schedulers. This blueprint watches an Azure Blob Storage container for new CSV files, loads each one into a Google BigQuery table the moment it lands, and then kicks off a dbt Cloud job to turn raw rows into analytics-ready models. It closes the common gap in Azure-to-GCP data pipelines: reacting to files as they arrive instead of polling on a fixed clock, and chaining ingestion to transformation as one observable run.
io.kestra.plugin.azure.storage.blob.Trigger polls the stage container under the marketplace/ prefix every PT30S. When new blobs appear, it starts an execution and exposes them as trigger.blobs.action is MOVE, so each processed blob is relocated to archive/marketplace/ in the same container, preventing duplicate ingestion and keeping the staging area clean.io.kestra.plugin.core.flow.ForEach task iterates over the blob URIs (trigger.blobs | jq('.[].uri')) with concurrencyLimit: 0 for parallel processing.io.kestra.plugin.gcp.bigquery.Load loads the CSV into the destination table using autodetect: true for schema inference, writeDisposition: WRITE_APPEND, and CSV options (fieldDelimiter, encoding: UTF-8, allowJaggedRows).io.kestra.plugin.dbt.cloud.TriggerRun triggers a dbt Cloud job with wait: true, so the run blocks until dbt completes and surfaces model and test results.The Azure Blob trigger reacts to events, not a cron clock, so data flows as soon as it arrives. Kestra adds retries on transient cloud failures, end-to-end lineage across Azure, BigQuery, and dbt in one execution, and declarative YAML you can version control. Neither the BigQuery scheduler nor dbt Cloud's own scheduler can watch an Azure container and chain a load into a transformation as a single observable pipeline. Kestra fills that gap.
AZURE_CONNECTION_STRING: Azure Storage connection string for the blob trigger.GCP_CREDS: GCP service account JSON for the BigQuery load.DBT_CLOUD_ACCOUNT_ID: dbt Cloud account ID.DBT_CLOUD_API_TOKEN: dbt Cloud API token.endpoint, container, and prefix to match your storage.destinationTable, projectId, and CSV options.jobId with your dbt Cloud transformation job.format: CSV and csvOptions for JSON, Avro, or Parquet ingestion.