- Eine semantische Modellierungssprache und Abfragesprache mit Doppelnatur, die Abfragen über bestehende SQL-Engines ausführt
- Geschriebene Malloy-Abfragen werden in für die jeweils genutzte Datenbank optimiertes SQL kompiliert und dann ausgeführt
- Bei der Vorstellung im Jahr 2022 war es noch eine experimentelle Sprache unter Looker, inzwischen wurde es als malloydata ausgelagert und ist auf rund 2,5k Stars gewachsen
- Die unterstützten Backends wurden von damals BigQuery und Postgres auf BigQuery/Snowflake/PostgreSQL/MySQL/Trino/Presto erweitert, zusätzlich kam native DuckDB-Unterstützung hinzu
- Prägnante Benennung und Wiederverwendbarkeit: spart Zeit, indem wiederholte Definitionen vermieden werden, und verfeinert das Modell iterativ beim Abfragen
- Verhindert korrekt aussehende, aber falsche Ergebnisse: beugt Problemen vor, bei denen scheinbar richtige Abfragen zu falschen Werten führen
- Nested Queries (verschachtelte Abfragen): erzeugen mühelos reichhaltige hierarchische Ansichten von Daten; die Abfrage selbst fungiert als wiederverwendbare Komponente, sodass für die Hierarchieerstellung kein Umschreiben nötig ist
- Symmetric Aggregates (symmetrische Aggregationen): verhindert automatisch Fehlaggregationen bei Summen/Durchschnitten/Anzahlen und löst Join-Fallen wie Fan Trap und Chasm Trap auf Sprachebene
- Freedom and Safety (Freiheit und Sicherheit): kombiniert die volle Flexibilität von SQL mit der Sicherheit semantischer Datenmodelle, im Gegensatz zu LookML, das nur Sicherheit bietet und die Freiheit einschränkt
- VS-Code-Erweiterung verfügbar: unterstützt Modellaufbau, Abfragen und Transformationen sowie einfache Visualisierungen und Dashboard-Erstellung; direkt im Browser testbar
- Syntaxbeispiel: eine Abfrage, die Flüge ab SFO nach Fluggesellschaft aggregiert; kompakter als die SQL-Struktur aus SELECT/COUNT/AVG/GROUP BY und automatisch nach dem ersten Aggregate sortiert, daher ist kein
ORDER BYnötigrun: 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 Kommentare
Vielleicht liegt es daran, dass ich SQL gewohnt bin, aber dass es prägnanter als SQL sein soll, überzeugt mich nicht wirklich.
C# LINQ wirkt auf mich bequemer, und es unterstützt auch mehr Datenbanktypen.