New to Kestra?
Use blueprints to kickstart your first workflows.
Read a remote Parquet file with DuckDB, run SQL in process, and export the result set to a native Excel workbook with Kestra orchestration.
id: parquet-duckdb-to-excel
namespace: company.team
tasks:
- id: parquet_duckdb
type: io.kestra.plugin.jdbc.duckdb.Queries
sql: |
INSTALL parquet;
LOAD parquet;
INSTALL httpfs;
LOAD httpfs;
SELECT *
FROM
read_parquet('https://huggingface.co/datasets/kestra/datasets/resolve/main/jaffle-large/raw_items.parquet?download=true')
LIMIT 1000000;
fetchType: STORE
- id: duckdb_to_excel
type: io.kestra.plugin.serdes.excel.IonToExcel
from: "{{ outputs.parquet_duckdb.outputs[0].uri }}"
Turn a large remote Parquet dataset into a ready to share Excel file without spinning up a database or writing glue code. This blueprint reads a Parquet file directly over HTTP with DuckDB, runs SQL in process, and serializes the result set to a native .xlsx workbook. It solves a common last mile reporting problem: analytics live in columnar Parquet on object storage or a data lake, but business users still want a spreadsheet they can open, filter, and pivot in Excel.
parquet_duckdb task (io.kestra.plugin.jdbc.duckdb.Queries) installs and loads the parquet and httpfs DuckDB extensions, then runs read_parquet() against a remote Hugging Face URL. The query selects up to one million rows from a sample e-commerce items dataset and uses fetchType: STORE so the full result set is written to Kestra internal storage as an Ion file rather than held in memory.duckdb_to_excel task (io.kestra.plugin.serdes.excel.IonToExcel) reads that stored Ion file via {{ outputs.parquet_duckdb.outputs[0].uri }} and converts it into an Excel workbook you can download from the execution outputs..xlsx file generated from columnar Parquet data.httpfs extension.DuckDB is an embedded engine with no scheduler, no retries, and no run history of its own. Kestra wraps the query in a declarative YAML flow you can put on event triggers or schedules, retry on transient HTTP or extension load failures, and track end to end with execution logs and data lineage across the two tasks. The intermediate Ion file is passed between tasks through Kestra internal storage, so each step stays isolated and reproducible.
This blueprint reads a public dataset over HTTP and uses no secrets. If you point it at a private bucket, add the relevant credentials as Kestra secrets and reference them in the DuckDB connection or httpfs configuration.
.xlsx output from duckdb_to_excel.read_parquet() URL for your own Parquet file on S3, GCS, or Azure and configure httpfs credentials.SELECT * with aggregations, joins, or filters to shape the report.