13 điểm bởi GN⁺ 2024-03-23 | 1 bình luận | Chia sẻ qua WhatsApp

DuckDB nổi lên như một jq mới

  • Dự án DuckDB là một cơ sở dữ liệu kiểu như SQLite dành cho các ứng dụng dữ liệu, bao gồm khả năng nhập nhiều định dạng dữ liệu khác nhau mà không cần phụ thuộc bổ sung.
  • Có thể đọc và phân tích trực tiếp tệp JSON thành bảng trong cơ sở dữ liệu, và điều này cũng áp dụng cho nhiều định dạng khác.
  • Khi làm việc với JSON, thông thường người ta dùng jq, nhưng vì quen với SQL hơn là cú pháp jq phức tạp, nên dùng DuckDB sẽ thuận tiện hơn.
  • Ví dụ, có thể dùng GitHub API để lấy dữ liệu JSON về thông tin kho lưu trữ của tổ chức golang, sau đó dễ dàng thực hiện bằng SQL để lấy thống kê về các loại giấy phép mã nguồn mở.
  • Việc viết câu lệnh SQL bằng DuckDB có thể thực hiện dễ dàng ngay cả khi không cần tra tài liệu, và nó sử dụng cú pháp tương tự các hàm JSON của PostgreSQL.
  • DuckDB cũng hỗ trợ xuất JSON, và nếu cần thì có thể dùng jq để định dạng đẹp kết quả.
  • DuckDB không chỉ nhập được JSON mà còn hỗ trợ nhiều định dạng dữ liệu như CSV, parquet, tệp Excel, v.v.
  • Nếu không cần lưu trữ dữ liệu lâu dài, có thể truy vấn dữ liệu mà không cần tạo bảng.
  • DuckDB có thể đọc JSON trực tiếp không chỉ từ tệp cục bộ mà còn từ URL.

Ý kiến của GN⁺

  • DuckDB có thể là một công cụ thú vị đối với những người thường xuyên làm các công việc liên quan đến phân tích dữ liệu. Đặc biệt, với những ai quen dùng SQL, đây có thể là một lựa chọn thay thế mạnh mẽ để xử lý dữ liệu JSON dễ dàng.
  • Việc DuckDB có thể đọc trực tiếp dữ liệu JSON giúp đơn giản hóa quá trình tiền xử lý dữ liệu và mang lại lợi thế là giảm bớt các bước chuyển đổi dữ liệu riêng biệt khi xây dựng pipeline dữ liệu.
  • Nếu việc sử dụng DuckDB trở nên phổ biến hơn, so với các công cụ phức tạp hiện có cho phân tích và xử lý dữ liệu, nó có thể giúp giảm độ dốc học tập và nâng cao năng suất.
  • Tuy nhiên, nếu DuckDB vẫn chưa được biết đến rộng rãi hoặc chưa có đủ hỗ trợ từ cộng đồng, người dùng có thể gặp khó khăn trong việc tìm giải pháp khi đối mặt với vấn đề.
  • Các dự án mã nguồn mở khác cung cấp tính năng tương tự DuckDB gồm có Apache Drill hoặc PrestoDB, và chúng cũng hỗ trợ truy vấn SQL trên các tập dữ liệu lớn.

1 bình luận

 
GN⁺ 2024-03-23
Ý kiến trên Hacker News
  • Sự kết hợp giữa jq và các công cụ shell cơ bản

    • Cú pháp và mô hình dữ liệu của jq rất thanh lịch và mạnh mẽ, nhưng thư viện chuẩn còn thiếu và có một số điểm gượng gạo trong thiết kế, khiến các tác vụ hằng ngày có thể trở nên phức tạp.
    • jq chuyển đổi dữ liệu sang văn bản theo từng dòng rất tốt, nên dễ kết hợp với các công cụ shell Unix.
    • Ví dụ, việc trích xuất giấy phép OSS từ danh sách dự án và đếm số lần sử dụng của từng loại có thể được xử lý đơn giản bằng curl ... | jq '.[].license.key' | sort | uniq -c.
  • Babashka và Clojure

    • Nếu bạn thích Lisp và Clojure, hãy thử xem Babashka.
    • Có cung cấp mã ví dụ dùng Babashka để xử lý tệp JSON, nhóm dữ liệu và đếm số lượng.
  • ClickHouse local CLI

    • ClickHouse local CLI rất nhanh trong việc phân tích và truy vấn các định dạng như JSON và CSV.
    • Nó được giới thiệu là “công cụ truy vấn JSON nhanh nhất thế giới”, một công cụ nhỏ cho phân tích dữ liệu không cần máy chủ.
  • Việc sử dụng jq, DuckDB và SQL

    • jq rất phù hợp cho các tác vụ như lọc, ánh xạ và nối dữ liệu.
    • Ví dụ, có thể dùng jq cho các việc như tìm một liên kết tải xuống cụ thể hoặc trích xuất KUBE_CONFIG của cụm Kubernetes từ trạng thái Terraform.
  • Truy vấn Google Sheets

    • Có thể truy vấn dữ liệu Google Sheets công khai theo cách tương tự SQL.
  • Structured logging bằng cơ sở dữ liệu SQLite

    • Có thể lưu các sự kiện log được tạo mỗi ngày dưới dạng đối tượng JSON, tạo chỉ mục trên các trường cụ thể và tìm kiếm bằng truy vấn SQL.
  • Benthos

    • Có thể dùng Benthos để chuyển đổi dữ liệu và di chuyển dữ liệu tới message bus, webhook và cơ sở dữ liệu.
  • Nushell

    • Nushell hữu ích cho việc thao tác dữ liệu tạm thời và các tác vụ shell thông thường.
  • pq (prql-query)

    • pq được tạo ra để giúp việc xử lý dữ liệu trong terminal trở nên dễ dàng và thú vị hơn bằng cách tận dụng DuckDB, DataFusion và PRQL.
    • Hiện dự án đang ở trạng thái lưu trữ vì khó duy trì, nhưng nếu có người muốn hợp tác thì tình hình có thể thay đổi.
  • JSON và việc sử dụng ngôn ngữ lập trình

    • So với việc xử lý JSON như một cấu trúc dữ liệu kiểu hash map trong ngôn ngữ lập trình, lợi ích của cách này không thực sự rõ ràng.
    • Nếu muốn làm việc tương tác, có thể dùng notebook hoặc REPL.