New to Kestra?
Use blueprints to kickstart your first workflows.
Extract a remote CSV and bulk-load it into MySQL using Kestra. Declarative SQL tasks and secret-managed credentials keep the pipeline simple.
Move a remote CSV file into a MySQL table without writing glue code or babysitting cron jobs. This blueprint downloads a dataset over HTTP, creates the destination table if it does not exist, and bulk-loads the rows with MySQL LOAD DATA LOCAL INFILE, all as declarative YAML. It solves the common ELT problem of getting external flat files into a relational database reliably, with credentials kept out of the flow through Kestra secrets.
extract uses io.kestra.plugin.core.http.Download to fetch the orders.csv dataset from a remote URL and stage it in Kestra internal storage.enable_local_files runs io.kestra.plugin.jdbc.mysql.Query to SET GLOBAL local_infile=1, allowing MySQL to accept client-side file loads.create_table runs another io.kestra.plugin.jdbc.mysql.Query to create the target table (named from the table variable) with columns for order, customer, product, price, quantity, and total.load_data passes the downloaded file via inputFile and runs LOAD DATA LOCAL INFILE to bulk-insert the CSV rows, skipping the header with IGNORE 1 ROWS.Connection settings (url, username, password) are set on each io.kestra.plugin.jdbc.mysql.Query task.
create table if not exists.LOAD DATA LOCAL INFILE.url, username, password) applied to every query task.MySQL has no native scheduler for multi-step data workflows. Kestra fills that gap: trigger the load on a schedule or on an event, retry failed steps automatically, capture full execution lineage and logs, and keep everything as version-controlled YAML. Connection details are set on each task, and the password is kept in a secret rather than hardcoded.
jdbc:mysql://host.docker.internal:3306/stage).LOAD DATA LOCAL INFILE.DB_PASSWORD: the MySQL password used by each MySQL query task.docker run -d -p 3306:3306 --name mymysql -v mymysqldb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=topSecret42 -e MYSQL_DATABASE=stage mysql:latestDB_PASSWORD secret in Kestra.url, username, and table values to match your environment.extract URL to ingest your own CSV source.create_table schema to match your dataset.Schedule trigger to run loads on a cadence, or an event trigger to load on file arrival.load_data, or fan out to multiple tables.