Dans ce point nous allons voir comment connecter WSO2 Entreprise Integration à Snowflake. Avant d’aborder le développement, revenons sur quelques fondamentaux.

Qu’est-ce que Snowflake ?

 Il s’agit d’un entrepôt de données (Data Warehouse) conçu exclusivement pour le Cloud. Un entrepôt de données est une base de données qui regroupe une partie ou l’ensemble des données fonctionnelles d’une entreprise. Son but est de fournir des données qui servent de référence unique pour permettre à l’entreprise de prendre des décisions par le biais de statistiques et d’outils de reporting.

Mais revenons-en à Snowflake.

Sa différence majeure : son architecture. Snowflake repose sur une architecture brevetée multi-cluster avec partage des données. Son système intégré est doté d’une scalabilité pleinement indépendante en matière de calcul, de stockage et de services.

Snowflake propose une prise en charge complète des bases de données relationnelles au sein d’une solution intégrée pour les données structurées telles que les fichiers et tableaux CSV, comme pour les données semi-structurées telles que JSON, Avro…

Snowflake fonctionne en mode SaaS, qui ne nécessite aucune gestion et propose des capacités de calcul, de stockage, et des services dans le Cloud séparés, évolutifs, et pouvant être modifiés de manière indépendante. La gestion des métadonnées est également automatique.

WSO2 Enterprise Integration.

Quant à WSO2 Enterprise Integration, il s’agit d’un outil phare et open-source bien connu de nos équipes. Il consiste à réunir au sein d’une même plateforme vos outils initialement séparés pour les projets informatiques en « cloud computing » et pour les conteneurs informatiques. Il permet aux experts en intégration d’entreprise de concevoir, adapter, et sécuriser des solutions d’intégration sophistiquées pour atteindre l’agilité des moyens numériques. Nous y reviendrons très bientôt dans un article consacré à la nouvelle version 7.0 d’Enterprise Integration.Faire communiquer WSO2 Enterprise Integration et Snowflake

Rentrons maintenant dans le vif du sujet !

Paramètres usuels de l’application

Répertoire de WSO2 : /usr/wso2ei/ qui pointe par un lien symbolique vers la version utilisée de WSO2 Entreprise integration
Répertoire des librairies : /usr/wso2ei/lib
Répertoire des DataSources : /usr/wso2ei/conf/datasources/

Opérations

Dans un premier temps il est nécessaire de télécharger le fichier “.jar du jdbc :

Le mettre dans le répertoire des librairies : /usr/wso2ei/lib

Puis redémarrer WSO2EI :

systemctl restart wso2ei

 

 

Une fois que WSO2 entreprise intégration est redémarré, ouvrir l’application.

Puis :

  1. Cliquez sur l’onglet “Configure”
  2. Cliquez sur le menu “Datasources”

Enfin ajouter une Datasource en cliquant sur “Add Datasource” et le remplir comme suit

Name : test_snowflake
Description : Test connection to snowfalke
Database Provider : default
Database Engine : generic
Drivers :net.snowflake.client.jdbc.SnowflakeDriverURL : jdbc:snowflake://client.westeurope.
azure.snowflakecomputing.com/?YOUR_DATABASE
Utilisateur : YOUR_USER Mot de passe : YOUR_PASSWORD

Il ne reste plus qu’à sauvegarder et tester :

La connexion est valide !

Réalisons maintenant un DataService pour se connecter et vérifier que cela fonctionne.
Dans la requête SQL faire un count(*). Cela permet de s’affranchir des colonnes et de tout de même disposer d’un résultat :

Et voilà le travail !
<?xml version="1.0" encoding="UTF-8"?>
<data name="export" serviceNamespace="http://ws.wso2.org/dataservice" transports="http https local">
   <config enableOData="false" id="bd">
      <property name="carbon_datasource_name">test_snowflake</property>
   </config>
   <query id="selectImport" useConfig="bd">
      <sql>select count(*) from
"YOUR_DATABASE"."YOUR_SCHEMA"."YOUR_VIEW" ;</sql>
      <result element="Entry" rowName="">
         <element column="count" name="count" xsdType="string" />
      </result>
   </query>
   <operation name="opSelectImport">
      <call-query href="selectImport" />
   </operation>
</data>

 

Les informations sur SnowFlake :

https://docs.snowflake.net/manuals/user-guide/jdbcconfigure.html#jdbc-driver-connection-string

Remerciements :

Merci à Pedro qui nous a aidé en nous indiquant la meilleure configuration !

Liens importants :

La documentation sur Snowflake :
https://docs.snowflake.net/manuals/user-guide.html

Le répertoire de téléchargement du driver JDBC :

https://repo1.maven.org/maven2/net/snowflake/snowflake-jdbc/

Annexe

Si toutefois vous souhaitiez mettre le datasource dans le fichier datasources.xml

<?xml version="1.0" encoding="UTF-8"?>
<datasource>
   <name>test_Snowflake</name>
   <jndiConfig>
      <name>test_Snowflake</name>
   </jndiConfig>
   <definition type="RDBMS">
      <configuration>
         <url>jdbc:snowflake://{host:port}/?db={dbname}&amp;schema={schemaname}&amp;ssl=on</url>
         <username>XXX</username>
         <password>XXX</password>
         <driverClassName>net.snowflake.client.jdbc.SnowflakeDriver</driverClassName>
         <maxActive>50</maxActive>
         <maxWait>60000</maxWait>
         <testOnBorrow>true</testOnBorrow>
         <validationQuery>SELECT
1</validationQuery>
         <validationInterval>30000</validationInterval>
         <defaultAutoCommit>false</defaultAutoCommit>
      </configuration>
   </definition>
</datasource>