Azure SQL Edge – Synchronisation des données

Après avoir déployé Azure SQL Edge, j’ai profité des différents capteurs de température qui surveillent mon domicile pour intégrer des données dans une base créé spécifiquement sur mon instance SQL locale sur le Raspberry.

Pour aller à l’essentiel, j’ai installé un conteneur Node-Red sur un autre serveur Docker, mais j’aurais très bien pu réutiliser le moteur Moby du Raspberry hôte de ma solution Azure IoT.

Node-Red

Le but n’est pas d’expliquer en détail Node-Red, mais un petit overview est toujours intéressant, cela pourrait vous donner des idées ….

Node-Red est un outil de programmation basé sur des flux de données initié en 2013 par des employés d’IBM. Chacun des nœuds prends (ou pas, s’il s’agit de déclencheurs par exemple) des données en entrée, effectue une tâche, et potentiellement fournit un flux de données en sortie. N’hésitez pas à télécharger et à tester, cela peut fournir bien des services (qui a osé penser à l’appel de la solution de maintenance de OLA Hallengren pour des instances SQL Server Express ….).

Comme bien des projets open-source, chacun peut apporter sa contribution et développer ses propres nodes. Ainsi, si vous ne trouvez pas votre bonheur avec les composants installés par défaut, piochez dans le catalogue … C’est exactement ce que j’ai fait pour pouvoir communiquer avec mon instance Azure SQL Edge, j’ai ajouté un composant MSSQL.

Mon flux est donc extrêmement simple. Toutes les minutes, je récupère les valeurs des capteurs de température que j’insère dans la base SQL Server sur mon Raspberry.

Requêtes time-series

Une des fonctionnalités spécifiques de l’édition Edge de SQL Server est de pouvoir requêter simplement des données « groupées » par sous-ensembles au travers de la fonction SQL Date_Bucket. Cette fonction renvoie une Date Heure depuis le 1er janvier 1900.

Pour l’exemple suivant, j’ai opté pour des intervalles de temps de 10 minutes, alors que mes capteurs remontent des informations toutes les minutes.

Cela permet de lisser les données lorsque l’on n’a pas besoin d’informations très détaillée par exemple. Il est techniquement possible d’écrire une requête similaire, probablement au travers de la clause OVER, mais cela serait bien plus complexe. La fonction Date_Bucket permet de sélectionner un type d’intervalle (jour, semaine, heure, minute, seconde) mais également la portée de cet intervalle. Vraiment simple à utiliser.

Synchronisation des données vers Azure

Nous venons d’aborder le premier bénéfice de Azure SQL Edge avec sa capacité à exécuter des requêtes Time Series.

Nous allons maintenant aborder la synchronisation des données vers la base AzureSQLEdgeReplica hébergée en mode PaaS sur Azure (Single Database en mode basique pour cette démo). Azure SQL Edge peut faire office d’abonné dans une réplication transactionnelle en mode PUSH, mais cela ne sert à rien dans le cas présent puis qu’il est question de remonter des données dans une base sur Azure afin de l’exploiter hors site, pour du reporting par exemple.

Je créé également un utilisateur de base de données spécifique pour la synchronisation. Db_owner n’est pas vraiment nécessaire dans le cas présent, mais il s’agit que d’une démo.

Ne pouvant pas utiliser de mécanisme tel que le log shipping vers Azure SQL Database, ni la réplication (seulement en tant qu’abonné), Il faut alors se tourner vers le service Azure Data Sync.

La technologie se base sur des triggers afin de capturer les changements de données. Désolé, j’aurais préféré vous vendre quelque chose de plus sexy, mais ce n’est pas le cas.

Sur la base « destination », on va donc créer un groupe de synchronisation :

Lors de la création de ce groupe de synchronisation, je spécifie la base AzureDataSyncMetaData contenant les métadonnées nécessaires au fonctionnement de la solution.
Cette base a été créée pour un test précédent. Elle peut en effet servir à différents groupes de synchronisation.
Ensuite je spécifie la fréquence de synchronisation et le vainqueur en cas de conflit un peu comme une réplication de fusion en somme.

Une fois le groupe créé, il faut alors ajouter un membre (par rapport au modèle Hub And Spoke de Azure Data Sync). Dans notre cas, il s’agit d’ajouter l’instance Azure SQL Edge qui fonctionne sur le Raspberry Pi.

Si vous n’avez pas créé d’agent SQL Azure Data Sync, c’est le moment, sinon, vous pouvez utiliser un agent existant.

<Configuration de Microsoft SQL Data Sync>

Si vous n’avez pas encore créé votre agent, il faut :

  • Télécharger l’agent
  • Installer l’agent et fournir un login Windows lui permettant de s’exécuter
  • Sur le portail Azure : générer Azure une clé (toujours sur le même écran qui vous permet de créer un nouvel agent)
  • Sur l’application Agent SQL Data Sync : soumettre la clé copiée depuis le portail et fournir un Login SQL permettant de se connecter à la base Azure contenant les métadonnées (SQLDataSyncUser dans mon cas)
  • Sur l’application Agent SQL Data Sync : Enregistrer une connexion vers l’instance SQL Server que l’on souhaite synchroniser. Ici, il s’agit donc de Azure SQL Edge qui tourne sur le Raspberry

Une fois terminé, vous pouvez valider la connectivité avec le service de synchronisation sur Azure en cliquant sur Ping Sync Service.

</Configuration de Microsoft SQL Data Sync>

Sur le portail vous pouvez donc sélectionner l’agent de synchronisation ainsi qu’indiquer quel est le sens de synchronisation. Nous souhaitons pousser les données vers Azure, donc « To The hub » afin de recopier els données vers la base AzureSQLEdgeReplica.

A présent 2 bases sont répertoriées dans la topologie, la base SQL Azure et la base locale du Raspberry. Cliquer sur Tables afin d’ajouter les tables participant au process de synchronisation. Attention, contrainte de clé primaire obligatoire pour pouvoir synchroniser.

En fonction des données à remonter vers Azure et de l’intervalle de synchronisation choisi au niveau du sync group, vous devez voir arriver vos données sur Azure

Ce que nous pouvons vérifier au travers de SSMS

Les données sont à présent présentes sur Azure, prêtes à être exploitées.

Happy Azure SQL Edge !

A propos Christophe

Consultant SQL Server Formateur certifié Microsoft MVP SQL Server MCM/MCSM SQL Server
Cet article, publié dans Azure, Containers, Docker, IoT, Linux, SQL Server, est tagué , . Ajoutez ce permalien à vos favoris.

2 commentaires pour Azure SQL Edge – Synchronisation des données

  1. Ping : Azure Logic App – Insérer des données dans SQL Azure et CosmosDB | Christophe LAPORTE – Consultant SQL Server

  2. Ping : NAS Synology – Exécuter SQL Server | Christophe LAPORTE – Consultant SQL Server

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s