thảo luận [DE Personal Project] VOZ ETL data pipeline

  • Người tạo chủ đề Người tạo chủ đề Giam Doc EVN
  • Ngày bắt đầu Ngày bắt đầu

Giam Doc EVN

Đã tốn tiền
Hi các thím, vài tháng vừa rồi mình rảnh rỗi với lại được AMZ nó cho $300 miễn phí để vọc AWS nên mình có ý tưởng scrape vài data trên voz (chủ yếu user với thread) để tạo 1 ETL data pipeline từ RDS PostgreSQL -> S3 -> Redshift -> auto-update dashboard trên Google Data Studio. Bên cạnh đó mình dùng Docker-Airflow để schedule ETL cho nó tự chạy từ RDS Postgrel -> Redshift luôn.

Tech stack: Selenium Webdriver, Python, Postgesql, S3 bucket, RDS PostgreSQL database, Redshift data warehouse, Docker-compose, Airflow, Google Data Studio.

Một số điểm nhấn là mình sử dụng JSONB data type của PostgreSQL và SUPER data type của Redshift để lưu data dạng dict và array thay vì tạo bảng mới. Vì mình không thực hiện aggregation trên các field này nên việc read/write sẽ nhanh hơn, chỉ unpack khi lưu vào Redshift. Mình cũng thực hiện word-count tất các các comments của 1 thread (nếu có) để xem từ nào thường xuất hiện nhiều nhất trong các hot threads.

Mình đang học DE nên đây xem như 1 bài tập thôi. Xin các thím đóng góp ý kiến để nó hoàn thiện hơn
7pM6OQK.gif
Một vài hình ảnh tổng quan.
1662850235872.png

Work flow
1662850252581.png

Dag
1662850267769.png

Dashboard - Threads Page
1662850291904.png

Dashboard - User Page

Các thím có thể tham khảo project ở link bên dưới
Source Code
Dashboard
 
Sửa lần cuối:
1 vài ý kiến cá nhân:
  • Bạn có thể sử dụng nhiều csdl hơn thay vì chỉ sử dụng redshift, ví dụ như với cái wordcount mình nghĩ key-value db dạng redis sẽ thích hợp hơn
  • Data lấy được từ scraping có thể đẩy trực tiếp vào s3 rồi redshift, mình chưa hiểu lắm vai trò của rds
  • Hiện tại mình thấy elt có vẻ trendy hơn so với etl truyền thống, bạn có thể modify 1 chút project theo hướng này, sử dụng 1 vài tool như airbyte, fivetran cho data ingestion, dbt cho transformation,... nếu thêm project vào cv sẽ có lợi hơn

with that said, amazing good job :p:p
 
Bác đang học DE hả bác ? Bác học chương trình ở đâu hay trường nào vậy bác ha. Mong bác chia sẻ.
 
1 vài ý kiến cá nhân:
  • Bạn có thể sử dụng nhiều csdl hơn thay vì chỉ sử dụng redshift, ví dụ như với cái wordcount mình nghĩ key-value db dạng redis sẽ thích hợp hơn
  • Data lấy được từ scraping có thể đẩy trực tiếp vào s3 rồi redshift, mình chưa hiểu lắm vai trò của rds
  • Hiện tại mình thấy elt có vẻ trendy hơn so với etl truyền thống, bạn có thể modify 1 chút project theo hướng này, sử dụng 1 vài tool như airbyte, fivetran cho data ingestion, dbt cho transformation,... nếu thêm project vào cv sẽ có lợi hơn

with that said, amazing good job :p:p
Bác nói chuẩn rồi. Xét về tính thực tế của ETL này thì nên bỏ bước RDS, nhưng mà em vẽ thêm tí việc mục đích để luyện tập cách migrate data từ on-premise db to cloud thôi. Về trend ELT em hay đọc r/dataengineering với medium cũng thấy các chiên da đổi qua mô hình ELT -> Data Modeling -> Analytics. Để từ từ em vọc thêm
Bác đang học DE hả bác ? Bác học chương trình ở đâu hay trường nào vậy bác ha. Mong bác chia sẻ.
Mình tự học online thôi thím ơi
Tài liệu thì chọn ở đây
https://dataengineering.wiki/Learning+Resources
Việc quan trọng là phải thường xuyên đọc các bài thảo luận của người trong ngành để tham khảo solution của họ và họ dùng tech stack nào cho những dự án nào. Mình hay đọc r/engineering và medium thôi
https://www.reddit.com/r/dataengineering/
medium.com
bác làm gì mà đuọcw tang 300credit thơm v
Trước đó mình có học mấy AWS course miễn phí của amz xong tạo tài khoản free tier của AWS rồi deploy project của mình. Không biết sao amz nó gửi email bảo điền form vào để có cơ hội được tặng $300 credit cho AWS. Link bên dưới
https://pages.awscloud.com/adoptf90d_GLOBAL_POC-credits.html
 
