From e2d661372588ac37e580d10af26b96be94db393a Mon Sep 17 00:00:00 2001 From: gitea_admin Date: Mon, 12 Oct 2026 02:36:34 +0000 Subject: [PATCH] Add kamelet definition: snowflake-sink --- kamelet.json | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 kamelet.json diff --git a/kamelet.json b/kamelet.json new file mode 100644 index 0000000..9208845 --- /dev/null +++ b/kamelet.json @@ -0,0 +1,160 @@ +{ + "apiVersion": "camel.apache.org/v1", + "kind": "Kamelet", + "metadata": { + "name": "snowflake-sink", + "annotations": { + "camel.apache.org/kamelet.support.level": "Preview", + "camel.apache.org/catalog.version": "4.22.1", + "camel.apache.org/kamelet.icon": "data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjIiIGJhc2VQcm9maWxlPSJ0aW55LXBzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNTY1IDE1NTkiIHdpZHRoPSIxNTY1IiBoZWlnaHQ9IjE1NTkiPgoJPHRpdGxlPmxvZ28tYmx1ZS1zdmcgY29weS1zdmc8L3RpdGxlPgoJPGRlZnM+CgkJPGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iY3AxIj4KCQkJPHBhdGggZD0iTTAuMjQgMEw2ODkzLjI2IDBMNjg5My4yNiAxNTU4LjIyTDAuMjQgMTU1OC4yMkwwLjI0IDBaIiAvPgoJCTwvY2xpcFBhdGg+Cgk8L2RlZnM+Cgk8c3R5bGU+CgkJdHNwYW4geyB3aGl0ZS1zcGFjZTpwcmUgfQoJCS5zaHAwIHsgZmlsbDogIzI5YjVlOCB9IAoJPC9zdHlsZT4KCTxnIGlkPSJIT01FUEFHRSI+CgkJPGcgaWQ9IlNub3dmbGFrZS1Ib21lcGFnZS1wbGF0Zm9ybS1hbHQtMy1Db3B5Ij4KCQkJPGcgaWQ9IkNvbXBvbmVudHMtLy1OYXZpZ2F0aW9uLS8tTWFpbiI+CgkJCQk8ZyBpZD0iTG9nby0vLVNub3dmbGFrZS1CbHVlIj4KCQkJCQk8ZyBpZD0iTGF5ZXIiPgoJCQkJCQk8ZyBpZD0iTWFzayI+CgkJCQkJCTwvZz4KCQkJCQkJPGcgaWQ9IkNsaXAtUGF0aDogQ2xpcC1QYXRoOiBGaWxsLTEiIGNsaXAtcGF0aD0idXJsKCNjcDEpIj4KCQkJCQkJCTxnIGlkPSJDbGlwLVBhdGg6IEZpbGwtMSI+CgkJCQkJCQkJPHBhdGggaWQ9IkZpbGwtMSIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGFzcz0ic2hwMCIgZD0iTTUyMi42MyA4MDcuNTdDNTE1LjYzIDgzMC4wNyA1MDAuNDQgODUwLjA2IDQ3OC4wNyA4NjIuODRMMTQ2LjcyIDEwNTIuNjlDOTkuOTIgMTA3OS4zOSA0MC4zIDEwNjMuNTYgMTMuNDQgMTAxNy4zOEMtMTMuNTkgOTcwLjk0IDIuMzIgOTExLjg2IDQ5LjA4IDg4NS4wOEwyMzQuMjYgNzc5LjE3TDQ5LjA4IDY3Mi45OEMyLjMyIDY0Ni4yNCAtMTMuNjcgNTg3LjE1IDEzLjQ0IDU0MC44OEM0MC4zIDQ5NC41OCA5OS45MiA0NzguNyAxNDYuNzIgNTA1LjRMNDc4LjA3IDY5NS4xM0M1MDEuMzcgNzA4LjQ2IDUxNi45NCA3MjkuNiA1MjMuNDggNzUzLjI0QzUyNS42OCA3NjAuODQgNTI2LjY2IDc2OC40NCA1MjcuMDQgNzc2LjA4QzUyNy4zIDc4Ni42IDUyNS45NCA3OTcuMjYgNTIyLjYzIDgwNy41N1pNNjEyLjU0IDk4NS4zOEM2NjMgOTg4Ljk4IDcwMi44NCAxMDMwLjg0IDcwMi44NCAxMDgxLjc3TDcwMi44NCAxNDYxLjM2QzcwMi44NCAxNTE0Ljg5IDY1OS4wNSAxNTU4LjIyIDYwNS4yOSAxNTU4LjIyQzU1MS4yNyAxNTU4LjIyIDUwNy42NSAxNTE0Ljg5IDUwNy42NSAxNDYxLjM2TDUwNy42NSAxMjQ5LjA1TDMyMS44NCAxMzU1LjI5QzI3NS4yNSAxMzgyLjIgMjE1LjY3IDEzNjYuMjggMTg4LjYgMTMyMC4wNkMxNjEuNyAxMjczLjc1IDE3Ny42MSAxMjE0LjM3IDIyNC4yOSAxMTg3LjYzTDU1NS45IDk5OC4wMkM1NzMuNzIgOTg3LjcxIDU5My40OSA5ODMuNzYgNjEyLjU0IDk4NS4zOFpNOTUyLjE3IDU3Mi44NUM5MDEuNTkgNTY5LjE1IDg2MS44MyA1MjcuMjIgODYxLjgzIDQ3Ni4zM0w4NjEuODMgOTYuNjlDODYxLjgzIDQzLjM0IDkwNS4zNyAwIDk1OS40MyAwQzEwMTMuNDQgMCAxMDU3LjA3IDQzLjM0IDEwNTcuMDcgOTYuNjlMMTA1Ny4wNyAzMDkuMTNMMTI0Mi43NSAyMDIuNzJDMTI4OS40MyAxNzUuOTggMTM0OS4wNCAxOTEuODUgMTM3NS45NSAyMzguMDhDMTQwMi44IDI4NC41NiAxMzg2Ljk4IDM0My42OCAxMzQwLjI2IDM3MC40MkwxMDA4LjY5IDU2MC4yQzk5MC44NyA1NzAuMzggOTcxLjE0IDU3NC4zNyA5NTIuMTcgNTcyLjg1Wk0yMjQuMjkgMzcwLjQyQzE3Ny42MSAzNDMuNjggMTYxLjcgMjg0LjU2IDE4OC42IDIzOC4wOEMyMTUuNjcgMTkxLjg1IDI3NS4yNSAxNzUuOTggMzIxLjg0IDIwMi43Mkw1MDcuNjUgMzA5LjEzTDUwNy42NSA5Ni42OUM1MDcuNjUgNDMuMzQgNTUxLjI3IDAgNjA1LjI5IDBDNjU5LjA1IDAgNzAyLjg0IDQzLjM0IDcwMi44NCA5Ni42OUw3MDIuODQgNDc2LjMzQzcwMi44NCA1MjcuMjIgNjYzIDU2OS4xNSA2MTIuNTQgNTcyLjg1QzU5My40OSA1NzQuMzcgNTczLjcyIDU3MC4zOCA1NTUuOSA1NjAuMkwyMjQuMjkgMzcwLjQyWk04MTkuODMgOTUyLjc0QzgxNS44OCA5NTYuNzcgODA4LjI4IDk2MC4wNCA4MDIuNTEgOTYwLjA0TDc2MS45OSA5NjAuMDRDNzU2LjQzIDk2MC4wNCA3NDguNzEgOTU2Ljc3IDc0NC42OCA5NTIuNzRMNjA2Ljk0IDgxNi4yN0M2MDMgODEyLjQxIDU5OS44MSA4MDQuNjggNTk5LjgxIDc5OS4yNUw1OTkuODEgNzU4Ljk3QzU5OS44MSA3NTMuNDEgNjAzIDc0NS42OSA2MDYuOTQgNzQxLjc4TDc0NC42OCA2MDUuMjdDNzQ4LjcxIDYwMS4yOSA3NTYuNDMgNTk4LjEgNzYxLjk5IDU5OC4xTDgwMi41MSA1OTguMUM4MDguMTYgNTk4LjEgODE1Ljg4IDYwMS4yOSA4MTkuODMgNjA1LjI3TDk1Ny42NSA3NDEuNzhDOTYxLjU5IDc0NS42OSA5NjQuNzcgNzUzLjQxIDk2NC43NyA3NTguOTdMOTY0Ljc3IDc5OS4yNUM5NjQuNzcgODA0LjY4IDk2MS41OSA4MTIuNDEgOTU3LjY1IDgxNi4yN0w4MTkuODMgOTUyLjc0Wk04NDcuNDkgNzc4LjM3Qzg0Ny40OSA3NzIuODUgODQ0LjE0IDc2NS4xNyA4NDAuMTkgNzYxLjA5TDgwMC4yNiA3MjEuN0M3OTYuMzYgNzE3LjggNzg4LjYgNzE0LjU3IDc4My4wNCA3MTQuNTdMNzgxLjQ3IDcxNC41N0M3NzUuOTEgNzE0LjU3IDc2OC4xOSA3MTcuOCA3NjQuMzIgNzIxLjdMNzI0LjQgNzYxLjA5QzcyMC40MSA3NjUuMTcgNzE3LjM1IDc3Mi44NSA3MTcuMzUgNzc4LjM3TDcxNy4zNSA3NzkuOTRDNzE3LjM1IDc4NS4zNyA3MjAuNDEgNzkyLjk3IDcyNC40IDc5Ni45Nkw3NjQuMzIgODM2LjQzQzc2OC4yMyA4NDAuMzQgNzc1LjkxIDg0My41NiA3ODEuNDcgODQzLjU2TDc4My4wNCA4NDMuNTZDNzg4LjYgODQzLjU2IDc5Ni4zNiA4NDAuMzQgODAwLjI2IDgzNi40M0w4NDAuMTkgNzk2Ljk2Qzg0NC4xNCA3OTIuOTcgODQ3LjQ5IDc4NS4zNyA4NDcuNDkgNzc5Ljk0TDg0Ny40OSA3NzguMzdaTTEzNDAuMjYgMTE4Ny42M0MxMzg2Ljk4IDEyMTQuMzcgMTQwMi44IDEyNzMuNzUgMTM3NS45NSAxMzIwLjA2QzEzNDkuMDQgMTM2Ni4yOCAxMjg5LjM4IDEzODIuMiAxMjQyLjc1IDEzNTUuMjlMMTA1Ny4wNyAxMjQ5LjA1TDEwNTcuMDcgMTQ2MS4zNkMxMDU3LjA3IDE1MTQuODkgMTAxMy40NCAxNTU4LjIyIDk1OS40MyAxNTU4LjIyQzkwNS4zNyAxNTU4LjIyIDg2MS44MyAxNTE0Ljg5IDg2MS44MyAxNDYxLjM2TDg2MS44MyAxMDgxLjc3Qzg2MS44MyAxMDMwLjg0IDkwMS41OSA5ODguOTggOTUyLjE3IDk4NS4zOEM5NzEuMTQgOTgzLjc2IDk5MC44NyA5ODcuNzEgMTAwOC42OSA5OTguMDJMMTM0MC4yNiAxMTg3LjYzWk0xMzMwLjM3IDc3OS4xN0wxNTE1LjU1IDg4NS4wOEMxNTYyLjMxIDkxMS44NiAxNTc4LjMxIDk3MC45NCAxNTUxLjI4IDEwMTcuMzhDMTUyNC4yOSAxMDYzLjU2IDE0NjQuNTkgMTA3OS4zOSAxNDE4IDEwNTIuNjlMMTA4Ni4zOSA4NjIuODRDMTA2NC4yNCA4NTAuMDYgMTA0OC45MiA4MzAuMDcgMTA0Mi4wOSA4MDcuNTdDMTAzOC44NiA3OTcuMjYgMTAzNy4zMyA3ODYuNiAxMDM3LjcyIDc3Ni4wOEMxMDM3Ljg5IDc2OC40NCAxMDM5LjAzIDc2MC44NCAxMDQxLjE1IDc1My4yNEMxMDQ3Ljc3IDcyOS42IDEwNjMuMzUgNzA4LjQ2IDEwODYuMzkgNjk1LjEzTDE0MTggNTA1LjRDMTQ2NC41OSA0NzguNyAxNTI0LjI5IDQ5NC41OCAxNTUxLjI4IDU0MC44OEMxNTc4LjMxIDU4Ny4xNSAxNTYyLjMxIDY0Ni4yNCAxNTE1LjU1IDY3Mi45OEwxMzMwLjM3IDc3OS4xN1oiIC8+CgkJCQkJCQk8L2c+CgkJCQkJCTwvZz4KCQkJCQk8L2c+CgkJCQk8L2c+CgkJCTwvZz4KCQk8L2c+Cgk8L2c+Cjwvc3ZnPg==", + "camel.apache.org/provider": "Apache Software Foundation", + "camel.apache.org/kamelet.group": "SQL", + "camel.apache.org/kamelet.namespace": "Database" + }, + "labels": { + "camel.apache.org/kamelet.type": "sink" + } + }, + "spec": { + "definition": { + "title": "Snowflake Sink", + "description": "Send data to a Snowflake Database. This Kamelet expects a JSON-formatted body. Use key:value pairs to map the JSON fields and parameters.", + "required": [ + "instanceUrl", + "username", + "password", + "query" + ], + "type": "object", + "properties": { + "instanceUrl": { + "title": "Instance URL", + "description": "The Instance url", + "type": "string", + "example": "instance.snowflakecomputing.com" + }, + "username": { + "title": "Username", + "description": "The username to access a secured Snowflake Database.", + "type": "string", + "x-descriptors": [ + "urn:camel:group:credentials" + ] + }, + "password": { + "title": "Password", + "description": "The password to access a secured Snowflake Database.", + "type": "string", + "format": "password", + "x-descriptors": [ + "urn:camel:group:credentials" + ] + }, + "query": { + "title": "Query", + "description": "The query to execute against the Snowflake Database.", + "type": "string", + "example": "INSERT INTO accounts (username,city) VALUES (:#username,:#city)" + }, + "databaseName": { + "title": "Database Name", + "description": "The name of the Snowflake Database.", + "type": "string" + } + } + }, + "types": { + "in": { + "mediaType": "application/json" + } + }, + "dependencies": [ + "camel:jackson", + "camel:kamelet", + "camel:sql", + "mvn:net.snowflake:snowflake-jdbc:3.24.2", + "mvn:org.apache.commons:commons-dbcp2:2.14.0" + ], + "template": { + "beans": [ + { + "name": "local-sql-snowflake-sink", + "type": "#class:org.apache.camel.component.sql.SqlComponent", + "properties": { + "autowiredEnabled": "false" + } + }, + { + "name": "dsBean", + "type": "#class:net.snowflake.client.jdbc.SnowflakeBasicDataSource", + "properties": { + "user": "{{username}}", + "password": "{{password}}", + "url": "jdbc:snowflake://{{instanceUrl}}", + "databaseName": "{{?databaseName}}" + } + } + ], + "from": { + "uri": "kamelet:source", + "steps": [ + { + "unmarshal": { + "json": { + "library": "Jackson" + } + } + }, + { + "to": { + "uri": "{{local-sql-snowflake-sink}}:{{query}}", + "parameters": { + "dataSource": "#bean:{{dsBean}}" + } + } + } + ] + } + } + }, + "propertiesSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "Snowflake Sink", + "description": "Send data to a Snowflake Database. This Kamelet expects a JSON-formatted body. Use key:value pairs to map the JSON fields and parameters.", + "required": [ + "instanceUrl", + "username", + "password", + "query" + ], + "properties": { + "instanceUrl": { + "type": "string", + "title": "Instance URL", + "description": "The Instance url" + }, + "username": { + "type": "string", + "title": "Username", + "description": "The username to access a secured Snowflake Database." + }, + "password": { + "type": "string", + "title": "Password", + "description": "The password to access a secured Snowflake Database.", + "format": "password" + }, + "query": { + "type": "string", + "title": "Query", + "description": "The query to execute against the Snowflake Database." + }, + "databaseName": { + "type": "string", + "title": "Database Name", + "description": "The name of the Snowflake Database." + } + } + } +} \ No newline at end of file