mium
Police
Drop #28··Advanced Query

Advanced Query (Datalog)

Quand une ligne de filtre ne suffit plus — des règles qui relient, déduisent et condensent

Team Mut
construit mium··Falktron, Oelde
audio··3:00
▶ Audio à venir
Transcription

Et si votre rapport ne devait pas s’assembler à partir de dix vues, mais naissait d’une seule règle — une règle qui décrit ce qui compte et se recalcule d’elle-même ? Dans les minutes qui suivent, vous entendrez où s’arrête la ligne de filtre et où commence Datalog.

Une Simple Query filtre une propriété et devient une vue. Cela suffit tant que vous vérifiez une seule chose. Mais dès que vous voulez en relier deux — les tâches ouvertes des réunions d’un trimestre, regroupées par projet — la ligne de filtre s’arrête. Elle vérifie les blocs un à un contre des critères fixes ; elle ne relie rien, ne déduit rien, ne totalise rien.

Datalog renverse la logique. Vous ne décrivez pas le chemin de recherche, vous décrivez la cible. Vous dites ce qui doit être vrai et laissez le comment au moteur. C’est le cœur de tout langage déclaratif, et la recherche en bases de données documente cet avantage de manière constante depuis les fondements de la théorie Datalog.

Une règle a deux parties. L’une dit quelle grandeur vous voulez voir. L’autre énumère les conditions, ligne par ligne. Des variables relient les lignes — lorsqu’une même variable revient plus d’une fois, c’est une jointure, un pont entre les blocs. C’est précisément là qu’une ligne de filtre devient un rapport relié.

Trois briques vous portent loin. D’abord, la règle décrit la cible, non le chemin. Ensuite, chaque ligne de condition est un critère, et les variables communes les relient en jointure. Enfin, les agrégats condensent l’ensemble des résultats — vous comptez, vous sommez, vous regroupez, et de nombreux blocs deviennent un nombre par groupe.

Cette puissance a un prix. Une règle non bornée ou récursive peut parcourir le fonds plusieurs fois. Posez des bornes, vérifiez le tempo, et n’enregistrez une règle comme vue permanente qu’une fois qu’elle reste assez rapide. Et sans propriétés propres, aucune règle ne mord — la tenue des données reste le prérequis silencieux.

Une question honnête pour finir : combien de vos rapports reconstruisez-vous chaque semaine parce qu’ils relient plusieurs critères qu’aucune ligne de filtre ne peut saisir ? Si le nombre est élevé, la courbe d’apprentissage plus raide en vaut la peine. Décrit une fois comme une règle, votre deuxième cerveau construit le rapport — et le tient à jour pendant que vous réfléchissez.

Une Simple Query filtre une propriété et devient une vue. Mais dès que vous voulez relier deux choses — les tâches ouvertes issues des réunions d'un trimestre, regroupées par projet — la ligne de filtre s'arrête. Datalog commence précisément là : vous décrivez la relation sous forme de règle, et mium déduit le reste.

Là où la ligne de filtre s'arrête

Une ligne de filtre vérifie les blocs un à un contre des critères fixes. Elle ne sait pas relier d'un bloc à l'autre, ne déduit rien et ne totalise rien. Les rapports multicritères, vous les assemblez sinon à la main depuis plusieurs vues — et vous les entretenez de même. Datalog renverse la logique : une règle qui décrit des relations, et un moteur qui l'évalue.

Anatomie d'une règle

Une règle Datalog comporte deux parties : :find dit quelle grandeur vous voulez voir, :where énumère les conditions — une par ligne. Des variables comme ?task relient les lignes ; lorsqu'une même variable revient plusieurs fois, c'est une jointure.

[:find ?task
 :where
 [?task "type" "task"]
 [?task "status" "offen"]
 [?task "von-meeting" ?m]
 [?m "tag" "q3"]]
;; offene Aufgaben aus Q3-Meetings — ein Join über ?m

5 briques pour Advanced Query

  1. La règle décrit la cible (:find), non le chemin de recherche — vous dites le quoi, pas le comment.
  2. Chaque ligne :where est une condition ; les variables communes les relient en jointure.
  3. Les agrégats condensent : count, sum, max, min, avg sur l'ensemble des résultats.
  4. Une règle est réutilisable — nommez-la, et elle devient une vue pour toute l'équipe.
  5. Poser des limites : les jointures récursives ou non bornées ont besoin d'une borne, sans quoi l'évaluation devient coûteuse.

Exemple : compter les tâches ouvertes par projet

[:find ?projekt (count ?task)
 :where
 [?task "type" "task"]
 [?task "status" "offen"]
 [?task "projekt" ?projekt]]
;; ein Report: pro Projekt die Zahl offener Aufgaben

Avant / après — Simple Query contre Datalog

CapacitéSimple QueryDatalog
Critèresune propriétéautant que voulu
Relier entre blocsnonoui (jointure par variables)
Déduire / agrégernoncount··sum··group
Réutilisablecomme vuecomme règle nommée
Courbe d'apprentissageminutesplus raide, mais plus puissante

Une question honnête

Combien de vos rapports reconstruisez-vous chaque semaine parce qu'ils relient plusieurs critères qu'aucune ligne de filtre ne peut saisir ? La réponse décide si la courbe d'apprentissage plus raide de Datalog vaut la peine pour vous — ou si une Simple Query suffit déjà.

Décrivez ce qui compte — mium calcule le reste.

Une règle, et votre deuxième cerveau construit le rapport — et le tient à jour pendant que vous réfléchissez. Pas d'export, pas d'assemblage à la main ; un partenaire qui comprend vos critères.

Réserver mon créneau··gratuit →
L’École de printemps est terminée. Voir le Jour 93 → Lancer le jeu →