DP-300 (Administering Relational Databases)
  • Xin chào
  • Giới thiệu
    • Liên hệ
    • More ...
  • dp-300
    • Topic 1
      • [1-10]
        • Question #1
          • Solution
        • Question #2
          • Solution
        • Question #3
          • Solution
        • Question #4
          • Solution
        • Question #5
          • Solution
          • Di chuyển SQL Server lên Azure SQL Managed Instance
        • Question #6 *
          • Solution
        • Question #7 *
          • Solution
        • Question #8 *
          • Solution
        • Question #9 *
          • Solution
        • Question #10
          • Solution
      • [11-20]
        • Question #11
          • Solution
      • More questions ...
    • More topics ...
Powered by GitBook
On this page
Export as PDF
  1. dp-300
  2. Topic 1
  3. [1-10]
  4. Question #9 *

Solution

Đáp án đúng cho việc lưu trữ dữ liệu Purchases trong Azure Databricks

Bạn cần hỗ trợ pipeline tải dữ liệu gia tăng theo giờ và biến thiên theo từng StoreID, đồng thời tối ưu chi phí lưu trữ. Do đó, bạn cần chọn partitioning hợp lý và định dạng lưu trữ tối ưu.


1. Chiến lược Partitioning

✅ .partitionBy("StoreID", "Year", "Month", "Day", "Hour")

Vì sao chọn partitionBy?

  • Partition giúp truy vấn nhanh hơn → Nếu dữ liệu được phân vùng theo StoreID, Year, Month, Day, Hour, khi truy vấn theo StoreID hoặc theo giờ, Databricks sẽ chỉ đọc các phân vùng cần thiết thay vì toàn bộ dữ liệu.

  • Tăng hiệu suất cho tải dữ liệu gia tăng (incremental load) → Vì pipeline tải dữ liệu theo giờ, việc phân vùng theo thời gian sẽ giúp tối ưu hiệu suất truy vấn và lưu trữ.

Vì sao không chọn các phương án khác?

  • ❌ .bucketBy() → Chỉ giúp tổ chức dữ liệu trong một số lượng bucket cố định, không hỗ trợ partition pruning (lọc nhanh dữ liệu).

  • ❌ .sortBy() → Chỉ giúp sắp xếp trong từng file nhưng không tạo partition.

  • ❌ .range() → Không phải là tùy chọn hợp lệ trong .write().


2. Định dạng lưu trữ

✅ .parquet("/Purchases")

Vì sao chọn Parquet?

  • Lưu trữ theo cột (columnar storage) → Hiệu suất truy vấn cao hơn CSV hoặc JSON.

  • Nén dữ liệu tốt hơn → Giảm chi phí lưu trữ, đặc biệt khi lưu trữ dữ liệu lớn.

  • Hỗ trợ tốt khi sử dụng partitionBy → Giúp đọc dữ liệu nhanh hơn khi truy vấn theo thời gian hoặc StoreID.

Vì sao không chọn các phương án khác?

  • ❌ .csv("/Purchases") → Không hỗ trợ partition pruning và chiếm nhiều dung lượng hơn.

  • ❌ .json("/Purchases") → Thích hợp hơn cho dữ liệu phi cấu trúc, nhưng hiệu suất truy vấn thấp hơn Parquet.

  • ❌ .saveAsTable("/Purchases") → Dùng để lưu dữ liệu vào bảng trong Databricks nhưng không trực tiếp hỗ trợ partitioning hiệu quả như .parquet().


3. Mã lệnh hoàn chỉnh

df.write
    .partitionBy("StoreID", "Year", "Month", "Day", "Hour")
    .mode("append")
    .parquet("/Purchases")

4. Tóm tắt lựa chọn đúng

Lựa chọn

Giải thích

Partitioning Method

.partitionBy("StoreID", "Year", "Month", "Day", "Hour") (tối ưu hóa tải dữ liệu gia tăng và truy vấn)

Storage Format

.parquet("/Purchases") (hiệu suất cao, giảm chi phí lưu trữ)


🚀 Lợi ích của phương pháp này

✅ Hỗ trợ tải dữ liệu gia tăng theo giờ, tối ưu hiệu suất truy vấn. ✅ Tiết kiệm chi phí lưu trữ do Parquet nén dữ liệu tốt. ✅ Dễ dàng mở rộng cho lượng dữ liệu lớn trong Azure Databricks.

PreviousQuestion #9 *NextQuestion #10

Last updated 2 months ago