[ad_1]
Các nhà phát triển phần mềm phải đảm nhiệm nhiều vai trò: từ viết mã, thiết kế hệ thống đến phân tích dữ liệu dump trong một sự cố. Hầu hết các công cụ của chúng tôi đều được tối ưu hóa cho nhiệm vụ này — để viết mã, chúng tôi có các IDE mạnh mẽ, để thiết kế hệ thống, chúng tôi có các công cụ lập sơ đồ giàu tính năng.
Đối với phân tích dữ liệu, các nhà phát triển phần mềm có công cụ tốt nhất cho công việc này không? Trong bài viết này, tôi liệt kê ba lý do chính tại sao VịtDBcơ sở dữ liệu phân tích mã nguồn mở là công cụ không thể thiếu đối với các nhà phát triển phần mềm.
Hãy tưởng tượng bạn làm việc cho một công ty giao đồ ăn với tư cách là một nhà phát triển phần mềm. Bạn nhận được một e-mail thông báo rằng có sự gia tăng đột ngột các khiếu nại của khách hàng liên quan đến thanh toán. Electronic mail bao gồm một tập tin CSV như thế này với một số đơn hàng được phân loại theo bản chất của khiếu nại. Là một nhà phát triển đang chịu áp lực, bạn có thể có xu hướng nhanh tra cứu cách phân tích tệp CSV trên StackOverflow, hướng dẫn chúng ta sử dụng awk
.
awk -F','
'NR > 1 {depend($6)++} END
{for (worth in depend) print worth, depend(worth)}'
datagenerator/adjusted_transactions.csv | kindCUSTOMER_SUPPORT_REFUND 8494
INSUFFICIENT_FUNDS 1232
MANUAL_ADJUSTMENT 162
REVERSED_PAYMENT 62815
Thật tự nhiên khi đặt một câu hỏi tiếp theo: chúng ta thấy những lỗi này thường xuyên như thế nào trên mỗi đơn hàng? Trả lời các câu hỏi lặp đi lặp lại bằng các công cụ như awk
có thể là thách thức vì cú pháp không quen thuộc của nó. Hơn nữa, nếu dữ liệu ở định dạng khác như JSON, chúng ta sẽ phải sử dụng một công cụ khác như jq
với cú pháp và cách sử dụng hoàn toàn khác biệt.
DuckDB giải quyết vấn đề cần có công cụ cụ thể cho các định dạng dữ liệu cụ thể bằng cách cung cấp giao diện SQL thống nhất cho nhiều loại tập tin. Các nhà phát triển sử dụng SQL rất thường xuyên và đó là ngôn ngữ được sử dụng để truy vấn cơ sở dữ liệu được triển khai nhiều nhất trên thế giới. Do tính phổ biến của SQL, các hệ thống dữ liệu không quan hệ đã bổ sung hỗ trợ cho việc truy cập dữ liệu bằng SQL: giống MongoDB, Tia lửaTìm kiếm đàn hồi và AWS Athena.
Quay lại tệp CSV gốc, sử dụng duckdb
và SQL chúng ta có thể dễ dàng tìm ra tần suất lỗi được báo cáo theo mỗi đơn hàng:
duckdb -c "
with per_order_counts AS (
choose
order_id, motive,
depend(transaction_id) as num_reports
from 'datagenerator/adjusted_transactions.csv'
group by 1,2
)
choose motive, avg(num_reports) AS avg_per_order_count
from per_order_counts group by 1 order by motive;"
┌─────────────────────────┬─────────────────────┐
│ motive │ avg_per_order_count │
│ varchar │ double │
├─────────────────────────┼─────────────────────┤
│ CUSTOMER_SUPPORT_REFUND │ 10.333333333333334 │
│ INSUFFICIENT_FUNDS │ 2.871794871794872 │
│ MANUAL_ADJUSTMENT │ 1.2 │
│ REVERSED_PAYMENT │ 50.57568438003221 │
└─────────────────────────┴─────────────────────┘
Giả sử ứng dụng giao đồ ăn hư cấu của chúng ta được xây dựng bằng cách sử dụng các dịch vụ vi mô. Giả sử, có một customers
dịch vụ vi mô lưu trữ thông tin người dùng trong PostgreSQL và một dịch vụ khác orders
dịch vụ siêu nhỏ lưu trữ thông tin đơn hàng trong MySQL.
Thật khó để trả lời câu hỏi liên quan đến nhiều dịch vụ vi mô sau: Người dùng VIP có bị ảnh hưởng nhiều hơn so với người dùng không phải VIP không?
Các thiết lập thông thường để giải quyết vấn đề này là sử dụng đường ống dữ liệu để tổng hợp dữ liệu từ tất cả các dịch vụ vi mô trong một kho dữ liệu, tốn kém và không dễ cập nhật theo thời gian thực.
Sử dụng DuckDB, chúng ta có thể đính kèm một cơ sở dữ liệu MySQL và một cơ sở dữ liệu PostgreSQL vào nối dữ liệu trên các cơ sở dữ liệu và lọc theo tệp CSV. Thiết lập cơ sở dữ liệu và mã có sẵn trong kho lưu trữ này:
ATTACH 'host=localhost port=5432 dbname=flock person=swan password=mallard'
AS pg_db (TYPE postgres_scanner, READ_ONLY);ATTACH 'host=localhost port=3306 database=flock person=swan password=mallard'
AS mysql_db (TYPE mysql_scanner, READ_ONLY);
choose u.tier,
depend(distinct o.id) as order_count
from pg_db.customers u be a part of mysql_db.orders o
on u.id = o.created_by
the place o.id IN (
choose order_id
from 'datagenerator/adjusted_transactions.csv'
)
group by 1 ;
┌─────────┬─────────────┐
│ tier │ order_count │
│ varchar │ int64 │
├─────────┼─────────────┤
│ plus │ 276 │
│ regular │ 696 │
│ membership │ 150 │
│ vip │ 148 │
└─────────┴─────────────┘
Trong đoạn trích trên, chúng tôi đã truy vấn PostgreSQL, MySQL và tệp CSV, Nhưng DuckDB hỗ trợ nhiều nguồn dữ liệu khác giống như các tệp Microsoft Excel, JSON và S3 — tất cả đều sử dụng cùng một giao diện SQL.
DuckDB chạy trên shell dòng lệnh như một tiến trình độc lập mà không có bất kỳ sự phụ thuộc bổ sung nào (như tiến trình máy chủ). Điều này tính di động làm cho DuckDB có thể so sánh với các công cụ Unix khác giống sed
, jq
, kind
Và awk
.
DuckDB cũng có thể được nhập dưới dạng thư viện trong các chương trình được viết bằng các ngôn ngữ như Python và Javascript. Trên thực tế, DuckDB cũng có thể chạy trong trình duyệt — trong liên kết nàytruy vấn SQL sẽ lấy kho lưu trữ của Wealthy Hickey từ Github và nhóm chúng theo ngôn ngữ — tất cả đều từ bên trong trình duyệt:
Đối với các tính năng không có trong DuckDB, mở rộng cộng đồng có thể được sử dụng để thêm nhiều chức năng hơn như hàm băm mật mã được thêm vào như một phần mở rộng của cộng đồng.
Phân tích dữ liệu là quá trình lặp đi lặp lại việc đặt câu hỏi về dữ liệu để giải thích tại sao một điều gì đó lại xảy ra. Trích dẫn Carl Jung, “đặt câu hỏi đúng đã là giải pháp cho một nửa vấn đề”.
Với các công cụ dòng lệnh truyền thống, giữa dữ liệu và câu hỏi, có thêm bước tìm ra cách trả lời câu hỏi đó. Điều này làm gián đoạn quá trình đặt câu hỏi lặp đi lặp lại.
DuckDB thống nhất sự phát triển của các công cụ: (1) nó chạy ở mọi nơi (2) có thể truy vấn nhiều nguồn dữ liệu (3) với ngôn ngữ khai báo được hiểu rộng rãi. Sử dụng DuckDB, vòng phản hồi cho phân tích lặp lại ngắn hơn nhiều, giúp DuckDB là công cụ thực sự mà mọi nhà phát triển nên có trong bộ công cụ của mình để phân tích dữ liệu.
[ad_2]
Source link