- Un lenguaje de modelado semántico y también de consultas, con una naturaleza dual que ejecuta consultas usando motores SQL existentes
- Las consultas escritas en Malloy se compilan a SQL optimizado para la base de datos en uso y luego se ejecutan
- Cuando se presentó en 2022, era un lenguaje experimental bajo Looker, pero ahora se separó como malloydata y ha crecido hasta alcanzar unas 2.5k estrellas
- Los backends compatibles también se expandieron desde BigQuery y Postgres en ese entonces a BigQuery/Snowflake/PostgreSQL/MySQL/Trino/Presto, con soporte nativo para DuckDB agregado
- Nomenclatura concisa y reutilización: ahorra tiempo al evitar escribir definiciones repetitivas, mientras se refina iterativamente el modelo al consultar
- Evita resultados que parecen correctos pero están mal: previene casos donde una consulta aparentemente válida termina produciendo valores incorrectos
- Nested Queries (consultas anidadas): permite crear fácilmente vistas jerárquicas ricas de los datos; la propia consulta funciona como un componente reutilizable, sin necesidad de reescribirla para generar jerarquías
- Symmetric Aggregates (agregados simétricos): evita automáticamente agregaciones erróneas en sumas/promedios/conteos y resuelve a nivel del lenguaje problemas de trampas de unión como Fan Trap y Chasm Trap
- Freedom and Safety (libertad y seguridad): combina la flexibilidad completa de SQL con la seguridad de un modelo semántico de datos, en contraste con LookML, que ofrece seguridad pero limita la libertad
- Ofrece una extensión para VS Code: ayuda a construir modelos, hacer consultas y transformaciones, además de crear visualizaciones y dashboards simples; también se puede probar directamente en el navegador
- Ejemplo de sintaxis: una consulta que agrega vuelos que salen de SFO por aerolínea; es más concisa que la estructura
SELECT/COUNT/AVG/GROUP BYde SQL y se ordena automáticamente según el primer agregado, por lo que no requiereORDER 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 comentarios
Quizá sea porque estoy acostumbrado a SQL, pero no estoy muy de acuerdo con que sea más conciso que SQL.
LINQ de C# me parece más cómodo, y además soporta más tipos de bases de datos.