Author: hanhtm2

  • When it comes to compensation and benefits, other than base salary, which is the most important to you?

    When it comes to compensation and benefits, other than base salary, which is the most important to you?

    When it comes to compensation and benefits, other than base salary, which is the most important to you?

    Pic5

    This blog post is part of Udacity Data Scientists Nanodegree Program. Detailed analysis with all required code is posted in my github repository and Jupyter notebook.

    My github repository:

    My github repository

    Jupyter notebook code:

    My Jupyter notebook code

    Data source:

    Data source

    Each stage of the CRISP-DM process. These stages are:

    1. Business Understanding
    2. Data Understanding
    3. Prepare Data
    4. Data Modeling
    5. Evaluate the Resultssults

    Business Understanding

    In this Notebook, I will explore the 2023 Stack Overflow results to gather some information about the organization, main field of study, important benefits, and the increase in salary with the years of learning how to program.

    There are 4 questions I want to find answers to:

    • Question 1: What type of company or organization do you work for?
    • Question 2: What is your main field of study in college or university/for your undergraduate studies in 2023?
    • Question 3: Which is the most important benefits to you?
    • Question 4: The more you learn, will the more salary you get?

    Data Understanding

    In order to understanding data. I will do these steps:

    • Handle categorical data
    • Analyze, Model, and Visualize

    Question 1: What type of company or organization do you work for?

    pic1

    Evaluate the Results

    Through the chart, we can easily see:

    • The number of people working in Privately-held limited companies, not in startup mode, accounts for the largest number, about more than 16,000 people.
    • The number of people working in Publicly-traded corporations accounts for the second largest number, about 6,000 people.
    • The number of people working in State-owned companies is small, about less than 1,000 people. Thus, the difference between the number of people working between a Privately-held limited company and a State-owned company is quite large, about 15,000 people

    Question 2: What is your main field of study in college or university/for your undergraduate studies in 2023?

    pic2

    Evaluate the Results

    Through the chart, we can easily see:

    • The proportion of people graduating from field Computer science or software engineering is the largest, about 43%.
    • The rate of people graduating from field Computer engineering or electrical/electronics engineering ranks second, about 9%.
    • The rate of people graduating from field A health science is the least, about 1%. Thus, the proportion of people graduating from field Computer science or software engineering is much larger than field A health science, about 42%. Thereby, we see that field Computer science or software engineering is a field that is very attractive to learnersers.

    Question 3: Which is most important benefits to you?

    pic3

    Evaluate the Results

    Based on the chart, we see:

    • The benefit users are most interested in is Vacation/days off, accounting for about 15%.
    • Remote options is the second most important benefit, accounting for about 13.7%.
    • Child/elder care and Other are benefits that receive little attention, accounting for about 2% and 1% respectively. Lastly, when it comes to compensation and benefits, other than base salary, Vacation/days off is the following are most important to users

    Question 4: The more you learn, will the more salary you get?

    pic4

    Evaluate the Results

    Based on the map, we can see:

    • We can achieve the highest salary when we have 20 years or more of study experience.
    • From 19 to 20 years of study, we can reach the 2nd highest average salary.
    • The average salary is lowest when we have less than 1 year of study experience. From there we conclude that the more years of experience accumulated working on a project, the higher the average salary and vice versa.

    Conclusion

    In this article, we took a look at main field of study, important benefits, and the increase in salary with the years of learning how to program according to Stack Overflow 2023 survey data.

    We gathered the advice of the masses as to how to increase in salary with the years, which showed that the more years of experience accumulated working on a project, the higher the average salary and vice versa.

    When it comes to compensation and benefits, other than base salary, we then looked at the satisfaction of important benefits. This showed that Vacation/days off is the following are most important to users. We found that field Computer science or software engineering is a field that is very attractive to learnersers.

    The findings here are observational, not the result of a formal study

    To see more about this analysis, see the link to my Github available here

    View a detailed analysis report on Medium

    Blog_Medium

    Files Description in the repo

    The Stack Overflow Survey – 2023.ipynb – Notebook containing the data Analysis

    stack-overflow-developer-survey-2023.zip – Developers Survey Result Data and Result Schema

    Requirements

    pandas, matplotlib, jupyter-notebook (if running locally)

    License

    License

    Acknowledgements

    Data source:

    Data source

  • Hàm ARRAY_AGG (JSON_ARRAYAGG), ARRAY_DISTINCT trong SQL và ví dụ cụ thể

    Hàm ARRAY_AGG (JSON_ARRAYAGG), ARRAY_DISTINCT trong SQL và ví dụ cụ thể

    Xin chào mọi người, hôm nay mình sẽ chia sẻ với các bạn về hàm ARRAY_AGG (JSON_ARRAYAGG), ARRAY_DISTINCT trong SQL và ví dụ cụ thể để truy vấn dữ liệu.

    Chúng ta có 1 bảng dữ liệu như sau:

    Table_cus

    Đề bài: Tổng hợp các giá trị bao gồm cả giá trị NULL trong cột Cus_rank thành một mảng (group by id). Loại bỏ các giá trị trùng lặp trong mảng đó.

    Để giải quyết được bài toán trên chúng ta sẽ phải sử dụng đến hàm ARRAY_AGG, vậy hàm ARRAY_AGG có chức năng gì?

    1. Chức năng hàm ARRAY_AGG

    Cú pháp:

    ARRAY_AGG(expression [ORDER BY [sort_expression {ASC | DESC}], [...])

    Chức năng: tổng hợp tập hợp các giá trị bao gồm NULL trong một cột thành một mảng

    Chi tiết:

    • ARRAY_AGG() nhận một biểu thức trả về giá trị thuộc bất kỳ loại nào hợp lệ cho một phần tử mảng.
    • Mệnh đề ORDER BY là mệnh đề tùy chọn. Nó chỉ định thứ tự các hàng được xử lý trong tập hợp, xác định thứ tự của các phần tử trong mảng kết quả.
    • Tương tự như các hàm tổng hợp khác như AVG(), COUNT(), MAX(), MIN() và SUM(), ARRAY_AGG() thường được sử dụng với mệnh đề GROUP BY.

    Chú ý:

    • Thứ tự của các phần tử trong mảng là ngẫu nhiên.
    • Kiểu dữ liệu của các phần tử trong mảng trả về giống với kiểu dữ liệu của các giá trị trong cột.

    2. Giải toán

    Chúng ta cùng nhau đi giải quyết từng yêu cầu của bài toán trên nhé!

    • Đối với yêu cầu ‘Tổng hợp các giá trị bao gồm cả giá trị NULL trong cột Cus_rank thành một mảng (group by id)’ chúng ta sử dụng hàm ARRAY_AGG() để thực hiện truy vấn như sau:

    Select id, ARRAY_AGG(cus_rank) as cus_rank_1 from Customer group by id;

    Tuy nhiên, trong MySQL Workbench lại không hỗ trợ hàm ARRAY_AGG => chúng ta sẽ thay thế bằng hàm JSON_ARRAYAGG như sau:

    Select id, JSON_ARRAYAGG(cus_rank) as cus_rank_1 from Customer group by id;

    Kết quả trả về như sau:

    array_2

    • Đối với case Loại bỏ các giá trị trùng lặp trong mảng, thường chúng ta sẽ sử dụng hàm array_distinct:

    Cú pháp: array_distinct(array) - Removes duplicate values from the array.

    Tuy nhiên, trong MySQL Workbench JSON_ARRAYAGG() không hỗ trợ DISTINCT. Bạn có thể SELECT DISTINCT trong truy vấn subquery và sau đó tổng hợp, như sau:

    SELECT id, JSON_ARRAYAGG(cus_rank) AS cus_rank_1 FROM (SELECT DISTINCT id, cus_rank from Customer) a GROUP BY id;

    Kết quả trả về như sau:

    array_3

    Trên đây là một vài chia sẻ của mình, nếu các bạn có cách làm nào hay, đừng ngần ngại comment nhé. Hẹn gặp lại mọi người trong bài viết tiếp theo.

    Tài liệu tham khảo:

  • Hàm LAG, LEAD trong SQL và ví dụ cụ thể

    Hàm LAG, LEAD trong SQL và ví dụ cụ thể

    Xin chào mọi người, hôm nay mình sẽ chia sẻ với các bạn về hàm Lag và Lead trong SQL và ví dụ cụ thể để truy vấn dữ liệu.

    Chúng ta có 1 bảng dữ liệu như sau:

    Table_cus

    Đề bài: Lấy ra giá trị cus_rank liền trước (Pre_cus_rank) của cùng 1 cus_id trong bảng Customer. Đối với case null thì gán Pre_cus_rank = cus_rank.

    Để giải quyết được bài toán trên chúng ta sẽ phải sử dụng đến hàm LAG, vậy chức năng của hàm LAG là gì?

    1. Chức năng hàm LAG

    Cú pháp:

    LAG (value_expr [, offset ]) [ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )

    Chức năng: Hàm LAG trả về các giá trị cho một hàng tại một khoảng lệch nhất định phía trên (trước) hàng hiện tại trong phân vùng.

    Chi tiết:

    • value_expr: Cột mục tiêu hoặc biểu thức mà hàm hoạt động trên đó.
    • offset: Một tham số tùy chọn chỉ định số lượng hàng trước hàng hiện tại cần trả về giá trị. Phần bù có thể là một số nguyên không đổi hoặc một biểu thức đánh giá thành một số nguyên. Nếu bạn không chỉ định chênh lệch, Amazon Redshift sẽ sử dụng 1 làm giá trị mặc định. Độ lệch bằng 0 cho biết hàng hiện tại.
    • IGNORE NULLS: Thông số kỹ thuật tùy chọn chỉ ra rằng Amazon Redshift nên bỏ qua các giá trị null khi xác định hàng nào sẽ sử dụng. Giá trị null được bao gồm nếu IGNORE NULLS không được liệt kê.
    • RESPECT NULLS: Cho biết Amazon Redshift phải bao gồm các giá trị null khi xác định hàng nào sẽ sử dụng. RESPECT NULLS được hỗ trợ theo mặc định nếu bạn không chỉ định IGNORE NULLS.
    • OVER: Chỉ định phân vùng và thứ tự.
    • PARTITION BY window_partition: Đối số tùy chọn đặt phạm vi bản ghi cho mỗi nhóm trong mệnh đề OVER. 8 ORDER BY window_ordering: Sắp xếp các hàng trong mỗi phân vùn

    2. Giải toán

    Chúng ta cùng nhau đi giải quyết từng yêu cầu của bài toán trên nhé!

    • Đối với yêu cầu ‘Lấy ra giá trị cus_rank liền trước của cùng 1 cus_id trong bảng Customer’ chúng ta sử dụng hàm lag để thực hiện truy vấn như sau:

    Select *, lag(Cus_rank,1) over (partition by id order by update_dt) as Pre_cus_rank from Customer

    Kết quả trả về như sau: lag_1

    • Đối với case null thì gán Pre_cus_rank = cus_rank của bài toán, ta thực hiện truy vấn như sau:

    with a as (Select *, lag(Cus_rank,1) over (partition by id order by update_dt) as Pre_cus_rank from Customer) select *, case when Pre_cus_rank <> Cus_rank then Pre_cus_rank else Cus_rank end as Pre_cus_rank_1 from a;

    Kết quả trả về như sau: lag_2

    • Trên đây là trường hợp lấy ra giá trị liền trước của 1 bản ghi (dùng hàm LAG), ngược lại muốn lấy giá trị tiếp sau của bản ghi đó chúng ta sẽ sử dụng hàm LEAD

    Cú pháp:LEAD (value_expr [, offset ]) [ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )

    Áp dụng:

    with a as (Select *, lead(Cus_rank) over (partition by id order by update_dt) as Update_cus_rank from Customer) select *, case when Update_cus_rank <> Cus_rank then Update_cus_rank else Cus_rank end as Update_cus_rank_1 from a;

    Kết quả: Lead_1

    Trên đây là một vài chia sẻ của mình, nếu các bạn có cách nào giải toán hay, đừng ngần ngại commnet nhé. Hẹn gặp lại mọi người trong bài viết tiếp theo.

    Tài liệu tham khảo:

  • Testing SCD Loại 1 trong ETL validator

    Testing SCD Loại 1 trong ETL validator

    Xin chào mọi người, ở bài viết SCD (Slowly Changing Dimension) là gì? Các loại SCD và ví dụ cụ thể (https://magz.techover.io/2023/07/03/scd-slowly-changing-dimension-la-gi-cac-loai-scd-va-vi-du-cu-the/) chúng ta đã nắm được sơ lược về SCD type 1. Hôm nay chúng ta cùng đi tìm hiểu kỹ hơn về SCD type 1 và các test cases cần thiết trong quá trình kiểm thử nhé!

    1. Tìm hiểu về SCD type 1 (Ghi đè – Overwrite)

    Ở SCD1 các dữ liệu mới sẽ ghi đè dữ liệu cũ, không theo dõi dữ liệu lịch sử.

    Ví dụ:

    Original Record – Dữ liệu gốc

    Cust_ID Name City
    1001 Nguyễn Văn A HCM
    1002 Nguyễn Văn B Nam Định

    Updated Record – Dữ liệu được thay đổi

    Cust_ID Name City
    1001 Nguyễn Văn A Hà Nội
    1002 Nguyễn Văn B Nam Định

    Ưu điểm: Dễ bảo trì.

    Nhược điểm: Không kiểm tra được dữ liệu lịch sử.

    2. SCD1 validation test cases

    image

    Kiểm tra SCD Loại 1 khá đơn giản vì chúng ta có thể đạt được kết quả bằng cách so sánh đơn giản giữa dữ liệu nguồn và dữ liệu đích. Ví dụ chúng ta có bẳng nguồn và bảng đích như sau:

    Employee table – bảng nguồn với các cột:

    Cust_ID
    Name
    City

    EMPLOYEE_DIM SCD Type 1 – bảng đích với các cột dưới đây:

    Cust_ID
    Name
    City
    Partition_date

    2.1 Test case 1: Chúng ta sẽ đi kiểm tra số lượng cột, tên cột và data type từng cột có đúng với yêu cầu document không?

    VD: Cus_ID có type là bigint, thì trên bảng đích data type cũng là bigint.

    Target Query: Describe Table_Name; or Desc Table_Name

    2.2 Test case 2: Kiểm tra số lượng records.

    Source Query: Select count (*) from db.Emlpoyee

    Target Query: Select count (*) from db.Employee_Dim

    2.3 Test case 3: Kiểm tra logic insert

    1. Insert thêm records mới ở bảng nguồn:

    Chúng ta sẽ thêm các records mới tại bảng nguồn, rồi khởi chạy job ETL. Sau khi job chạy thành công thì kiểm tra dữ liệu ở bảng đích có lên đúng và đủ so với bảng nguồn không.

    1. Delete records ở bảng nguồn

    Ngược lại với thêm mới, chúng ta sẽ xóa bớt dữ liệu ở bảng nguồn rồi chạy job ETL. Sau khi job chạy thành công thì kiểm tra dữ liệu ở bảng đích và bảng nguồn có mapping với nhau không.

    2.4 Test case 4: Kiểm tra logic update

    Tại bảng nguồn chúng ta sẽ update các bản ghi trước đó, rồi chạy job ETL. Sau khi job chạy thành công, kiểm tra dữ liệu bảng đích có lên đúng so với bảng nguồn không.

    2.5 Test case 5: Kiểm tra dữ liệu có bị duplicate không? – Xác minh tính duy nhất của dữ liệu

    Target Query:

    Select Cust_ID, Name, City, Partition_date, count(*) from db.Employee_Dim group by Cust_ID, Name, City, Partition_date having count(*) > 1 ;

    Select Cust_ID, count(Cust_ID) from db.Employee_Dim group by Cust_ID having count(Cust_ID) > 1;

    2.6 Test case 6: Kiểm tra dữ liệu null

    Target Query:

    Select * from db.Employee_Dim where Cust_ID is not null;

    Kết luận

    • SCD1: các dữ liệu mới sẽ ghi đè dữ liệu cũ, không theo dõi dữ liệu lịch sử
    • Kiểm tra số lượng bản ghi bảng đích so với bảng nguồn
    • Sau khi thay đổi dữ liệu bảng nguồn (insert, delete, update) phải thực hiện quy trình ETL để EMPLOYEE_DIM có dữ liệu mới nhất
    • Sửa đổi một vài bản ghi trong bảng nguồn bằng cách cập nhật các giá trị trong các cột chính (key columns) để kiểm tra logic update
    • Xác minh tính duy nhất của dữ liệu
    • Xác minh rằng sự khác biệt là như mong đợi

    Trên đây là những chia sẻ của mình về testing SCD type 1 trong ETL testing, mong rằng bài viết này sẽ giúp ích được cho các bạn. Nếu mọi người có thắc mắc hay câu hỏi gì đừng ngần ngại comment và cùng nhau giải đáp nhé!

    Hẹn gặp lại mọi người trong bài viết tiếp theo.

  • SCD (Slowly Changing Dimension) là gì? Các loại SCD và ví dụ cụ thể

    SCD (Slowly Changing Dimension) là gì? Các loại SCD và ví dụ cụ thể

    Xin chào mọi người, ở bài viết trước mình đã chia sẻ về ETL testing và trong quá trình test ETL mình có nhắc đến việc chúng ta sẽ đi kiểm tra, theo dõi cách ghi/thay đổi dữ liệu trong bảng đích đã đúng yêu cầu hay chưa? Vậy cách ghi/thay đổi dữ liệu đó là gì nhỉ? Hôm nay chúng ta sẽ đi tìm hiểu về Slowly Changing Dimension (SCD) nhé!


    1. Slowly Changing Dimension (SCD) là gì?

    image

    SCD (Slowly Changing Dimension) có thể hiểu một cách đơn giản nhất đó là: so sánh dữ liệu nguồn với dữ liệu bảng đích hiện có bằng cách sử dụng Khóa nghiệp vụ – Business key (Khóa duy nhất – Unique Key).

    Nếu không có bản ghi nào khớp thì sẽ coi là Bản ghi mới hoặc Nếu bản ghi khớp thì sẽ so sánh các thuộc tính với các thuộc tính đã thay đổi nếu dữ liệu có vẻ được cập nhật thì nó cập nhật bản ghi hoặc nếu không thì nó để nguyên như không thay đổi.

    Slowly Changing Dimension sẽ kiểm tra các thuộc tính cho ba trường hợp: Bản ghi mới, đã thay đổi hoặc chưa thay đổi.

    2. Tại sao cần Slowly Changing Dimension?

    Trong thế giới Datawarehouse, đôi khi việc theo dõi sự thay đổi kích thước theo thời gian là rất quan trọng. Điều này giúp chúng ta theo dõi dữ liệu tốt hơn và cũng tạo ra các sản phẩm hiệu quả tùy thuộc vào các trường hợp sử dụng.

    3. Tại sao lại gọi là Slowly Changing Dimension?

    Slowly Chaning Dimension – gọi như trên có nghĩa là chúng ta sẽ phải sử dụng thành phần này chỉ cho các bảng không được cập nhật thường xuyên.

    Lưu ý: Không áp dụng cho bảng thường xuyên thay đổi, chỉ áp dụng trên các bảng kích thước (Dimension table) thay đổi chậm.

    4. Các loại SCD – Ví dụ về Slowly Changing Dimensions trong data warehouse (High-Level)

    Các loại SCD (High-Level)

    Sau đây là các loại SCD, mỗi loại đều có một số ưu điểm và nhược điểm riêng.

    1. Type – 0 Giữ lại dữ liệu gốc
    2. Type – 1 Ghi đè lên dữ liệu hiện có
    3. Type – 2 Thêm các bản ghi mới trên cùng một bảng
    4. Type – 3 Thêm cột mới trên cùng một bảng
    5. Type – 4 Sử dụng bảng lịch sử
    6. Type – 6 Phương pháp kết hợp (Loại 1 + Loại 2 + Loại 3)

    image

    SCD type 1 (Ghi đè)

    Loại hành động SCD đầu tiên có thể thực hiện được là ghi đè. Ở đây, các giá trị kích thước được ghi đè bởi các giá trị mới.

    Ví dụ: Khách hàng Nguyễn Văn A chuyển từ HCM đến Hà Nội, thì thành phố của anh ấy sẽ được cập nhật với giá trị mới nhất, tức là Hà Nội

    Original Record – Dữ liệu gốc

    Cust_ID Name City
    1001 Nguyễn Văn A HCM
    1002 Nguyễn Văn B Nam Định

    Updated Record – Dữ liệu được thay đổi

    Cust_ID Name City
    1001 Nguyễn Văn A Hà Nội
    1002 Nguyễn Văn B Nam Định

    Trong ví dụ trên, khách hàng đã di chuyển từ nơi này sang nơi khác và địa chỉ gần đây đã được ghi đè lên các bản ghi hiện có.

    Nhược điểm: chúng ta không thể truy xuất thông tin địa chỉ trước đây của anh ấy từ tình huống này.

    SCD type 2

    • Thêm bản ghi mới
    • Chúng ta có thể nắm bắt thay đổi thuộc tính bằng cách thêm một cột mới làm khóa thay thế (VD: IsActive)

    Khi giá trị của bản ghi hiện tại thay đổi, bản ghi hiện tại được đánh dấu là không hoạt động (inactive – 0) và bản ghi mới được insert vào.

    Kết quả, sẽ có 2 bản ghi được liên kết với Nguyễn Văn A trong bảng được cập nhật, nhưng chỉ có phiên bản mới nhất được đánh dấu là hoạt động (active – 1).

    Original Record – Dữ liệu gốc

    Cust_ID Name City IsActive
    1001 Nguyễn Văn A HCM 1
    1002 Nguyễn Văn B Nam Định 1

    Updated Record – Dữ liệu được thay đổi

    Cust_ID Name City IsActive
    1001 Nguyễn Văn A HCM 0
    1001 Nguyễn Văn A Hà Nội 1
    1002 Nguyễn Văn B Nam Định 1

    Ưu điểm: thỏa mãn điểm trừ trước đó theo dõi dữ liệu lịch sử bằng cách tạo mục nhập mới trên cùng một bảng.

    Nhược điểm: mặc dù nó nắm bắt dữ liệu lịch sử, nhưng nó có thể dẫn đến hoạt động tốn kém ở phía cơ sở dữ liệu.

    SCD Type 3 (Thêm cột giá trị trước đó)

    Loại SCD phổ biến thứ ba là thêm một cột giá trị trước đó. Ở đây, các phiên bản trước và hiện tại được duy trì trong một hàng.

    Hạn chế của phương pháp này là nó sẽ chỉ có hiện tại/trước đó chứ không phải toàn bộ lịch sử

    Original Record – Dữ liệu gốc

    Cust_ID Name City
    1001 Nguyễn Văn A HCM
    1002 Nguyễn Văn B Nam Định

    Updated Record – Dữ liệu được thay đổi

    Cust_ID Name Current City Previous City
    1001 Nguyễn Văn A Hà Nội HCM
    1002 Nguyễn Văn B Nam Định

    SCD Type 4: Thêm bảng mới (Bảng lịch sử)

    • Sử dụng bảng Lịch sử
    • Trong cách tiếp cận này, bảng lịch sử riêng biệt được tạo ra để theo dõi các thay đổi.
    • Bảng chính sẽ chỉ có dữ liệu mới nhất
    • Ưu điểm: Phản hồi nhanh hơn đối với các truy vấn yêu cầu dữ liệu mới nhất. Dễ quản lý và viết mã, thuận lợi cho các thuộc tính có tính biến động cao hoặc được sử dụng thường xuyên ở kích thước rất lớn.
    • Nhược điểm: Đôi khi tổng hợp/tham gia giữa dữ liệu hoạt động và lịch sử có thể mất thời gian và trở nên phức tạp

    Customer Table

    Cust_ID Name City
    1001 Nguyễn Văn A Hà Nội
    1002 Nguyễn Văn B Nam Định

    Customer History Table

    Cust_ID Name City Last_updated_date
    1001 Nguyễn Văn A HCM 11-03-2023
    1001 Nguyễn Văn A Hà Nam 11-05-2023
    1001 Nguyễn Văn A Bắc Ninh 11-06-2023

    SCD Type 6

    Phương pháp kết hợp (Loại 1 + Loại 2 + Loại 3)

    • Ưu điểm: Mọi bản chụp thay đổi dữ liệu đều có trong cùng một bảng
    • Nhược điểm: Phức tạp, khó quản lý, bảng lớn.
    Cust_ID Name City EffectiveFrom EffectiveTo IsActive
    1001 Nguyễn Văn A HCM 11-03-2023 11-05-2023 0
    1001 Nguyễn Văn A Hà Nam 11-05-2023 11-06-2023 0
    1001 Nguyễn Văn A Bắc Ninh 11-06-2023 03-07-2023 0
    1001 Nguyễn Văn A Hà Nội 03-07-2023 1
    1002 Nguyễn Văn B Nam Định 22-02-2023 1

    Ở ví dụ trên, dữ liệu lịch sử được theo dõi trong hàng mới được xác định bởi các trường ngày bắt đầu và ngày kết thúc. Ngoài ra, chúng ta có thể có trường cờ isActive để xác định bản ghi hiện tại từ danh sách. Chúng ta có thể duy trì lịch sử của tất cả các thay đổi đồng thời cập nhật giá trị hiện tại trên các bản ghi hiện có.


    Trên đây là những kiến thức về SCD (Slowly Changing Dimension), Các loại SCD và kịch bản kiểm thử, bài viết cũng khá dài rồi, nếu có cơ hội, bài viết tới mình sẽ chia sẻ chi tiết hơn về SCD type 2. Mong rằng bài viết này sẽ giúp ích được cho mọi người trong quá trình tìm hiểu về SCD. Nếu mọi người có thắc mắc hay câu hỏi gì đừng ngần ngại comment và cùng nhau giải đáp nhé!

    Hẹn gặp lại mọi người trong bài viết tiếp theo.

    Tài liệu tham khảo:

    https://www.expressanalytics.com/blog/what-is-a-slowly-changing-dimension-and-the-logic-in-implementation/

    https://www.learnmsbitutorials.net/slowly-changing-dimensions-ssis.php

  • Tìm hiểu về ETL Testing, ETL (Extract, Transform, and Load) Process

    Tìm hiểu về ETL Testing, ETL (Extract, Transform, and Load) Process

    Xin chào mọi người, chắc hẳn các bạn đã từng nghe qua thuật ngữ ETL và tự hỏi rằng ETL là gì? Đối với tester muốn test ETL cần phải làm gì? Quy trình ETL ra sao? Tại sao phải ETL nhỉ? Và test ETL khác gì so với test app, test web? Trước đây, mình cũng thế, đặt ra hàng vạn câu hỏi vì sao rồi đi tìm hiểu, sau quá trình học và có chút kinh nghiệm thực tế, hôm nay mình xin giới thiệu đôi chút kiến thức về ETL testing, tổng quan về quy trình ETL và test ETL khác gì so với test app, web.

    1. Khái niệm

    1.1. ETL Thử nghiệm/Kiểm thử ETL là gì?

    Kiểm thử ETL là quá trình kiểm thử được thực hiện để đảm bảo dữ liệu được tải từ nguồn đến đích sau khi chuyển đổi là chính xác, là việc xác minh dữ liệu ở các giai đoạn trung gian đang được sử dụng giữa nguồn và đích. ETL là từ viết tắt của Extract-Transform-Load.

    1.2. Kiểm tra kho dữ liệu (data warehouse) là gì?

    Kiểm tra kho dữ liệu là một phương pháp kiểm tra trong đó dữ liệu bên trong kho dữ liệu được kiểm tra tính toàn vẹn, độ tin cậy, độ chính xác và tính nhất quán để tuân thủ khung dữ liệu của công ty. Mục đích chính của thử nghiệm kho dữ liệu là để đảm bảo rằng dữ liệu được tích hợp bên trong kho dữ liệu đủ tin cậy để một công ty đưa ra quyết định.

    1.3. ETL là gì? ETL hoạt động như nào?

    ETL là viết tắt của Extract-Transform-Load, là một quy trình trích xuất dữ liệu từ các hệ thống nguồn khác nhau, sau đó chuyển đổi dữ liệu (như áp dụng phép tính, phép nối, v.v.) Và cuối cùng tải dữ liệu vào hệ thống Kho dữ liệu. Trích xuất, chuyển đổi và tải (ETL) hoạt động bằng cách di chuyển dữ liệu từ hệ thống gốc đến hệ thống đích trong các chu kỳ định kỳ. Quy trình ETL hoạt động theo ba bước:

    • Extract: Trích xuất dữ liệu có liên quan từ cơ sở dữ liệu nguồn
    • Transform: Chuyển đổi dữ liệu để phù hợp hơn cho việc phân tích
    • Load: Tải dữ liệu vào cơ sở dữ liệu đích

    image

    1.4 Tại sao chúng ta phải ETL dữ liệu?

    Nếu chúng ta vẫn để nguyên các dữ liệu trên các database của các dữ liệu nguồn, chúng ta vẫn làm được các báo cáo phân tích, … Vậy tại sao chúng ta phải ETL dữ liệu làm gì?

    Như đã nói trên, bạn dùng ETL dữ liệu để chuyển mục đích, và tối ưu hóa mục đích sử dụng dữ liệu của các phần mềm từ ghi nhận các nghiệp vụ phát sinh hàng ngày, sang mục đích khai thác, vận hành, và phân tích các dữ liệu này để các nhà quản trị tìm ra các cơ may phát triển, các hoạt động kinh doanh mới đề vận hành doanh nghiệp – và đây chính là mục đích của ETL, và là nguyên nhân bạn cần công cụ này – chuyển đổi công năng sử dụng dữ liệu để cung cấp cho nhà quản trị.

    2. Quy trình kiểm thử ETL

    Tương tự như các Quy trình kiểm thử khác, ETL cũng trả qua các giai đoạn khác nhau. Các giai đoạn của quá trình kiểm thử ETL như sau:

    image

    3. ETL Tools

    Trên thị trường, có rất nhiều tools ETL, nhưng dưới đây là vài tool nổi bật nhất mọi người hay dùng:

    • Marklogic: https://www.marklogic.com/product/getting-started/
    • Oracle: https://www.oracle.com/index.html
    • Amazon redshift: https://aws.amazon.com/redshift/?Nc2=h_m1

    4. Mình đã sử dụng AWS trong ETL testing như thế nào?

    Như ở trên, chúng ta đã hiểu, ETL testing là kiểm tra để đảm bảo dữ liệu được tải từ nguồn đến đích sau khi chuyển đổi là chính xác. Lý thuyết là vậy, còn thực hành sẽ như nào nhỉ?

    Thật khó để mình có thể chia sẻ hết kinh nghiệm trong quá trình tìm hiểu, học và kiểm thử ETL trong bài viết này, nhưng mình sẽ lấy 1 Ví dụ để mô tả một cách dễ hiểu nhất những gì 1 tester cần làm trong quá trình kiểm thử ETL. Từ đó, các bạn dễ hình dung, hiểu hơn về ETL testing và có thể áp dụng trong tương lai.

    Ví dụ: Dưới đây là luồng di chuyển dữ liệu từ hệ thống nguồn (Stream data source) đến hệ thống đích (S3 Data Lake Target) trên AWS. Tester sẽ cần làm gì để test dữ liệu từ Source lên S3?

    image

    • B1. Bạn sẽ cần chuẩn bị dữ liệu thô (VD: file csv, file parquet, …) để up lên source.
    • B2. Vậy làm cách nào để cho data chạy từ source lên hệ thống đích được nhỉ? Bạn sẽ cần phải khởi chạy ETL job.
    • B3. Sau khi chạy, chúng ta sẽ kiểm tra job ETL đã chạy thành công chưa?
    • B4. Sau khi job chạy thành công, kiểm tra hệ thống đích (VD: S3 Data Lake Target) có tạo bảng như mong đợi?
    • B5. Kiểm tra dữ liệu bảng đích. VD: Số lượng bản ghi, số lượng column, tên column, data type từng bản ghi, data trong từng column, … Kiểm tra, theo dõi cách ghi/thay đổi dữ liệu trong bảng đích đã đúng yêu cầu hay chưa.

    5. ETL testing giống và khác gì so với test mobile, test web?

    5.1. Giống nhau:

    • Trước hết, để test bất kỳ cái gì chúng ta đều phải đọc và hiểu tài liệu đặc tả. Lên kế hoạch kiểm thử và estimate thời gian kiểm thử.
    • Thiết kế test case, đảm bảo test đủ các trường hợp có thể xảy ra.
    • Chuẩn bị data test, môi trường test, …
    • Mục đích cuối cùng đều là đảm bảo chất lượng sản phẩm, đảm bảo đầu ra đúng với nhu cầu khách hàng.
    • ….

    5.2. Khác nhau:

    Vậy ETL testing có gì khác biệt so với test web và mobile? Dưới đây là một vài điểm khác biệt mà mình thấy được trong quá trình làm việc với ETL:

    • Test app, web để kiểm tra giao diện (UI), tương tác và trải nghiệm người dùng (UX) hay các chức năng, giá trị hiển thị, … thì chúng ta sẽ cần so sánh đúng với yêu cầu đặc tả (SRS)/mong muốn của khách hàng. Tức là chúng ta đã có sẵn yêu cầu đầu ra, việc cần làm là kiểm tra tính đúng đắn so với yêu cầu đó.
    • Test ETL thì chúng ta cần có kiến thức về SQL. Vì thực tế luôn có những chuyển đổi dữ liệu (transform) phức tạp, hoặc transform data từ nhiều nguồn, nhiều khoảng thời gian, … nên để tìm ra được output expect (kết quả đầu ra) là điều không dễ dàng. Do đó, chúng ta cần viết script SQL chuẩn, đúng với tài liệu để có được kết quả đầu ra, từ đó mới có thể so sánh và kiểm tra dữ liệu.

    Kết luận

    • ETL là viết tắt của Trích xuất, Chuyển đổi và Tải (Extract, Transform and Load)

    • ETL cung cấp phương pháp di chuyển dữ liệu từ nhiều nguồn khác nhau vào kho dữ liệu.

    • Trong bước trích xuất đầu tiên, dữ liệu được trích xuất từ hệ thống nguồn vào khu vực tổ chức.

    • Trong bước chuyển đổi, dữ liệu được trích xuất từ nguồn được làm sạch và chuyển đổi.

    • Tải dữ liệu vào kho dữ liệu đích là bước cuối cùng của quy trình ETL.

    Trên đây là những chia sẻ của mình về ETL testing, mong rằng bài viết này sẽ giúp ích được cho các bạn. Nếu mọi người có thắc mắc hay câu hỏi gì đừng ngần ngại comment và cùng nhau giải đáp nhé!

    Hẹn gặp lại mọi người trong bài viết tiếp theo.

    Tác giả bài viết

    HanhTM2

    Tài liệu tham khảo:

    Https://www.guru99.com/etl-extract-load-process.html

    Https://aws.amazon.com/vi/what-is/etl/