3 poin oleh xguru 4 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • 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 BY
    run: 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