New to Kestra?
Use blueprints to kickstart your first workflows.
An ETL pipeline that downloads CSV data, hashes sensitive customer columns with DuckDB SQL, and loads the masked output into a BigQuery table.
This blueprint runs a privacy-aware ETL pipeline that extracts raw CSV data, masks personally identifiable information (PII) with DuckDB SQL, and loads the anonymized result into Google BigQuery. It solves a common compliance problem: sensitive customer fields like names and emails should never land in your analytics warehouse in clear text. By hashing those columns in flight with DuckDB before the load step, you keep the warehouse usable for joins and aggregations while removing raw PII from downstream tables.
extract task uses io.kestra.plugin.core.http.Download to fetch a CSV file of orders over HTTP and stage it in Kestra internal storage.transform task uses io.kestra.plugin.jdbc.duckdb.Queries to read the downloaded file with read_csv_auto, build an orders_pii table that applies hash(customer_name) and md5(customer_email) while passing through non-sensitive columns (order_id, product_id, price, quantity, total), and COPY the masked result back out as a CSV output file.load task uses io.kestra.plugin.gcp.bigquery.Load to ingest the masked CSV into the stage.orders_pii destination table, authenticating with a service account and using autodetect schema detection.DuckDB and BigQuery each handle one stage, but neither coordinates the full extract, transform, load chain. Kestra ties the HTTP download, the DuckDB masking step, and the BigQuery load into one observable run with automatic passing of file outputs between tasks. You get event and schedule triggers, retries on transient failures, full execution lineage, and a single declarative YAML definition. That is the gap a database query engine's own scheduler cannot fill: cross-tool orchestration, dependency management, and end-to-end visibility.
GCP_CREDS: the GCP service account JSON used by the load task to authenticate to BigQuery.GCP_CREDS secret with your service account key.projectId and destinationTable to your own project and dataset.extract task at your own source file.extract task for a database query, an S3 download, or a custom script.url such as jdbc:duckdb:md:my_db?motherduck_token={{ secret('MOTHERDUCK_TOKEN') }}.