Les semantics layers, une couche d'uniformisation indispensable
Une semantic layer, ou couche sémantique, est un niveau d'abstraction qui transforme les données en informations accessibles et compréhensibles, orientées vers un domaine d'activité, pour des utilisateurs sans expertise technique.
Située au-dessus des données techniques, elle sert de pont entre les données complexes produites par les équipes data et des informations lisibles et centrées sur le métier, facilement exploitables. Les informations sont disponibles pour les utilisateurs finaux sous forme de tables dans une base de données ou via une API.
Pour plus d’informations sur les semantic layers, leur utilité et leurs cas d’utilisation, nous vous invitons à lire notre article dédié “Les semantic layers (couches sémantiques) : Le référentiel pour vos applications IA et Analytics".
Cube.js, un acteur incontournable
Cube.js est un framework open-source agissant comme une semantic layer et permettant de construire des applications web analytics.
Cet outil offre aux Data Engineers et développeurs la possibilité d’accéder, de modéliser et d’agréger de la data stockée dans une ou plusieurs sources de données. L’objectif est ensuite de mettre à disposition d’application la data agrégée.
Contrairement à un grand nombre de solutions qui proposent une couche sémantique couplée à un outil de visualisation (comme Looker par exemple), Cube.js est un framework indépendant découplé de tout outil BI. Cette approche que l’on appelle headless est au cœur de l'architecture de Cube.js et permet une grande flexibilité dans la manière dont les données sont interrogées, traitées et affichées.
En plus de cela, Cube.js offre la possibilité de se connecter à plusieurs sources de données différentes et de les associer au niveau de la couche de mise en cache, ce qui est une approche très différente de celle des moteurs de requêtes fédérées. Cela permet d’améliorer les performances, l'évolutivité en gérant plus efficacement les pics de charge, la flexibilité et la consistance des données.
L’architecture de Cube.js
Cube.js adopte une approche similaire à la plupart des applications web modernes, qui sont structurées autour d'une séparation claire entre le frontend et le backend, ce dernier étant lui-même fragmenté en plusieurs services suivant une architecture de microservices.
Ainsi, vous pouvez exécuter le backend de Cube.js en tant que service assurant la gestion de la connexion à la base de données, la gestion de la file d'attente des requêtes, la mise en cache et la pré-agrégation. Ce backend fournira également une API destinée au frontend, facilitant ainsi la création de visualisations et l'implémentation de fonctionnalités analytiques.
Les services de Cube.js
Selon Cube.js, toute couche sémantique doit impérativement proposer quatre services, qu’ils mettent bien sûr à disposition via leur framework.
Data Modeling
Le cadre de modélisation de données Cube.js permet aux équipes de données de centraliser les modèles de données, facilitant l'utilisation ultérieure par des outils BI, des applications d'analytique intégrée ou des agents IA. Cette approche promeut un principe DRY (Don’t Repeat Yourself) en minimisant la redondance de modélisation de données à travers différents niveaux de présentation.
Cube.js privilégie une approche code-first, où les modèles sont définis en YAML ou JavaScript, gérés via un système de versioning.
Cube.js vous fait manipuler des entités métier appelées cubes, et des views, servant de façades utilisables par les consommateurs pour interroger les données.
Access Control
En centralisant l'accès aux données dans la semantic layer, elle devient un point stratégique pour appliquer des politiques de contrôle d'accès. Avec Cube.js, les équipes peuvent utiliser Python ou JavaScript pour établir des règles d'accès ou des contrôles par ligne par exemple.
Caching
La couche sémantique agit comme un tampon, protégeant les sources de données de charges superflues grâce au caching. Cube.js utilise des pré-agrégations pour faciliter le caching, permettant aux équipes de définir des tables de synthèse qui sont automatiquement mises à jour dans Cube.js Store. Cette approche accélère les requêtes et réduit significativement les coûts de requêtes.
APIs
Pour ne pas dépendre d’outils spécifiques et assurer une interopérabilité totale, la semantic layer doit s’appuyer sur des protocoles existants et largement utilisés. Pour cette raison, Cube.js met sa donnée à disposition via une API REST, GraphQL et SQL.
Les cas d’usage de Cube.js
La prise en main et les performances de Cube.js en font un outil incontournable pour de nombreux cas d’usage. Un des grands avantages de Cube.js est que la solution s'intègre parfaitement avec les outils de la Modern Data Stack.
Nous vous présentons ci-dessous quelques cas d'utilisation.
Embedded analytics
Imaginons un fournisseur de SaaS spécialisé dans la création de site e-commerce, souhaitant fournir à ses clients des analyses et du reporting au travers de tableaux de bord, tout en gardant un contrôle total sur les visualisations proposées et leur design.
Cube.js pourrait alors être utilisé comme couche sémantique afin de requêter et de modéliser les données stockées en base et de mettre à disposition des développeurs frontend les données pré-agrégées sous la forme de endpoint grâce à l’API REST. Pour respecter des contraintes de confidentialité entre les clients, les données des clients peuvent être séparées au niveau du datawarehouse en variabilisant les projets et tables GCP requêtés par Cube.js et au niveau du cache de Cube.js.
Connected BI
De nombreuses entreprises sont confrontées à des incohérences de valeurs de KPIs entre leurs différents dashboards (parfois répartis sur plusieurs outils de visualisation). Pour pallier cela, la solution est d'uniformiser et de centraliser le traitement des données car ces divergences sont souvent dues à l’éparpillement des transformations et la multitude de sources de données.
Une solution efficace et robuste pourrait alors être l'implémentation de Cube.js en tant que couche sémantique. Cube.js permettrait alors de standardiser les transformations de données et d'assurer une source unique de vérité pour tous les KPIs. Cube.js serait ensuite l’unique référentiel alimentant l’intégralité des dashboards, résolvant ainsi le problème des incohérences et améliorant significativement la fiabilité des analyses.
LLM and AI semantic layer
Les couches sémantiques sont très largement utilisées dans le domaine de l’Intelligence Artificielle pour limiter les phénomènes d’hallucination et de "garbage in, garbage out" rencontrés par les modèles LLM. En effet, si les humains ont du mal à traiter des données incohérentes et désorganisées, les LLM ne feront qu'amplifier cette confusion et fourniront des réponses incorrectes.
Pour fonctionner correctement et réaliser des actions fiables, les modèles LLM doivent disposer d'un contexte suffisant et comprendre la sémantique des données qu'ils traitent. En résumé, les LLM ont besoin d'une couche sémantique. La couche sémantique organise les données en définitions business significatives, permettant ensuite de réaliser des requêtes sur ces définitions plutôt que directement sur la base de données
Dans un prochain article, nous mettrons en pratique la théorie en déroulant un projet de modélisation et visualisation via Cube.js et Apache echarts.
SI vous êtes confrontés à des problématiques similaires ou souhaitez implémenter des projets IA et d’embedded analytics, contactez-nous !