
Mọi người mở thêm trang giới thiệu của khóa học để xem thêm phần description của từng bài học nếu cần nha (ví dụ như đoạn này).
Phần mô tả thường sẽ có các đường dẫn, bài viết liên quan, tổng kết bài học, mục tương ứng trong sách The Data Warehouse Toolkit của Kimball.
LƯU Ý: Vì chính sách của Udemy không để external link, nên mình sẽ chuyển link sang phần Resources nha. Ví dụ đường link xem mô tả bài học mình đã chuyển sang Resources.
Tương tự như playlist cài đặt DBT, thay ở bước copy repo Github. Xem câu lệnh tại phần Resources.
Phương pháp học chủ đạo: đi đôi giữa kiến thức và thực hành
Bạn sẽ được giao một thử thách để làm, sau đó mình sẽ cung cấp kiến thức, sau đó bạn quay lại làm tiếp hoặc có bài tập mới, sau đó mình sẽ lại cung cấp kiến thức mới dựa trên bài tập mới.
Bạn PHẢI làm bài tập thì học mới hiểu bài.
Các thư mục cần lưu ý:
lessons: chứa toàn bộ yêu cầu của từng bài học (của chương 01).
models: chứa toàn bộ file code để làm data modeling trên DBT.
models/analytics: file code cho data warehouse.
Mọi người mở yêu cầu trong file lessons/lesson-0101.md và dành 5-10 phút để đọc mô tả về bảng sales__orders, sales__order_lines. Sau đó dành tiếp 5-10 phút sửa query fact_sales_order_line nha.
Coding session là video mà mình sẽ quay lại quá trình giải bài tập. Mọi người có thể xem video coding session để:
Kiểm tra và đối chiếu xem code mọi người sai ở đâu
Xem code mọi người có khác biệt gì không
Xem cách mình tư duy để giải bài tập
Nếu bạn đã hoàn thành bài tập, bạn có thể bỏ qua coding session.
Giải thích hai bảng sales__orders và sales__order_lines:
sales__orders: chính là bảng fact header, chứa dữ liệu của đơn hàng, giao dịch. Ở đây bảng này chứa dữ liệu đơn bán hàng.
sales__order_lines: chính là bảng fact line, chứa dữ liệu chi tiết của đơn hàng, giao dịch. Ở đây bảng này chứa dữ liệu từng sản phẩm bán hàng.
(Fact header, fact line đã được đề cập ở chuỗi Data Modeling - Cách Thiết Kế Sheet Excel / Table Database CSDL - YouTube)
Bảng Fact là những bảng chứa các cột về số liệu, đo lường, hiệu suất của một hoạt động kinh doanh. Ví dụ hoạt động kinh doanh ở đây chính là hoạt động bán hàng, còn hai cột số liệu ở đây là số lượng bán ra, giá bán.
Mọi người vừa hoàn thành bảng Fact đầu tiên fact_sales_order_line ?.
Naming convention là những quy tắc đặt tên sao cho thống nhất và có quy tắc để trong và ngoài team có thể hiểu nhanh ý nghĩa của các cột.
Trong khóa này, mọi người sẽ áp dụng một số naming convention do mình đặt ra để mình có thể test tự động.
Tương ứng mình sẽ có file convention để mọi người có thể đọc lại khi làm bài tập.
Tự kiểm tra bài làm bằng câu lệnh: dbt test --select tag:lesson-0101
Khi mọi người chạy lệnh test, DBT sẽ tiến hành chạy các bài test mà mình đã viết tương ứng mỗi bài học. Mọi người chỉ được làm tiếp khi vượt qua hết bài test (PASS).
Sau bài 0101, mọi người đã có một model chứa hai cột là doanh số và giá bán. Trong thực tế, sếp sẽ cần xem tổng doanh thu, là số tiền thu về được. Doanh thu bằng doanh số x giá bán. Cho nên bây giờ mình sẽ cần phải dùng công thức để tính ra cột doanh thu.
Mọi người mở yêu cầu trong lesson-0102 và dành 5-10 phút để làm cột doanh thu trong model fact_sales_order_line nha.
Nếu bạn chưa làm được, thì cách làm gợi ý đó là viết công thức dùng tên cột và +-*/.
Mọi người nhớ sau khi viết xong phải chạy dbt test để đảm bảo là bài làm của bạn đã chính xác nha.
Cột gross_amount được gọi là calculated measure. Calculated measure là những cột số liệu, đo lường được tạo ra từ công thức chứ không có sẵn trong dữ liệu thô. Ví dụ ở đây cột gross_amount mình phải tính ra từ hai cột là quantity và unit_price.
BI tool cũng hỗ trợ tính năng làm calculated measure tương tự như mình đang làm trên model này. Theo bạn, mình nên làm calculated measure ở trên model, hay là làm trên BI tool? Tại sao?
Theo mình, mình nên làm calculated measure trên data model. Một số lý do:
Tiết kiệm thời gian làm trên BI tool
Giảm sai sót do user tính sai
Toàn bộ user dùng chung 1 công thức thống nhất
Toàn bộ BI tool dùng chung 1 công thức thống nhất
Nếu mình đem bảng fact_sales_order_line đi visualize, mình chỉ có thể xem được tổng doanh số và tổng doanh thu. Mình không thể xem được chi tiết hoạt động kinh doanh, ví dụ như doanh thu theo từng sản phẩm.
Một thành phần quan trọng của data warehouse là các bảng dimension. Bảng dimension là những bảng chứa dữ liệu về vật thể, con người, ví dụ như bảng sản phẩm.
Mọi người mở yêu cầu trong lesson-0103a và dành 5-10 phút để làm yêu cầu trong models/analytics/dim_product.sql nha.
Bảng dim_product là một bảng dimension điển hình. Bảng dim_product sẽ chứa những mô tả về sản phẩm.
Bây giờ, để mình có thể xem hoạt động kinh doanh theo những mô tả sản phẩm, mình sẽ cần phải thêm cột product_key bên fact_sales_order_line để có thể kết nối với dim_product. Bảng fact-dim sẽ kết nối với nhau bằng foreign key, và mình có thể xem doanh thu theo sản phẩm. Việc kết nối này giống như VLOOKUP trên Excel, hoặc JOIN trên SQL.
Mọi người chuyển sang nhánh lesson-0103b và làm yêu cầu 0103b trong fact_sales_order_line nha.
Trong thực tế, data khi được đưa về data lake có thể không có đúng data type như data trên các hệ thống. Để ĐẢM BẢO đúng data type, mình cần có bước chuyển data type.
Thử thách nhỏ: mở yêu cầu trong lesson-0104a.md, dành từ 10-15p để tìm đọc các loại data type trên BigQuery và cú pháp để chuyển loại dữ liệu.
Data Type thông dụng trên BigQuery:
STRING
INTEGER
NUMERIC
DATE
TIMESTAMP
BOOLEAN
Mọi người mở yêu cầu trong lesson-0104a.md và dành từ 5-10p để chuyển data type cho các cột trong dim_product.sql.
Trong thực tế, data khi được đưa về data lake có thể không có đúng data type như data trên các hệ thống. Để ĐẢM BẢO đúng data type, mình cần có bước chuyển data type, mặc dù có thể ở hiện tại data type không có gì sai.
Nếu mọi người chạy test, mọi người sẽ thấy là mình có thêm bài test là kiểm tra data type. Nếu data type của mọi người chưa chính xác, DBT sẽ báo lỗi ở cột tương ứng.
Nếu đã chạy thành công, mọi người mở yêu cầu trong lesson-0104b và chuyển data type của bảng models/analytics/fact_sales_order_line.sql nha.
Lưu ý chỗ cột gross_amount!
Code của mình đang bắt đầu rối hơn. Làm sao để code của mình đỡ rối hơn, dễ đọc hơn, rõ ràng hơn? Bạn dành 5 phút để suy nghĩ hướng làm nha (chưa cần viết code).
Gợi ý cách tách lớp: Dùng CTE (WITH) để tách làm nhiều lớp, mỗi lớp là một bước xử lý.
Gợi ý lớp đầu tiên: CTE __source để thể hiện đang lấy nguồn từ đâu.
Sau gợi ý lớp đầu tiên, bạn dành thêm 5 phút suy nghĩ xem có thể tách ra được lớp xử lý nào nữa nha.
Giải thích thêm về:
Bước SELECT ở cuối
Cách đặt tên CTE
Mọi người mở yêu cầu trong lesson-0105b.md và dành 10-15 phút để làm tương tự cho models/analytics/fact_sales_order_line.sql.
Khi nào thì nên tách? Có nên tách calculate_measure trong fact_sales_order_line?
Hiện tại mình đã có thể xem doanh thu theo sản phẩm. Bây giờ sếp sẽ muốn xem doanh thu theo khách hàng, nên trước tiên mình sẽ cần làm bảng dim_customer.
Mọi người mở yêu cầu trong lesson-0106a và dành 5-10 phút làm dim_customer nha.
Làm sao để kết nối dữ liệu của Sales và Customer?
Mọi người mở yêu cầu trong lesson-0106b và dành 15-20 phút để đem customer_key vào fact_sales_order_line nha.
Bạn làm cách nào để kết nối dữ liệu của Sales và Customer?
Cách hợp lý để kết nối dữ liệu của Sales và Customer.
Tách lớp xử lý dữ liệu bằng model staging.
Naming convention.
Trước khi làm stg_fact_sales_order, bạn cần phải thêm cột sales_order_key trước.
Sau khi chạy thành công stg_fact_sale_order, bạn lên trên BigQuery kiểm tra bảng mới và tìm đọc so sánh giữa view và table nha.
Sự khác biệt giữa View và Table.
Nếu bạn đã xem chuỗi video về JOIN trên kênh Vịt, bạn sẽ biết có 4 loại JOIN chính: INNER, LEFT, RIGHT, FULL OUTER.
Mình nên dùng loại JOIN nào? Và tại sao?
Sau khi xem xong, bạn dành ra 5-10 phút để tiến hành JOIN hai bảng lại nha.
Tip SQL: Bất kỳ chỗ nào có JOIN, tên cột nên có tên bảng (table_name.column_name).
DBT ref là gì? Tại sao mình cần dùng DBT ref?
Tổng kết về DBT ref và Data Pipeline.
Càng làm thì sếp càng đòi hỏi nhiều ạ :(( Bây giờ sếp muốn xem doanh thu theo nhà cung cấp nữa :'(
Mọi người mở yêu cầu trong lesson-0107a và dành 5-10 phút làm model dim_supplier nha.
Làm sao để xem doanh thu theo supplier (nhà cung cấp)?
Hay làm sao để kết nối fact_sales_order_line với dim_supplier?
Sau khi xem xong video, mọi người mở yêu cầu trong lesson-0107b và dành 10-15 phút tìm cách đem thông tin dim_supplier này vào bảng dim_product nha.
Flatten Dimension giúp cho việc báo cáo, phân tích dễ dàng hơn:
Quan hệ giữa các bảng gọn gàng, trực quan hơn
Ít bảng hơn => tiết kiệm thời gian tạo quan hệ các bảng trên BI tool
Sau khi xem xong video, mọi người mở yêu cầu trong lesson-0107c và dành 10-15 phút để flatten customer_category vào dim_customer nha.
Mẹo: Dùng nhiều con trỏ một lúc để chỉnh sửa nhanh hơn
Add Next Occurence (Ctrl+D)
Add Cursor Above/Below (Ctrl+Alt+UpArrow / Ctrl+Alt+DownArrow)
Sau khi xem xong video, bạn cập nhật database diagram với những bảng mới nha.
Bạn sẽ học được những gì?
Cách tư duy (mindset) đúng đắn khi làm việc với dữ liệu.
Xử lý dữ liệu cho hệ thống Data Warehouse, xử lý bảng để dùng làm báo cáo.
Xây dựng một data warehouse hoàn chỉnh từ data thô.
Kỹ năng SQL để xử lý dữ liệu trong data warehouse.
Nếu dựa trên BI Process, khóa này sẽ tập trung vào bước Data Transformation và một phần Data Quality, Data Metadata.
Đối tượng của khóa học này
Data Analyst cần cải thiện kỹ năng xử lý dữ liệu để hiệu quả hơn khi làm data visualization và data analysis.
Data Engineer đang cần làm Data Warehouse.
Analytics Engineer.
Yêu cầu
Biết dùng Excel hoặc Google Sheets.
Biết viết query bằng SQL / đã học qua khóa Tự học SQL cùng Vịt - Cơ bản trên Youtube.
Thành thạo ít nhất một công cụ BI: Power BI, Tableau, Google Data Studio, Metabase...
CÂU HỎI THƯỜNG GẶP
Khóa này có phù hợp cho người mới hoàn toàn không?
Câu trả lời ngắn gọn: nếu bạn mới hoàn toàn thì khoá học này chưa phù hợp với bạn ạ.
Khoá này sẽ tập trung vào bước Data Transformation của quy trình làm BI (Business Intelligence), nên sẽ phù hợp cho những bạn đã đi làm một thời gian, và cần trui rèn khả năng tổ chức dữ liệu cho data warehouse nha.
Nếu bạn mới hoàn toàn với data, chưa từng tiếp xúc với các bảng data, chưa biết dùng Pivot Table trong MS Excel/GG Sheets, chưa từng làm một cái dashboard, có lẽ khóa học này chưa phù hợp với bạn. Cái bạn cần hiện tại là một khóa học đưa bạn qua toàn bộ quy trình làm BI, từ khi nhận data thô cho đến khi phân tích, có insight hoàn chỉnh để đề xuất hành động.
Mình hy vọng sẽ gặp lại bạn, khi bạn đã tiếp xúc với data và nhận ra sự rối rắm lộn xộn của mấy cái bảng. Lúc đó hãy nhớ tới Vịt nha.
Học xong khóa này mình có thể trở thành Data Engineer không?
Khóa này sẽ cung cấp kiến thức về data modeling, làm data warehouse. Đây là một phần công việc của Data Engineer. Bạn sẽ cần học thêm các kiến thức khác để có thể đảm nhận vị trí Data Engineer nha.
Nếu bạn chỉ hứng thú với việc xử lý dữ liệu để làm data warehouse, có thể ý bạn là Analytics Engineer? Nếu bạn đang muốn trở thành một Analytics Engineer, khoá này sẽ trang bị đầy đủ kĩ năng để đảm nhận vị trí này.
Công ty mình cần làm data warehouse. Học xong khóa này mình có thể làm data warehouse liền được không?
Chắc chắn được. Ngay khi học xong khóa này, bạn sẽ có đủ kiến thức để làm một data warehouse hoàn chỉnh.
Nếu công ty bạn đã có sẵn data warehouse, sẽ có hai khả năng xảy ra:
Nếu data warehouse có chất lượng tốt, bạn sẽ hiểu rõ các thành phần của data warehouse và tiếp tục phát triển data warehouse hiện có
Nếu data warehouse có chất lượng thấp, bạn sẽ biết các điểm chưa tốt, các điểm cần cải thiện. Từ đó bạn sẽ đề xuất cải thiện hoặc đề xuất đập đi xây lại.
Lưu ý: Khóa học này KHÔNG BAO GỒM kiến thức về: cài đặt database, setup database, vận hành database, quản lý database. Để quản lý database cho data warehouse, bạn sẽ cần một Database Admin hoặc tìm hiểu thêm.
Công ty mình không dùng DBT mà dùng tool ABC thì mình có thể học khoá này không?
Được ạ. Trong khoá này, mình sẽ hướng dẫn về tư duy và cách làm. Sau khi bạn học xong, bạn vẫn có thể áp dụng những gì học được vào các tool khác (nhưng sẽ cần tư duy một xíu nha).
Mình chọn DBT và SQL cho khoá học này là vì:
Cơ hội tương lai: Theo mình nghĩ, DBT sẽ được dùng phổ biến, nên bạn học xong có thể ứng tuyển nhiều công ty, tại Việt Nam và cả thế giới luôn nha.
Minh bạch: SQL là ngôn ngữ lập trình, nên chúng ta có thể ghi ra cách mình suy nghĩ bằng việc viết ra code, từ đó dễ hơn trong việc kiểm tra, so sánh, học hỏi.
Version control: Việc quản lý cả data warehouse cần được kiểm soát chặt chẽ bằng version control, nếu không bạn sẽ làm sập cả data warehouse chỉ bằng việc thêm/sửa/xóa một dòng code. Bạn thử nghĩ bao nhiêu lần bạn chỉ sửa một chỗ trong file excel và cả file bị hư luôn? Hoặc là không dám sửa luôn vì sợ làm hư file?
Và tất cả lý do trên đảm bảo là bạn có đủ kiến thức để vận hành data warehouse ở tầm doanh nghiệp (chứ không chỉ ở tầm project sinh viên).