2016-01-27 13 views
5

Tôi là người mới, cố gắng hiểu cách chúng tôi có thể viết lại quy trình ETL hàng loạt vào Google Dataflow. Tôi đã đọc một số tài liệu, chạy một vài ví dụ.Tham gia phức tạp với google dataflow

Tôi đang đề xuất rằng quy trình ETL mới sẽ được thúc đẩy bởi các sự kiện kinh doanh (ví dụ: PCollection nguồn). Điều này sẽ kích hoạt quá trình ETL cho thực thể kinh doanh cụ thể đó. Quá trình ETL sẽ trích xuất các tập dữ liệu từ các hệ thống nguồn và sau đó chuyển các kết quả đó (PCollections) vào giai đoạn xử lý tiếp theo. Các giai đoạn xử lý sẽ liên quan đến nhiều loại tham gia khác nhau (bao gồm cả việc tham gia nhóm và không có khóa), ví dụ: dải ngày).

Vì vậy, một vài câu hỏi ở đây:

(1) là phương pháp mà tôi đang đề xuất hợp lệ & và bền? Nếu không phải những gì sẽ tốt hơn, tôi đã không thấy bất kỳ bài thuyết trình nào về các quy trình ETL phức tạp trong thế giới thực bằng cách sử dụng Google Dataflow, chỉ các kịch bản đơn giản.

Có bất kỳ sản phẩm ETL "cấp cao hơn nào" phù hợp hơn không? Tôi đã để mắt đến Spark và Flink một lúc.

ETL hiện tại của chúng tôi khá phức tạp, mặc dù chỉ có khoảng 30 bảng lõi (kích thước và thông số EDW cổ điển) và ~ 1000 bước chuyển đổi. Dữ liệu nguồn là phức tạp (khoảng 150 bảng Oracle).

(2) Các liên kết không khóa phức tạp, chúng sẽ được xử lý như thế nào?

Tôi rõ ràng bị thu hút bởi Google Dataflow vì nó là API đầu tiên và quan trọng nhất, và khả năng xử lý song song dường như rất phù hợp (chúng tôi đang được yêu cầu chuyển từ hàng loạt qua đêm sang gia tăng).

Một ví dụ được thực hiện tốt về Dataflow cho trường hợp sử dụng này thực sự sẽ đẩy thông qua!

Cảm ơn, Mike S

Trả lời

6

Nghe có vẻ như Dataflow sẽ là một sự phù hợp tốt. Chúng tôi cho phép bạn viết một đường ống mất PCollection sự kiện kinh doanh và thực hiện ETL. Đường ống có thể là lô (được thực hiện định kỳ) hoặc phát trực tuyến (được thực thi bất cứ khi nào dữ liệu đầu vào đến).

Các kết nối khác nhau là phần lớn tương đối dễ đọc trong Dataflow. Đối với sản phẩm Descartes, bạn có thể xem sử dụng side inputs để làm cho nội dung của một PCollection có sẵn làm đầu vào cho việc xử lý từng phần tử trong một số PCollection khác.

Bạn cũng có thể xem sử dụng GroupByKey hoặc CoGroupByKey để triển khai các kết nối. Chúng làm phẳng nhiều đầu vào và cho phép truy cập tất cả các giá trị bằng cùng một khóa ở một nơi. Bạn cũng có thể sử dụng Combine.perKey để tính các kết hợp liên kết và giao hoán của tất cả các phần tử được liên kết với khóa (ví dụ: SUM, MIN, MAX, AVERAGE, v.v.).

Tham gia dải ngày có vẻ phù hợp với windowing cho phép bạn viết đường dẫn tiêu thụ cửa sổ dữ liệu (ví dụ: cửa sổ theo giờ, cửa sổ hàng ngày, cửa sổ 7 ngày trượt mỗi ngày, v.v.).


Edit: Đề cập đến GroupByKeyCoGroupByKey.

Các vấn đề liên quan