- Sebagai bahasa pemodelan semantik sekaligus bahasa kueri, Malloy memiliki sifat ganda: menjalankan kueri dengan menggunakan mesin SQL yang sudah ada
- Kueri Malloy yang ditulis akan dikompilasi menjadi SQL yang dioptimalkan untuk DB yang digunakan lalu dijalankan
- Saat diperkenalkan pada 2022, Malloy adalah bahasa eksperimental di bawah Looker, tetapi kini telah dipindahkan terpisah ke malloydata dan tumbuh hingga sekitar 2,5k Star
- Backend yang didukung juga berkembang dari dua jenis, BigQuery dan Postgres, menjadi BigQuery/Snowflake/PostgreSQL/MySQL/Trino/Presto, serta menambahkan dukungan native DuckDB
- Penamaan ringkas dan reusability: menghemat waktu dengan menghindari penulisan definisi berulang, serta menyempurnakan model secara iteratif sambil membuat kueri
- Mencegah hasil yang tampak benar tetapi sebenarnya salah: menghindari masalah ketika kueri yang terlihat benar menghasilkan nilai yang keliru
- Nested Queries (kueri bersarang): memudahkan pembuatan tampilan hierarkis data yang kaya; kueri itu sendiri berfungsi sebagai komponen yang dapat digunakan ulang, sehingga tidak perlu menulis ulang untuk membangun hierarki
- Symmetric Aggregates (agregasi simetris): otomatis mencegah salah agregasi seperti jumlah/rata-rata/hitungan, dan menyelesaikan masalah join trap (Fan/Chasm Trap) di tingkat bahasa
- Freedom and Safety (kebebasan dan keamanan): menggabungkan fleksibilitas penuh SQL dengan keamanan model data semantik, berbeda dengan LookML yang memberikan keamanan tetapi membatasi kebebasan
- Menyediakan ekstensi VS Code: mendukung pembangunan model, kueri dan transformasi, visualisasi sederhana, serta pembuatan dashboard; bisa dicoba langsung di browser
- Contoh sintaks: kueri yang mengagregasi penerbangan dari SFO berdasarkan maskapai; lebih ringkas daripada struktur SELECT/COUNT/AVG/GROUP BY di SQL, dan otomatis diurutkan berdasarkan aggregate pertama sehingga tidak memerlukan
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 komentar
Mungkin karena saya sudah terbiasa dengan SQL, tapi saya kurang setuju kalau ini lebih ringkas daripada SQL.
LINQ di C# terlihat lebih nyaman, dan jenis DB yang didukung juga lebih banyak