Kỹ sư dữ liệu · Bước 3/8 · 9 phút
Pipeline: ETL, ELT, batch và streaming
Giải thích dữ liệu di chuyển ra sao, chọn giữa ETL và ELT, và biết khi nào streaming đáng làm.
Pipeline là gì
Pipeline (đường ống dữ liệu) là chuỗi các bước lấy dữ liệu từ nguồn, biến đổi nó và đặt vào nơi dùng được. Nguồn là cơ sở dữ liệu của ứng dụng, file, API và log sự kiện. Đích đến thường là kho dữ liệu hoặc data lake.
Pipeline tốt thì chạy lại được. Chạy cùng một ngày hai lần vẫn ra cùng kết quả, không bị gấp đôi số dòng. Tính chất này gọi là idempotency (tính luỹ đẳng), và đây là một trong những từ hữu ích nhất của nghề.
ETL và ELT
ETL là extract, transform, load: bạn làm sạch dữ liệu trước khi đưa vào kho. ELT là extract, load, transform: bạn đưa dữ liệu thô vào trước, rồi biến đổi ngay trong kho bằng SQL.
ELT trở thành mặc định cho phân tích vì kho dữ liệu trên cloud chạy nhanh và lưu trữ rẻ. Giữ dữ liệu thô nghĩa là bạn có thể sửa phép biến đổi sau đó và dựng lại. Các công cụ như dbt được xây quanh cách làm này. ETL vẫn hợp lý khi dữ liệu phải được lọc hoặc che trước khi lưu, ví dụ dữ liệu cá nhân.
Batch và streaming
Pipeline batch (xử lý theo lô) xử lý dữ liệu theo từng phần, theo lịch: mỗi giờ, mỗi đêm. Cách này đơn giản hơn, rẻ hơn và dễ chạy lại hơn. Phần lớn báo cáo trong công ty là batch, và như vậy là ổn.
Pipeline streaming (xử lý luồng) xử lý sự kiện ngay khi chúng đến, trong vài giây. Bạn cần nó cho kiểm tra gian lận, theo dõi trực tiếp hay cảnh báo. Công cụ phổ biến là Apache Kafka để chuyển sự kiện, và Apache Flink hoặc Spark Structured Streaming để xử lý. Streaming phức tạp hơn thật sự, như sự kiện đến muộn hoặc sai thứ tự.
Hỏi xem thế nào là đủ mới
Trước khi xây bất cứ thứ gì thời gian thực, hãy hỏi người sẽ dùng nó xem dữ liệu cần mới đến mức nào. Một dashboard chỉ xem mỗi sáng thì không cần streaming. Nhiều đội bắt đầu bằng batch và chỉ thêm streaming cho đúng trường hợp thật sự cần.
Thử ngay
Thiết kế pipeline trên giấy
- 1.Chọn một nguồn bạn biết, như API công khai về thời tiết hoặc tỷ giá.
- 2.Viết ba dòng: dữ liệu đến từ đâu, cần đến đâu, và cần mới đến mức nào.
- 3.Hỏi chatbot bằng câu lệnh bên dưới và chất vấn bất kỳ bước nào không chạy lại an toàn được.
Tôi muốn một pipeline hằng ngày lấy [dữ liệu] từ [nguồn] và đưa vào kho dữ liệu cho chuyên viên phân tích. Đề xuất thiết kế ELT: extract, load dữ liệu thô, transform. Với mỗi bước, giải thích cách làm để chạy lại cho cùng một ngày mà không tạo dữ liệu trùng.