Mình tự học online thôi thím ơi
Tài liệu thì chọn ở đây
https://dataengineering.wiki/Learning+Resources
Việc quan trọng là phải thường xuyên đọc các bài thảo luận của người trong ngành để tham khảo solution của họ và họ dùng tech stack nào cho những dự án nào. Mình hay đọc r/engineering và medium thôi
https://www.reddit.com/r/dataengineering/
medium.com
Thanks thím. Nếu mà tự học online thôi thì hơi khó áp dụng với mình tại vì mình là chuyển ngành, đang học. Vậy nên vẫn ưa chuộng học trường lớp và thầy giáo hơn.
Anw , thanks thím rất nhiều vì đã chia sẻ thêm, mình đã note lại để tự học thêm luôn.
 
Thanks thím. Nếu mà tự học online thôi thì hơi khó áp dụng với mình tại vì mình là chuyển ngành, đang học. Vậy nên vẫn ưa chuộng học trường lớp và thầy giáo hơn.
Anw , thanks thím rất nhiều vì đã chia sẻ thêm, mình đã note lại để tự học thêm luôn.
Nói tự học online cũng không chính xác lắm vì mình học BSCS, hiện tại cũng đang học MSCS chuyên ngành ML. Mình chỉ học online các nghiệp vụ của DE thôi.
 
1 vài ý kiến cá nhân:
  • Bạn có thể sử dụng nhiều csdl hơn thay vì chỉ sử dụng redshift, ví dụ như với cái wordcount mình nghĩ key-value db dạng redis sẽ thích hợp hơn
  • Data lấy được từ scraping có thể đẩy trực tiếp vào s3 rồi redshift, mình chưa hiểu lắm vai trò của rds
  • Hiện tại mình thấy elt có vẻ trendy hơn so với etl truyền thống, bạn có thể modify 1 chút project theo hướng này, sử dụng 1 vài tool như airbyte, fivetran cho data ingestion, dbt cho transformation,... nếu thêm project vào cv sẽ có lợi hơn

with that said, amazing good job :p:p
Word count sử dụng key value là cực kỳ sai nhé. Bạn này dùng Redshift cho analytics là chuẩn rồi.
 
Về cơ bản thì ok nhưng nếu muốn hoàn thiện hơn thì bạn có thể xem xét:

1. Tại sao phần code scraping từ voz phải chạy manual trên máy bạn mà không chạy với airflow?
2. Tại sao phải lưu vào postgreSQL mà không lưu thẳng vào Redshift hay S3 ?
a. Nên đặt câu hỏi khi nào nên lưu vào S3, khi nào nên lưu thẳng vào Redshift?
3. Workflow của bạn đang là ETL, có thể consider làm theo hướng ELT được không?
a. Với ELT thì sẽ dùng cái gì cho phần T? (suggest DBT)

Suggest thiết kế theo hướng ELT như sau:
1. Dùng airflow schedule chạy code scrape voz data.
a. Nên consider với việc chạy incremental cho data mới, thay vì chạy full mỗi lần.
2. Lưu thẳng vào Redshift, nếu mục tiêu chỉ là visualization.
3. Dùng dbt để transformation với data trên Redshift ra các tables đầu cuối mà bạn muốn visualize.
a. Bên DE khá quan tâm tới việc thiết kế table khi lưu data trong Database, bạn có thể consider xem thêm về dimensional modeling.
 
Về cơ bản thì ok nhưng nếu muốn hoàn thiện hơn thì bạn có thể xem xét:

1. Tại sao phần code scraping từ voz phải chạy manual trên máy bạn mà không chạy với airflow?
2. Tại sao phải lưu vào postgreSQL mà không lưu thẳng vào Redshift hay S3 ?
a. Nên đặt câu hỏi khi nào nên lưu vào S3, khi nào nên lưu thẳng vào Redshift?
3. Workflow của bạn đang là ETL, có thể consider làm theo hướng ELT được không?
a. Với ELT thì sẽ dùng cái gì cho phần T? (suggest DBT)

