New to Kestra?
Use blueprints to kickstart your first workflows.
Run a full Snowflake ETL with Kestra. Create a database, upload CSV to internal stage, COPY INTO a table, and run analytical SQL in one pipeline.
A complete Snowflake ETL pipeline orchestrated by Kestra. The flow provisions a database and table, downloads a CSV from an external HTTP source, uploads it to a Snowflake internal stage, runs COPY INTO to load the staged file into the target table, executes an analytical aggregation, and exports the result as a downloadable CSV. It is a working pattern for teams who want a reproducible Snowflake load and transform job that runs on a schedule or on demand, without gluing together bash scripts, cron, and ad hoc SQL.
create_database runs io.kestra.plugin.jdbc.snowflake.Query to CREATE OR REPLACE DATABASE kestra.create_table runs another Query task to create the KESTRA.PUBLIC.EMPLOYEES table with first name, last name, email, address, city, and start date columns.extract uses io.kestra.plugin.core.http.Download to fetch a sample employees CSV from a public Hugging Face dataset.load_to_internal_stage uses io.kestra.plugin.jdbc.snowflake.Upload to push the downloaded file into the @kestra.public.%employees internal stage with compress: true and a raw prefix.load_from_stage_to_table runs COPY INTO KESTRA.PUBLIC.EMPLOYEES from the stage, using a CSV file format with header skip and ON_ERROR = 'skip_file'.analyze runs a grouped aggregation on hires per year and month with fetchType: STORE, storing the result set in Kestra internal storage.csv_report uses io.kestra.plugin.serdes.csv.IonToCsv to convert the Ion result into a CSV available from the Outputs tab.Snowflake credentials are centralized via pluginDefaults for both Query and Upload tasks, so the JDBC URL, username, and password live in one place.
COPY INTO, analytical SQL.pluginDefaults.Snowflake Tasks and Streams can schedule SQL inside the warehouse, but they cannot pull files from external HTTP endpoints, manage staging from outside Snowflake, or coordinate downstream steps such as CSV conversion and notifications. Kestra closes that gap with event and schedule triggers, retries, structured logs, output lineage between tasks ({{ outputs.extract.uri }}, {{ outputs.analyze.uri }}), and a declarative YAML definition you can review in Git.
COMPUTE_WH), and a user with privileges to create databases, tables, and stages.SNOWFLAKE_PASSWORD: password for the Snowflake user referenced in pluginDefaults.accountID.snowflakecomputing.com and yourSnowflakeUser in pluginDefaults with your account and user.SNOWFLAKE_PASSWORD secret in Kestra.extract HTTP download for io.kestra.plugin.aws.s3.Download, GCS, Azure Blob, or an SFTP source.COPY INTO to model the raw table into marts.errors: handlers to alert on failed loads, and retries on transient JDBC errors.