New to Kestra?
Use blueprints to kickstart your first workflows.
Download a CSV, truncate-and-reload it into Vertica with a batch insert, then run a columnar aggregation query and store results in Kestra.
Run a re-run-safe extract, load, and analyze cycle against a Vertica columnar analytics database with Kestra. This blueprint downloads a remote CSV, parses it to ION, creates a target table if needed, truncates the staging table, batch-inserts rows over JDBC, and then runs a columnar aggregation query, all wrapped in retries, timeouts, concurrency control, and a Slack failure alert. It is a practical template for repeatable CSV ingestion into a Vertica MPP warehouse without writing custom scripts.
io.kestra.plugin.core.http.Download streams {{ inputs.source_url }} into Kestra internal storage with a 10 minute timeout and a constant retry policy.io.kestra.plugin.serdes.csv.CsvToIon parses the CSV (header: true) into ION so each row can be bound to a prepared statement.io.kestra.plugin.jdbc.vertica.Query (task create_table) issues idempotent DDL to create the columnar target table if it does not already exist.io.kestra.plugin.jdbc.vertica.Query (task truncate_staging) truncates the staging table so a re-run reloads instead of appending duplicates.io.kestra.plugin.jdbc.vertica.Batch chunk-inserts the ION rows (1,000 per chunk) with named-column binding, so the load survives a CSV column reorder.io.kestra.plugin.jdbc.vertica.Query (task revenue_by_product) aggregates revenue per product with fetchType: STORE, persisting the result set as an ION file.errors block posts a Slack alert via io.kestra.plugin.slack.notifications.SlackIncomingWebhook with the execution id.pluginDefaults so URL, username, and password are declared once.{{ outputs.revenue_by_product.uri }}.{{ outputs.batch_insert.rowCount }} and {{ outputs.batch_insert.updatedCount }} for downstream assertions.concurrency.limit: 1 to prevent interleaved loads.Vertica is a database, not a scheduler. It has no native way to fetch a remote CSV, retry a transient HTTP failure, serialize concurrent loaders, or page an on-call engineer when a load fails. Kestra adds declarative YAML, event and schedule triggers, task-level retries and timeouts, flow-level error handling, execution-level concurrency caps, and lineage across the HTTP download, the JDBC DDL, the batch insert, and the analytical query, so the whole load is observable as one execution rather than scattered cron jobs.
vertica_url variable (default jdbc:vertica://vertica-host:5433/analytics) to your JDBC URL.VERTICA_USERNAME: Vertica database user used for the JDBC connection.VERTICA_PASSWORD: password for that Vertica user.SLACK_WEBHOOK: Slack incoming webhook URL for failure notifications.VERTICA_USERNAME, VERTICA_PASSWORD, and SLACK_WEBHOOK secrets to your namespace.vertica_url variable to point at your cluster.target_table allow-list and adjust the column list in create_table and batch_insert to match your CSV schema.source_url to validate end-to-end, then point it at your real CSV endpoint.io.kestra.plugin.jdbc.vertica.Batch for Vertica's native COPY bulk loader when ingesting hundreds of MB or more.batch_insert to fail loudly on empty loads.revenue_by_product to materialize marts.