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, secret-managed credentials, and pluginDefaults remove boilerplate.
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 defined once in pluginDefaults for io.kestra.plugin.jdbc.mysql.Query, so every query task inherits them.
create table if not exists.LOAD DATA LOCAL INFILE.pluginDefaults to eliminate repetition.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 live in pluginDefaults and secrets, so the same flow runs across environments without edits.
jdbc:mysql://host.docker.internal:3306/stage).LOAD DATA LOCAL INFILE.DB_PASSWORD: the MySQL password used in the pluginDefaults connection.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.