Tạo nguồn dữ liệu mẫu để kiểm tra Ingestion
Bước đầu tiên là chuẩn bị file dữ liệu thô (raw data) dưới dạng CSV để Druid có thể đọc và chuyển đổi thành các đoạn dữ liệu (segments).
Tạo file CSV mẫu có tên druid-test-data.csv chứa các cột thời gian, tên thành phố, số lượng người dùng và doanh thu. Dữ liệu này sẽ dùng để test tính năng Indexer.
cat > /var/lib/druid/data/samples/druid-test-data.csv
Kết quả mong đợi: File druid-test-data.csv được tạo thành công tại thư mục /var/lib/druid/data/samples/ với nội dung đúng định dạng ISO 8601 cho timestamp.
Verify kết quả tạo file
Kiểm tra quyền truy cập và nội dung file vừa tạo.
ls -lh /var/lib/druid/data/samples/druid-test-data.csv && head -n 3 /var/lib/druid/data/samples/druid-test-data.csv
Kết quả mong đợi: Xuất hiện thông tin file và 3 dòng đầu tiên của nội dung CSV.
Tạo nhiệm vụ Ingestion Task qua Web Console
Sử dụng Druid Console (Web UI) để tạo task nạp dữ liệu. Phương pháp này trực quan hơn so với viết JSON task file thủ công và giúp hiểu rõ cấu hình pipeline.
Trước khi truy cập console, đảm bảo dịch vụ Broker và Indexer đang chạy. Mở trình duyệt và truy cập địa chỉ http://:8888.
Cấu hình Ingestion Task dạng Batch
Thực hiện các bước sau trên giao diện Druid Console:
- Chọn menu Insert trên thanh bên trái, sau đó chọn Batch.
- Đặt tên task: test-ingestion-sample.
- Chọn Input Source là Local Files.
- Nhập đường dẫn file:
/var/lib/druid/data/samples/druid-test-data.csv.
- Chọn File Format là CSV.
- Trong phần Dimension Columns, chọn tất cả các cột trừ timestamp (city, users, revenue).
- Trong phần Timestamp Column, chọn timestamp và định dạng ISO 8601.
- Trong phần Granularity, chọn Minute (để test chi tiết thời gian) hoặc Day.
- Bấm nút Submit để khởi tạo task.
Kết quả mong đợi: Giao diện chuyển sang trạng thái Running và sau đó chuyển sang Succeeded. Một thông báo thành công sẽ hiện ra với đường dẫn tới dataset mới.
Verify kết quả Ingestion
Kiểm tra xem task có thực sự chạy xong và dữ liệu đã được lưu vào storage hay chưa.
curl -s http://localhost:8082/druid/indexer/v1/tasks | jq -r '.[] | select(.type=="index") | "\(.spec.dataSchema.dataSource) \(.status.state)"' | grep -i test
Kết quả mong đợi: Xuất hiện dòng chứa tên dataset test-ingestion-sample và trạng thái SUCCEEDED.
Thực hiện truy vấn SQL cơ bản trên Druid Console
Sau khi dữ liệu đã được nạp (ingested), bước tiếp theo là truy vấn trực tiếp bằng SQL. Druid hỗ trợ chuẩn SQL ANSI, cho phép viết câu lệnh giống như PostgreSQL hay MySQL.
Truy cập lại Druid Console tại http://:8888, chọn menu SQL trên thanh bên trái để mở trình soạn thảo truy vấn.
Truy vấn tổng hợp theo thành phố
Viết câu lệnh SQL để đếm số người dùng (users) và tổng doanh thu (revenue) cho mỗi thành phố.
SELECT city, SUM(users) as total_users, SUM(revenue) as total_revenue FROM "test-ingestion-sample" GROUP BY city ORDER BY total_revenue DESC;
Kết quả mong đợi: Bảng kết quả hiện ra với 3 dòng tương ứng 3 thành phố (Hanoi, HoChiMinh, DaNang) và các cột tổng hợp đúng giá trị từ file CSV.
Truy vấn chi tiết theo thời gian
Viết câu lệnh SQL để lấy chi tiết giao dịch trong khoảng thời gian cụ thể (ví dụ: ngày 2024-01-01).
SELECT timestamp, city, users, revenue FROM "test-ingestion-sample" WHERE timestamp >= '2024-01-01T00:00:00.000Z' AND timestamp < '2024-01-02T00:00:00.000Z' ORDER BY timestamp;
Kết quả mong đợi: Bảng kết quả hiển thị 6 dòng dữ liệu thuộc về ngày 01/01/2024, được sắp xếp theo thời gian tăng dần.
Verify kết quả truy vấn SQL
Kiểm tra xem Druid có trả về dữ liệu chính xác không bằng cách so sánh với file nguồn.
echo "Dữ liệu trong file nguồn:" && grep "2024-01-01" /var/lib/druid/data/samples/druid-test-data.csv | wc -l
Kết quả mong đợi: Số lượng dòng trả về từ lệnh SQL (6 dòng) phải khớp với số lượng dòng đếm được trong file CSV (6 dòng).
Điều hướng series:
Mục lục: Series: Triển khai Database OLAP với Apache Druid trên Ubuntu 24.04
« Phần 6: Cấu hình Indexer và Web Console để quản lý dữ liệu
Phần 8: Tối ưu hóa hiệu năng và xử lý sự cố thường gặp »