- À la fois langage de modélisation sémantique et langage de requête, Malloy exécute les requêtes en s’appuyant sur les moteurs SQL existants
- Les requêtes Malloy écrites sont compilées en SQL optimisé pour la base de données utilisée, puis exécutées
- Lors de sa présentation en 2022, c’était un langage expérimental au sein de Looker ; il a depuis été transféré séparément sous malloydata et a atteint 2,5k stars
- Les backends pris en charge sont passés des deux options BigQuery et Postgres de l’époque à BigQuery/Snowflake/PostgreSQL/MySQL/Trino/Presto, avec en plus une prise en charge native de DuckDB
- Nommage concis et réutilisabilité : évite d’écrire des définitions répétitives, fait gagner du temps et permet d’affiner les modèles de manière itérative au fil des requêtes
- Empêche les résultats qui semblent corrects mais sont faux : prévient les problèmes où une requête apparemment juste produit des valeurs erronées
- Nested Queries (requêtes imbriquées) : crée facilement des vues hiérarchiques riches des données ; la requête elle-même fonctionne comme un composant réutilisable, sans réécriture nécessaire pour générer la hiérarchie
- Symmetric Aggregates (agrégats symétriques) : évite automatiquement les mauvaises agrégations de sommes/moyennes/comptages, et résout au niveau du langage les problèmes de pièges Fan/Chasm
- Freedom and Safety (liberté et sécurité) : combine toute la flexibilité de SQL avec la sécurité d’un modèle de données sémantique, contrairement à LookML qui apporte la sécurité mais limite la liberté
- Fournit une extension VS Code : prise en charge de la construction de modèles, des requêtes et transformations, de la visualisation simple et de la création de dashboards, avec essai direct dans le navigateur
- Exemple de syntaxe : requête agrégeant les vols au départ de SFO par compagnie aérienne ; plus concise que la structure SELECT/COUNT/AVG/GROUP BY de SQL, elle est automatiquement triée selon le premier agrégat, sans besoin de
ORDER BYrun: bigquery.table('malloydata-org.faa.flights') -> { where: origin = 'SFO' group_by: carrier aggregate: flight_count is count() average_flight_time is flight_time.avg() }
1 commentaires
Je ne sais pas si c’est parce que je suis habitué au SQL, mais je ne suis pas vraiment d’accord pour dire que c’est plus concis que le SQL.
Le LINQ de C# me paraît plus pratique, et il prend aussi en charge davantage de types de bases de données.