New to Kestra?
Use blueprints to kickstart your first workflows.
Orchestrate a CSV-to-Weaviate ingestion pipeline with Kestra. Download, convert, batch insert into a Weaviate class, and run a GraphQL query.
Build a reproducible CSV-to-Weaviate ingestion pipeline that downloads a remote CSV file, converts it to Kestra's internal ION format, batch-creates objects in a Weaviate vector database class, and validates the load with a GraphQL query. This blueprint solves the common problem of getting structured tabular data into a vector store quickly so you can power semantic search, retrieval-augmented generation (RAG), and AI applications without hand-rolling glue scripts.
The flow runs four sequential tasks against a Weaviate cluster:
csv (io.kestra.plugin.core.http.Download) fetches the trivia questions CSV from a public Hugging Face dataset URL.csv_to_ion (io.kestra.plugin.serdes.csv.CsvToIon) converts the CSV stream to ION, the internal format Kestra plugins consume row by row.batch_load (io.kestra.plugin.weaviate.BatchCreate) inserts every row into the QuestionsCsv class on your Weaviate cluster, using the url and apiKey variables.query (io.kestra.plugin.weaviate.Query) runs a GraphQL Get query that returns 10 objects with the answer, category, and question fields to confirm the load succeeded.Cluster connection details live in variables.host and variables.secret, so you can repoint the flow to staging or production by editing two lines.
Weaviate has no native scheduler or ingestion runner: client SDKs assume you already have one. Kestra fills that gap with event and schedule triggers, automatic retries on transient HTTP and API errors, full input and output lineage between csv, csv_to_ion, batch_load, and query, and declarative YAML you can review in pull requests. The same flow runs from a webhook, a cron schedule, or an upstream flow finishing.
The flow currently reads the API key from variables.secret as a placeholder. For production, replace it with a Kestra secret, for example:
WEAVIATE_API_KEY: API key for the target Weaviate cluster, referenced as {{ secret('WEAVIATE_API_KEY') }}.variables.host to point at your Weaviate cluster URL.variables.secret with {{ secret('WEAVIATE_API_KEY') }}.query task output to confirm 10 objects are returned.csv download for io.kestra.plugin.aws.s3.Download, io.kestra.plugin.gcp.gcs.Download, or any other source plugin to ingest from object storage.BatchCreate with delete-then-create logic to support full refreshes, or add upserts keyed by a stable ID field.className, limit, and the CSV URL as flow inputs so the same blueprint serves multiple datasets.