3 điểm bởi xguru 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Một ngôn ngữ mô hình hóa ngữ nghĩa đồng thời là ngôn ngữ truy vấn, mang tính chất kép khi thực thi truy vấn bằng các SQL engine hiện có
  • Truy vấn Malloy được viết ra sẽ biên dịch thành SQL tối ưu cho DB đang sử dụng rồi thực thi
  • Khi được giới thiệu vào năm 2022, đây là ngôn ngữ thử nghiệm thuộc Looker, nhưng hiện đã được tách riêng thành malloydata và phát triển lên quy mô 2.5k Star
  • Backend hỗ trợ cũng đã mở rộng từ 2 loại BigQuery, Postgres khi đó lên BigQuery/Snowflake/PostgreSQL/MySQL/Trino/Presto và bổ sung hỗ trợ native cho DuckDB
  • Cách đặt tên ngắn gọn và khả năng tái sử dụng: tiết kiệm thời gian bằng cách tránh viết lặp lại các định nghĩa, đồng thời tinh chỉnh mô hình lặp đi lặp lại trong khi truy vấn
  • Ngăn chặn kết quả trông có vẻ đúng nhưng thực ra sai: phòng tránh vấn đề truy vấn nhìn bề ngoài hợp lý nhưng dẫn đến giá trị sai
  • Nested Queries (truy vấn lồng nhau): dễ dàng tạo ra các góc nhìn phân cấp phong phú của dữ liệu, bản thân truy vấn hoạt động như một thành phần có thể tái sử dụng nên không cần viết lại để tạo phân cấp
  • Symmetric Aggregates (tổng hợp đối xứng): tự động ngăn sai tổng hợp như tổng/trung bình/số lượng, giải quyết vấn đề bẫy nối (Fan/Chasm Trap) ở cấp độ ngôn ngữ
  • Freedom and Safety (tự do và an toàn): kết hợp trọn vẹn tính linh hoạt của SQL với sự an toàn của mô hình dữ liệu ngữ nghĩa, trái ngược với LookML vốn chỉ mang lại sự an toàn và hạn chế tính tự do
  • Cung cấp tiện ích mở rộng VS Code: hỗ trợ xây dựng mô hình, truy vấn·chuyển đổi, trực quan hóa đơn giản và tạo dashboard, có thể thử trực tiếp trên trình duyệt
  • Ví dụ cú pháp: truy vấn tổng hợp các chuyến bay khởi hành từ SFO theo hãng hàng không, ngắn gọn hơn cấu trúc SELECT/COUNT/AVG/GROUP BY của SQL và tự động sắp xếp theo aggregate đầu tiên nên không cần 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 bình luận

 

Có lẽ vì tôi đã quen với SQL nên không mấy đồng tình với việc nói nó ngắn gọn hơn SQL
LINQ của C# trông có vẻ tiện hơn, và cũng hỗ trợ nhiều loại DB hơn.