New to Kestra?
Use blueprints to kickstart your first workflows.
Schedule a backfill-safe SAP HANA analytics view export to CSV and upload it to a partitioned S3 data lake with Kestra retries and Slack alerts.
Export a SAP HANA analytics or calculation view to CSV and land it in a partitioned Amazon S3 data lake on a daily schedule. This blueprint solves the recurring HANA to lake-house extract problem: getting governed SAP analytics data out of HANA and into a format that Athena, Spark, or Snowflake can read, with the load window driven by an explicit load_date input instead of CURRENT_DATE so backfills and replays always select the correct day and write it to the matching partition. Remote calls carry retries and failures alert to Slack.
daily_export trigger (io.kestra.plugin.core.trigger.Schedule) fires at 05:00 Europe/Berlin on cron 0 5 * * *. The load_date input defaults to {{ (trigger.date ?? execution.startDate) }}, so a manual backfill exports that exact day.extract_view task (io.kestra.plugin.jdbc.hana.Query) runs the SQL against the view named by the analytics_view input, binding load_date to the :loadDate parameter. With fetchType: STORE it streams the result set to Kestra internal storage as Amazon ION. A 30-minute timeout and a 3-attempt constant retry guard against transient HANA disconnects.convert_to_csv task (io.kestra.plugin.serdes.csv.IonToCsv) converts the ION file to CSV with a header row.upload_to_data_lake task (io.kestra.plugin.aws.s3.Upload) writes the CSV to the data_lake_bucket under a date-partitioned key like hana/daily_sales/2026/06/17/daily_sales.csv, with its own retry for S3 throttling.errors block posts a Slack alert via io.kestra.plugin.slack.notifications.SlackIncomingWebhook with the execution id.load_date, so re-runs overwrite cleanly instead of duplicating.SELECT *, so downstream tables survive view changes.HANA's own scheduling and SAP job tools stop at the database boundary: they can run a query, but they cannot also convert the output, push it to S3, retry each external step independently, and alert your team in one declarative, versioned unit. Kestra ties the HANA read, format conversion, and S3 upload into a single event-driven flow defined in YAML, with per-task retries, a bounded timeout, full execution lineage and replayable runs, and a Slack error path. The load_date input makes every run backfill-safe, something a plain CURRENT_DATE query in a scheduler cannot offer.
databaseName for your tenant. The HANA JDBC driver (ngdbc) ships with the Kestra JDBC plugin.s3:PutObject.HANA_HOST: hostname or IP of the SAP HANA server.HANA_USERNAME: HANA database user with read access to the view.HANA_PASSWORD: password for that user.AWS_DEFAULT_REGION: AWS region of the destination bucket.AWS_ACCESS_KEY_ID: AWS access key id with write access.AWS_SECRET_ACCESS_KEY: AWS secret access key.SLACK_WEBHOOK: Slack Incoming Webhook URL for failure alerts.analytics_view and data_lake_bucket inputs to match your environment.upload_to_data_lake.fetchType or add compression for very large exports.