Suggest thiết kế theo hướng ELT như sau:
1. Dùng airflow schedule chạy code scrape voz data.
a. Nên consider với việc chạy incremental cho data mới, thay vì chạy full mỗi lần.
2. Lưu thẳng vào Redshift, nếu mục tiêu chỉ là visualization.
3. Dùng dbt để transformation với data trên Redshift ra các tables đầu cuối mà bạn muốn visualize.
a. Bên DE khá quan tâm tới việc thiết kế table khi lưu data trong Database, bạn có thể consider xem thêm về dimensional modeling.
1. Em tốn mấy ngày để chạy scraper bằng airflow mà không có cách nào chạy cái selenium webdriver được nên đành bó tay thôi thím ơi.
2. Em lưu vào PG để practice thôi chứ trên thực tế chắc chắn em sẽ lưu trực tiếp vào S3 rồi :byebye:
3. Em sẽ phát triển project này theo hướng ELT trong tương lai, đồng thời build vài ML model cho dataset này luôn.

Em mới tập tành DE thôi nên chưa quen nhiều tool. Chắc chắn sẽ vọc dbt trong thời gian tới :byebye: Em có biết fact-dimension model nhưng mà dataset này ít entity quá, chỉ có mỗi thread với user thôi nên em làm đơn giản
 
Hi Bro,
  • Vụ crawler ấy, bạn có 2 cách để xử lý để control được việc chạy của job crawler này là tạo job crawler của bạn thành 1 dạng webhook và phía airflow sẽ call nó để bên kia chạy. cách 2 là build docker image cái code crawler của bạn, rồi bên airflow sẽ có DockerOperator có thể call chạy bình thường, chú ý đến network để nó call là ok
  • Lưu ở S3 bạn thử tìm hiểu về dạng parquet xem sao, nó sẽ hỗ trợ chơi với Apache Spark tốt hơn csv
  • Nếu muốn chơi vui nữa thì nghiên cứu việc load dữ liệu thì có thể dùng batch kết hợp với realtime không (optional nha)
  • Cá nhân mình dùng Dashboard của bạn thấy hơi chậm chỗ search theo tên user , thì không biết lượng dữ liệu bao nhiêu mà chậm vậy (khoảng 20s mình mới search được). Nên bạn xem lại về data model hoặc câu lệnh query ở data studio
Còn mọi thứ đều ok nhé.
Cảm ơn bro đã share =)))
 
Hi Bro,
  • Vụ crawler ấy, bạn có 2 cách để xử lý để control được việc chạy của job crawler này là tạo job crawler của bạn thành 1 dạng webhook và phía airflow sẽ call nó để bên kia chạy. cách 2 là build docker image cái code crawler của bạn, rồi bên airflow sẽ có DockerOperator có thể call chạy bình thường, chú ý đến network để nó call là ok
  • Lưu ở S3 bạn thử tìm hiểu về dạng parquet xem sao, nó sẽ hỗ trợ chơi với Apache Spark tốt hơn csv
  • Nếu muốn chơi vui nữa thì nghiên cứu việc load dữ liệu thì có thể dùng batch kết hợp với realtime không (optional nha)
  • Cá nhân mình dùng Dashboard của bạn thấy hơi chậm chỗ search theo tên user , thì không biết lượng dữ liệu bao nhiêu mà chậm vậy (khoảng 20s mình mới search được). Nên bạn xem lại về data model hoặc câu lệnh query ở data studio
Còn mọi thứ đều ok nhé.
Cảm ơn bro đã share :LOL:)
Cám ơn thím đã góp ý, để em ngâm cứu phát triển trong tương lai. Cái search by username cực kỳ chậm là tại vì username có ký tự đặc biệt nha thím. Đáng lẽ bỏ field đấy nhưng mà để test cho đầy đủ chức năng :big_smile:
 
Sao có 300 buck mà dựng được nhiều thế chủ thread, mình con redshift có khi cắn hết $300 rồi ấy chứ :eek:
 

Thống kê chủ đề

Ngày tạo
Giam Doc EVN,
Người trả lời cuối
DE Tương lai,
Trả lời
13
Lượt xem
4.809
Quay lại
Lên đầu trang