This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-kamelets-examples.git


The following commit(s) were added to refs/heads/main by this push:
     new 48f6fcf  Added an example of Snowflake source and sink (#59)
48f6fcf is described below

commit 48f6fcf811a668ea105cf86c79e1d7630e361966
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Thu Feb 15 11:04:24 2024 +0100

    Added an example of Snowflake source and sink (#59)
    
    Signed-off-by: Andrea Cosentino <anco...@gmail.com>
---
 jbang/snowflake-migration/README.adoc              | 122 +++++++++++++++++++++
 jbang/snowflake-migration/application.properties   |   5 +
 .../snowflake-to-snowflake.yaml                    |  40 +++++++
 3 files changed, 167 insertions(+)

diff --git a/jbang/snowflake-migration/README.adoc 
b/jbang/snowflake-migration/README.adoc
new file mode 100644
index 0000000..9ab3f19
--- /dev/null
+++ b/jbang/snowflake-migration/README.adoc
@@ -0,0 +1,122 @@
+== Snowflake migration
+
+In this sample you'll use a Snowflake instance from trial account.
+
+We are moving data between two tables, by using snowflake source and snowflake 
sink Kamelets.
+
+=== Install JBang
+
+First install JBang according to https://www.jbang.dev
+
+When JBang is installed then you should be able to run from a shell:
+
+[source,sh]
+----
+$ jbang --version
+----
+
+This will output the version of JBang.
+
+To run this example you can either install Camel on JBang via:
+
+[source,sh]
+----
+$ jbang app install camel@apache/camel
+----
+
+Which allows to run CamelJBang with `camel` as shown below.
+
+=== Setup Snowflake
+
+First of all you'll need a trial account for Snowflake.
+
+You can have one by looking at https://signup.snowflake.com/
+
+The username and password will be the same for connecting to your database.
+
+=== Create your database
+
+Access to your Snowflake instance by using the link sent to you by email.
+
+Once logged-in, follow Data -> Database
+
+Click on Create Database and choose a name. I choose "Migration".
+
+Now we can create a table.
+
+Select the Public Schema and then click on Create. Select Table and standard.
+
+In the dialog box copy the following SQL code.
+
+[source,sh]
+----
+create or replace TABLE MIGRATION.PUBLIC.ACTIVE_SUPPLIERS (
+       ID NUMBER(38,0) autoincrement start 1 increment 1 order,
+       PHONE VARCHAR(100) NOT NULL,
+       NAME VARCHAR(100) NOT NULL,
+       ACTIVE BOOLEAN DEFAULT TRUE
+);
+----
+
+In the example we are going to copy some columns of the first 100 tuples of 
the table "SUPPLIER" in the SNOWFLAKE_SAMPLE_DATA database from the schema 
TPCH_SF1000.  
+
+The SNOWFLAKE_SAMPLE_DATA contains some samples to be used and it is provided 
by default.
+
+Don't forget to place the correct username, password and instance url in the 
application.properties file before running.
+
+=== How to run
+
+Then you can run this example using:
+
+[source,sh]
+----
+$ jbang -R=--add-opens -R=java.base/java.nio=ALL-UNNAMED 
-Dcamel.jbang.version=4.4.0-SNAPSHOT camel@apache/camel run 
--local-kamelet-dir=<path_to_local_kamelet_dir> snowflake-log.yaml
+----
+
+In the log you should see:
+
+[source,sh]
+----
+2024-02-15 10:46:35.437  INFO 21381 --- [           main] 
el.impl.engine.AbstractCamelContext : Apache Camel 4.4.0-SNAPSHOT 
(snowflake-log) is starting
+2024-02-15 10:46:35.707  INFO 21381 --- [           main] 
g.apache.camel.main.BaseMainSupport : Property-placeholders summary
+2024-02-15 10:46:35.707  INFO 21381 --- [           main] 
g.apache.camel.main.BaseMainSupport :     [snowflake-sink.kamelet.yaml]  
query=INSERT INTO IDENTIFIER('"MIGRATION"."PUBLIC"."ACTIVE_SUPPLIERS"') (name, 
phone) VALUES (:#S_NAME, :#S_PHONE);
+2024-02-15 10:46:35.708  INFO 21381 --- [           main] 
g.apache.camel.main.BaseMainSupport :     [application.properties]       
insert_query=INSERT INTO IDENTIFIER('"MIGRATION"."PUBLIC"."ACTIVE_SUPPLIERS"') 
(name, phone) VALUES (:#S_NAME, :#S_PHONE);
+2024-02-15 10:46:35.708  INFO 21381 --- [           main] 
g.apache.camel.main.BaseMainSupport :     [snowflake-sink.kamelet.yaml]  
dsBean=dsBean-2
+2024-02-15 10:46:35.708  INFO 21381 --- [           main] 
g.apache.camel.main.BaseMainSupport :     [nowflake-source.kamelet.yaml] 
delay=90000
+2024-02-15 10:46:35.708  INFO 21381 --- [           main] 
g.apache.camel.main.BaseMainSupport :     [nowflake-source.kamelet.yaml] 
databaseName="SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1000"
+2024-02-15 10:46:35.708  INFO 21381 --- [           main] 
g.apache.camel.main.BaseMainSupport :     [snowflake-sink.kamelet.yaml]  
password=xxxxxx
+2024-02-15 10:46:35.708  INFO 21381 --- [           main] 
g.apache.camel.main.BaseMainSupport :     [snowflake-sink.kamelet.yaml]  
instanceUrl=XXXXX.snowflakecomputing.com
+2024-02-15 10:46:35.708  INFO 21381 --- [           main] 
g.apache.camel.main.BaseMainSupport :     [snowflake-sink.kamelet.yaml]  
username=xxxxxx
+2024-02-15 10:46:35.709  INFO 21381 --- [           main] 
g.apache.camel.main.BaseMainSupport :     [log-sink.kamelet.yaml]        
showHeaders=true
+2024-02-15 10:46:35.709  INFO 21381 --- [           main] 
g.apache.camel.main.BaseMainSupport :     [log-sink.kamelet.yaml]        
showStreams=true
+2024-02-15 10:46:35.734  INFO 21381 --- [           main] 
el.impl.engine.AbstractCamelContext : Routes startup (started:4)
+2024-02-15 10:46:35.734  INFO 21381 --- [           main] 
el.impl.engine.AbstractCamelContext :     Started route1 
(kamelet://snowflake-source)
+2024-02-15 10:46:35.734  INFO 21381 --- [           main] 
el.impl.engine.AbstractCamelContext :     Started snowflake-source-1 
(sql://select%20*%20from%20IDENTIFIER('%22SNOWFLAKE_SAMPLE_DATA%22.%22TPCH_SF1000%22.%22SUPPLIER%22')%20limit%20100;)
+2024-02-15 10:46:35.734  INFO 21381 --- [           main] 
el.impl.engine.AbstractCamelContext :     Started log-sink-2 (kamelet://source)
+2024-02-15 10:46:35.734  INFO 21381 --- [           main] 
el.impl.engine.AbstractCamelContext :     Started snowflake-sink-3 
(kamelet://source)
+2024-02-15 10:46:35.735  INFO 21381 --- [           main] 
el.impl.engine.AbstractCamelContext : Apache Camel 4.4.0-SNAPSHOT 
(snowflake-log) started in 296ms (build:0ms init:0ms start:296ms)
+2024-02-15 10:46:42.220  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346333,"S_NAME":"Supplier#003346333","S_ADDRESS":"5tGk2xdvv42rkYDES3ZZTI8FrA26nmQEbOaS","S_NATIONKEY":12,"S_PHONE":"22-217-761-8482","S_ACCTBAL":8458.14,"S_COMMENT":"carefully
 silent deposits. final asymptotes wake final, ironic theodolit [...]
+2024-02-15 10:46:43.326  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346334,"S_NAME":"Supplier#003346334","S_ADDRESS":"PtgU5b81j,h,8drTYsOnGFWW8Xd,MN","S_NATIONKEY":18,"S_PHONE":"28-588-844-2420","S_ACCTBAL":1017.57,"S_COMMENT":"unts
 haggle carefully blithely even pinto beans. furiously regular braids atop [...]
+2024-02-15 10:46:45.470  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346335,"S_NAME":"Supplier#003346335","S_ADDRESS":"kgiufEgTbq7JmzAIRzzCiMMsGx0","S_NATIONKEY":19,"S_PHONE":"29-120-761-7935","S_ACCTBAL":6263.93,"S_COMMENT":"al
 deposits unwind quickly along the slyly ironic deposits. fluffily unusual depe 
[...]
+2024-02-15 10:46:47.165  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346336,"S_NAME":"Supplier#003346336","S_ADDRESS":"9Zkmw 
H9t7D","S_NATIONKEY":6,"S_PHONE":"16-285-179-3972","S_ACCTBAL":5878.02,"S_COMMENT":"ly
 regular deposits. platelets nag slyly. furiously silent dependencies "}]
+2024-02-15 10:46:48.399  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346337,"S_NAME":"Supplier#003346337","S_ADDRESS":"Esdxc4BoiAEINTZq
 
IdPn","S_NATIONKEY":4,"S_PHONE":"14-284-655-6472","S_ACCTBAL":9914.23,"S_COMMENT":"instructions.
 blithely express depo"}]
+2024-02-15 10:46:49.813  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346338,"S_NAME":"Supplier#003346338","S_ADDRESS":"n3rKtK6eEgv,8STgnnqoyppIOxm,DmYrJkBwWIJ","S_NATIONKEY":19,"S_PHONE":"29-175-701-9013","S_ACCTBAL":9466.25,"S_COMMENT":"ns
 about the regular, unusual requests boost slyly carefully even req"}]
+2024-02-15 10:46:51.642  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346339,"S_NAME":"Supplier#003346339","S_ADDRESS":"dR1WqS30y3u 
OYlLDFMpy3LO18mIgYh9dPJPDUCf","S_NATIONKEY":12,"S_PHONE":"22-757-690-4310","S_ACCTBAL":4274.54,"S_COMMENT":"te
 slyly along the regular, even deposits. special, ironic packages  [...]
+2024-02-15 10:46:53.135  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346340,"S_NAME":"Supplier#003346340","S_ADDRESS":"h5YSREwM9wFIMDBhU9nu3nqCiJS","S_NATIONKEY":11,"S_PHONE":"21-622-273-2615","S_ACCTBAL":-817.56,"S_COMMENT":"ss
 courts haggle carefully. blithely even instructions cajole slyly throughout th 
[...]
+2024-02-15 10:46:54.651  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346341,"S_NAME":"Supplier#003346341","S_ADDRESS":"v5rHjHMUXRg7CDOpxwSIK3uYbT","S_NATIONKEY":12,"S_PHONE":"22-398-290-8394","S_ACCTBAL":7203.36,"S_COMMENT":"ly.
 slyly special deposits sleep against the furiousl"}]
+2024-02-15 10:46:56.015  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346342,"S_NAME":"Supplier#003346342","S_ADDRESS":"yI7G4124RnWZEsRn
 
alv0hhaKaM4XMYo68n1","S_NATIONKEY":6,"S_PHONE":"16-296-751-2242","S_ACCTBAL":9831.26,"S_COMMENT":"gular,
 ironic courts. carefully ironic theodolites across the slyly pendin"}]
+2024-02-15 10:46:57.195  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346343,"S_NAME":"Supplier#003346343","S_ADDRESS":"nk7x5KDK8Wn1LlQaEPQy","S_NATIONKEY":2,"S_PHONE":"12-258-920-6096","S_ACCTBAL":1078.09,"S_COMMENT":"ter
 the bold, final platelets. unusual, ironic accounts cajole busily. qui"}]
+2024-02-15 10:46:58.246  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346344,"S_NAME":"Supplier#003346344","S_ADDRESS":"IzNNeupXVWWc4bPpZqX58wPf","S_NATIONKEY":11,"S_PHONE":"21-713-532-9184","S_ACCTBAL":424.13,"S_COMMENT":"ole
 slyly among the furiously idle platelets. even, f"}]
+2024-02-15 10:47:00.694  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346345,"S_NAME":"Supplier#003346345","S_ADDRESS":"bLje1WndAkAF1rS","S_NATIONKEY":10,"S_PHONE":"20-944-748-7807","S_ACCTBAL":9245.06,"S_COMMENT":"s,
 ironic packages: quiet, regular depths wake carefully. silent dolphins are 
furious"}]
+2024-02-15 10:47:01.484  INFO 21381 --- [%20limit%20100;] log-sink             
               : Exchange[ExchangePattern: InOnly, Headers: 
{Content-Type=application/json}, BodyType: 
org.apache.camel.converter.stream.InputStreamCache, Body: 
{"S_SUPPKEY":3346346,"S_NAME":"Supplier#003346346","S_ADDRESS":"OJeOpq1wxs4a","S_NATIONKEY":21,"S_PHONE":"31-611-938-6218","S_ACCTBAL":4741.06,"S_COMMENT":"y
 express excuses across the quickly final ideas use furiously unusual t"}]
+----
+
+=== Help and contributions
+
+If you hit any problem using Camel or have some feedback, then please
+https://camel.apache.org/community/support/[let us know].
+
+We also love contributors, so
+https://camel.apache.org/community/contributing/[get involved] :-)
+
+The Camel riders!
diff --git a/jbang/snowflake-migration/application.properties 
b/jbang/snowflake-migration/application.properties
new file mode 100644
index 0000000..2ecf7ab
--- /dev/null
+++ b/jbang/snowflake-migration/application.properties
@@ -0,0 +1,5 @@
+query=select * from 
IDENTIFIER('"SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1000"."SUPPLIER"') limit 100;
+insert_query=INSERT INTO IDENTIFIER('"MIGRATION"."PUBLIC"."ACTIVE_SUPPLIERS"') 
(name, phone) VALUES (:#S_NAME, :#S_PHONE);
+sf_username=<username>
+sf_password=<password>
+sf_instance_url=<instance_url>
diff --git a/jbang/snowflake-migration/snowflake-to-snowflake.yaml 
b/jbang/snowflake-migration/snowflake-to-snowflake.yaml
new file mode 100644
index 0000000..382e345
--- /dev/null
+++ b/jbang/snowflake-migration/snowflake-to-snowflake.yaml
@@ -0,0 +1,40 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+- route:
+    from:
+      uri: "kamelet:snowflake-source"
+      parameters:
+        instanceUrl: "{{sf_instance_url}}"
+        databaseName: '"SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1000"'
+        query: "{{query}}"
+        username: "{{sf_username}}"
+        password: "{{sf_password}}"
+        delay: 90000
+      steps:
+      - to: 
+          uri: "kamelet:log-sink"
+          parameters:
+            showStreams: true
+            showHeaders: true
+      - to: 
+          uri: "kamelet:snowflake-sink"
+          parameters:
+            instanceUrl: "{{sf_instance_url}}"
+            query: "{{insert_query}}"
+            username: "{{sf_username}}"
+            password: "{{sf_password}}" 

Reply via email to