Ngân hàng đề — Microsoft Azure Data Engineer

Tìm thấy 228 câu.

Câu 151
You are designing a dimension table in an Azure Synapse Analytics dedicated SQL pool.
You need to create a surrogate key for the table. The solution must provide the fastest query performance.
What should you use for the surrogate key?
  1. A a GUID column
  2. B a sequence object
  3. C an IDENTITY column
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc thiết kế bảng dimension (bảng chiều) trong Azure Synapse Analytics dedicated SQL pool (một phần của Azure Synapse Analytics, trước đây gọi là Azure SQL Data Warehouse).
📌 Yêu cầu chính: Tạo surrogate key (khóa thay thế, không dựa trên dữ liệu kinh doanh) cho bảng này, với mục tiêu tối ưu hóa hiệu suất truy vấn nhanh nhất (fastest query performance).
🛠️ Bối cảnh: Trong dedicated SQL pool, hiệu suất phụ thuộc vào cách lưu trữ và chỉ mục hóa dữ liệu. Surrogate key thường là khóa chính (clustered index), nên cần chọn loại cột giúp giảm fragmentation (phân mảnh), tăng tốc độ insert/update/query. Kiến thức dựa trên best practices mới nhất của Microsoft đến năm 2026 (Azure Synapse Analytics phiên bản hiện tại hỗ trợ IDENTITY với hiệu suất cao nhờ phân phối dữ liệu hash/round-robin và columnar storage).

✅ Đáp án đúng: "an IDENTITY column"

Lý do lựa chọn:

  • IDENTITY column tạo ra các giá trị số nguyên liên tục (sequential integers, ví dụ: 1,2,3...), tự động tăng mà không cần trigger.
  • Khi dùng làm clustered index (khóa chính), nó giảm page splits và fragmentation, dẫn đến hiệu suất truy vấn nhanh nhất trong dedicated SQL pool nhờ dữ liệu được sắp xếp thứ tự.
  • Microsoft khuyến nghị chính thức cho dimension tables để hỗ trợ PolyBase loading và query optimization.
    📘 Nguồn tham khảo:
  • Best practices for using a staging table - Azure Synapse Analytics (cập nhật 2024-2026).
  • Dimension tables - Azure Synapse Analytics (khuyến nghị IDENTITY cho surrogate keys).

🔍 Giải thích tất cả các phương án (đúng/sai)

  • ❌ "a GUID column"
    Sai vì GUID (Globally Unique Identifier) tạo giá trị ngẫu nhiên 128-bit (UUID), gây fragmentation cao khi insert dữ liệu lớn (page splits liên tục). Điều này làm chậm query performance đáng kể trong dedicated SQL pool, đặc biệt với dimension tables có hàng triệu rows. Không phù hợp cho clustered index.

  • ❌ "a sequence object"
    Sai vì sequence object tạo giá trị số nguyên nhưng không đảm bảo sequential (có thể skip hoặc gap do multi-session), cần DEFAULT constraint hoặc trigger để assign tự động. Nó phức tạp hơn IDENTITY, tăng overhead và không tối ưu bằng cho performance (fragmentation cao hơn sequential integers thuần túy).

  • ✅ "an IDENTITY column"
    Đúng vì cung cấp giá trị sequential integers tự động, lý tưởng cho clustered index trên dimension table. Giảm I/O, tăng tốc query/join với fact tables, và hỗ trợ tốt nhất cho mass insert (CTAS/PolyBase) trong Synapse dedicated SQL pool. Hiệu suất nhanh hơn hẳn các lựa chọn khác theo benchmarks Microsoft.

🧠 Lưu ý bổ sung: Trong Azure Synapse (2026), IDENTITY hỗ trợ RESEED và CACHE để scale lớn, vượt trội GUID/sequence cho data warehousing workloads!

Câu 152
You use Azure Stream Analytics to receive Twitter data from Azure Event Hubs and to output the data to an Azure Blob storage account.
You need to output the count of tweets during the last five minutes every five minutes. Each tweet must only be counted once.
Which windowing function should you use?
  1. A a five-minute Sliding window
  2. B a five-minute Session window
  3. C a five-minute Hopping window that has a one-minute hop
  4. D a five-minute Tumbling window
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi này thuộc lĩnh vực Azure Stream Analytics (một dịch vụ xử lý dữ liệu streaming thời gian thực của Microsoft Azure), không liên quan trực tiếp đến AWS như mô tả ban đầu (có thể là nhầm lẫn). Tình huống cụ thể:

  • Bạn đang sử dụng Azure Stream Analytics để nhận dữ liệu tweet từ Azure Event Hubs (nguồn dữ liệu streaming) và xuất kết quả ra Azure Blob Storage (kho lưu trữ).
  • Yêu cầu chính: Output số lượng tweet (count) trong khoảng thời gian 5 phút cuối cùng, và thực hiện output này mỗi 5 phút một lần. Quan trọng nhất: Mỗi tweet chỉ được đếm đúng một lần (không được đếm trùng lặp giữa các window).

📌 Mục tiêu: Sử dụng windowing function phù hợp để nhóm và tính toán dữ liệu theo cửa sổ thời gian (time window), đảm bảo không overlap giữa các window để tránh đếm trùng tweet. Đây là yêu cầu điển hình cho xử lý streaming analytics với dữ liệu thời gian thực như tweet từ Twitter.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: a five-minute Tumbling window

🛠️ Lý do chi tiết:

  • Tumbling window là loại cửa sổ không overlap (không chồng chéo), có kích thước cố định (5 phút ở đây). Nó bắt đầu và kết thúc độc lập với nhau, output kết quả chính xác mỗi 5 phút một lần (ví dụ: 00:00-05:00, 05:00-10:00,...).
  • Mỗi event (tweet) chỉ thuộc đúng một window, đảm bảo "mỗi tweet chỉ counted once" mà không bị đếm lặp.
  • Hoàn hảo cho yêu cầu "count trong last 5 minutes every 5 minutes" vì window emit kết quả định kỳ, không phụ thuộc vào event mới.
  • Theo tài liệu Azure Stream Analytics mới nhất (cập nhật đến 2026), Tumbling window hỗ trợ aggregation như COUNT() lý tưởng cho batch non-overlapping.

📋 Giải thích tất cả các phương án (đúng và sai)

Dưới đây là phân tích từng lựa chọn. Tôi giữ nguyên văn bản gốc bằng tiếng Anh, chỉ giải thích bằng tiếng Việt với emoji để dễ theo dõi:

  • ❌ [SAI] a five-minute Sliding window
    🧩 Giải thích: Sliding window có kích thước 5 phút nhưng slide liên tục theo mỗi event mới (thường hop nhỏ, mặc định 5 giây). Nó emit output mỗi khi có event mới, dẫn đến output quá thường xuyên (không phải "every 5 minutes"). Tweet có thể bị đếm nhiều lần do overlap lớn, vi phạm yêu cầu "chỉ counted once".

  • ❌ [SAI] a five-minute Session window
    🧩 Giải thích: Session window nhóm event dựa trên khoảng thời gian inactive (gap timeout, mặc định 5 phút), không phải cửa sổ cố định 5 phút. Nó không đảm bảo output every 5 minutes mà phụ thuộc vào dữ liệu (ví dụ: nếu tweet liên tục, session kéo dài; nếu gián đoạn, session ngắn). Tweet có thể overlap giữa các session, không phù hợp cho count chính xác non-overlapping.

  • ❌ [SAI] a five-minute Hopping window that has a one-minute hop
    🧩 Giải thích: Hopping window kích thước 5 phút nhưng hop 1 phút (chồng chéo 4 phút giữa các window). Nó output mỗi 1 phút, không khớp "every 5 minutes". Tweet bị đếm nhiều lần (lên đến 5 lần/window do overlap), vi phạm nghiêm trọng yêu cầu "chỉ counted once".

  • ✅ [ĐÚNG] a five-minute Tumbling window
    🛠️ Giải thích: Như đã nêu ở phần đáp án đúng: Không overlap, output định kỳ 5 phút, mỗi tweet chỉ trong 1 window duy nhất. Lý tưởng cho aggregation COUNT() trên streaming data.

📘 Tài liệu tham khảo (cập nhật mới nhất đến 2026)

Hy vọng phân tích này giúp bạn nắm vững! Nếu cần code mẫu ASA query, hãy hỏi thêm nhé 🚀.

Câu 153 Chọn nhiều đáp án
You have an Azure Stream Analytics job named Job1.

The metrics of Job1 from the last hour are shown in the following table.



The late arrival tolerance for Job1 is set to five seconds.

You need to optimize Job1.

Which two actions achieve the goal? Each correct answer presents a complete solution.

NOTE: Each correct answer is worth one point.
  1. A Increase the number of SUs.
  2. B Parallelize the query.
  3. C Resolve errors in output processing.
  4. D Resolve errors in input processing.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi thuộc kỳ thi Microsoft Certified: Azure Data Engineer Associate (DP-203), tập trung vào việc tối ưu hóa công việc Azure Stream Analytics (ASA) có tên Job1.

  • Bối cảnh: Job1 đang chạy với các chỉ số hiệu suất (metrics) từ giờ qua được hiển thị trong bảng hình ảnh. Late arrival tolerance được đặt là 5 giây (nghĩa là ASA chấp nhận dữ liệu muộn tối đa 5 giây trước khi coi là quá hạn).
  • Vấn đề cần giải quyết: Watermark delay trung bình là 20 giây (cao hơn nhiều so với tolerance 5 giây), cho thấy dữ liệu đầu vào đến muộn, gây tích tụ backlog (độ trễ watermark), dẫn đến hiệu suất kém. Các metrics khác: | Metric | Time Aggregation | Value | |-------------------------|------------------|-------| | SU (Memory) % Utilization | Average | 70 | | CPU % Utilization | Average | 20 | | Runtime Errors | Total | 0 | | Watermark Delay (seconds) | Average | 20 | | Input Deserialization Errors | Total | 0 |

📊 Phân tích metrics từ hình ảnh:

  • SU Memory Utilization 70%: Cao (gần ngưỡng cảnh báo 80%), cho thấy bộ nhớ gần hết công suất, có thể gây backlog.
  • CPU 20%: Thấp, không phải bottleneck.
  • Watermark Delay 20s: Vấn đề chính! Độ trễ watermark cao nghĩa là hệ thống không xử lý kịp dữ liệu muộn, dẫn đến mất dữ liệu hoặc hiệu suất kém.
  • Không có lỗi runtime/input deserialization: Không có vấn đề về lỗi xử lý đầu vào/đầu ra.

Mục tiêu: Chọn hai hành động để tối ưu Job1, giảm watermark delay và cải thiện throughput (mỗi đáp án đúng đáng 1 điểm).

🛠️ Kiến thức cập nhật (Azure Stream Analytics đến 2026): ASA sử dụng Streaming Units (SUs) để scale tài nguyên (1 SU ~ 1MB memory + 1 CPU core). Watermark delay cao thường do thiếu capacity hoặc query không parallel. Tài liệu mới nhất nhấn mạnh scale SU và partition/parallelize query để xử lý backlog (Azure Docs v2024+).

✅ Đáp án đúng (hai lựa chọn)

  • Increase the number of SUs.
  • Parallelize the query.

Lý do chọn:

  • Watermark delay cao (20s) kết hợp SU Memory 70% cho thấy thiếu capacity xử lý dữ liệu muộn. Tăng SUs sẽ tăng memory/throughput, giảm backlog nhanh chóng. Parallelize query (qua PARTITION BY hoặc INTO) cho phép scale out ngang, phân tán workload, giảm delay hiệu quả. Hai hành động này trực tiếp giải quyết bottleneck mà không cần fix lỗi (vì lỗi=0).

📋 Giải thích tất cả các phương án

✅ Increase the number of SUs.
Đúng 🟢: SU Memory cao 70% gây backlog, watermark delay 20s. Tăng SUs (scale up) tăng memory/CPU, xử lý nhanh hơn dữ liệu muộn (late events). Theo docs, scale SU là cách nhanh nhất giảm watermark delay khi utilization >70%.

✅ Parallelize the query.
Đúng 🟢: Query chưa parallel (CPU thấp 20% chứng tỏ single-threaded). Sử dụng PARTITION BY hoặc INTO để chia partition, cho phép ASA chạy nhiều instance song song, giảm delay từ 20s xuống. Hiệu quả với dữ liệu muộn > tolerance 5s.

❌ Resolve errors in output processing.
Sai 🔴: Không có Runtime Errors (Total=0) hoặc output errors. Vấn đề không phải lỗi xử lý đầu ra, mà là capacity (memory/delay). Fix lỗi không cần thiết và không giảm watermark delay.

❌ Resolve errors in input processing.
Sai 🔴: Input Deserialization Errors (Total=0), không có vấn đề deserialize đầu vào. Watermark delay do dữ liệu muộn thực tế (không phải lỗi parsing), nên fix input errors vô ích.

📘 Tài liệu tham khảo

Hy vọng phân tích giúp bạn nắm vững! 🚀 Nếu cần demo code parallelize, hỏi nhé!

Câu 154
You are planning a streaming data solution that will use Azure Databricks. The solution will stream sales transaction data from an online store. The solution has the following specifications:
The output data will contain items purchased, quantity, line total sales amount, and line total tax amount.

✑ Line total sales amount and line total tax amount will be aggregated in Databricks.
✑ Sales transactions will never be updated. Instead, new rows will be added to adjust a sale.
You need to recommend an output mode for the dataset that will be processed by using Structured Streaming. The solution must minimize duplicate data.
What should you recommend?
  1. A Update
  2. B Complete
  3. C Append
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc thiết kế giải pháp streaming data sử dụng Azure Databricks để xử lý dữ liệu giao dịch bán hàng từ cửa hàng trực tuyến. Các đặc điểm chính của giải pháp bao gồm:

  • Dữ liệu đầu vào: Dữ liệu giao dịch bán hàng được stream liên tục.
  • Dữ liệu đầu ra: Bao gồm thông tin sản phẩm mua, số lượng, line total sales amount (tổng doanh thu dòng) và line total tax amount (tổng thuế dòng). Những trường này được tổng hợp (aggregated) ngay trong Databricks.
  • Đặc tính dữ liệu: Giao dịch bán hàng không bao giờ được cập nhật (never updated). Thay vào đó, các điều chỉnh sẽ được thực hiện bằng cách thêm các hàng mới (new rows added to adjust a sale).
  • Yêu cầu chính: Khuyến nghị output mode cho dataset được xử lý bằng Structured Streaming trong Databricks, sao cho giảm thiểu dữ liệu trùng lặp tối đa (minimize duplicate data).
  • Hình ảnh minh họa (từ examtopics): Hiển thị luồng dữ liệu từ nguồn stream vào Databricks để tổng hợp, nhấn mạnh aggregation trên sales và tax amounts.

Mục tiêu cốt lõi: Chọn output mode phù hợp với dữ liệu append-only (chỉ thêm mới, không sửa/xóa), hỗ trợ aggregation, và tránh output dư thừa gây duplicate. Structured Streaming trong Azure Databricks (dựa trên Apache Spark 3.x+, cập nhật đến 2026) hỗ trợ 3 output modes chính: Append, Complete, Update.

📘 Tài liệu tham khảo:

✅ Đáp án đúng: Append

Lý do lựa chọn:

  • Append mode chỉ output các hàng mới được thêm vào result table từ batch hiện tại, không output lại dữ liệu cũ. Điều này lý tưởng cho dữ liệu append-only như mô tả (sales transactions never updated, chỉ thêm new rows để adjust).
  • Với aggregation (như sum sales/tax), Append hỗ trợ event-time windowing hoặc watermarking để xử lý late data mà không duplicate toàn bộ table.
  • Minimize duplicate: Không re-emit dữ liệu đã xử lý trước, chỉ append kết quả aggregate mới → Giảm duplicate tối đa, phù hợp streaming real-time sales.
  • Trong Azure Databricks (Spark Runtime 14.x+ đến 2026), Append là mode mặc định cho streaming queries append-only, hiệu suất cao với sink như Delta Lake hoặc Kafka.

🛠️ Giải thích tất cả các phương án (đúng/sai)

  • Append ✅ Đúng
    Như giải thích trên, mode này chỉ append new rows từ kết quả aggregate mới nhất, phù hợp dữ liệu không update/xóa. Giảm duplicate bằng cách tránh re-output toàn bộ dataset cũ. Hỗ trợ aggregation với watermark để handle late data mà không lặp dữ liệu.

  • Update ❌ Sai
    Mode này output chỉ các hàng thay đổi (updated rows) so với batch trước, bao gồm cả insert/update/delete. Với dữ liệu không update (chỉ append new rows), nó vẫn có thể emit duplicate nếu aggregate thay đổi do late data, dẫn đến output lặp các giá trị aggregate cũ khi có adjustment rows → Không minimize duplicate hiệu quả.

  • Complete ❌ Sai
    Mode này output toàn bộ result table đã update mỗi batch trigger, kể cả dữ liệu cũ không đổi. Với aggregation sales/tax trên dataset lớn, nó sẽ duplicate toàn bộ dữ liệu cũ lặp lại mỗi lần → Tốn tài nguyên cao, không phù hợp minimize duplicate, chỉ dùng cho global aggregates nhỏ (như total sales toàn cục). Không hỗ trợ streaming unbounded datasets lớn.

Câu 155
You have an Azure subscription that contains an Azure data factory named ADF1 and a Log Analytics workspace named Workspace1.

You need to configure ADF1 to send execution information for pipelines to Workspace1.

What should you configure?
  1. A diagnostic settings
  2. B metrics
  3. C logs
  4. D alerts
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào Azure Data Factory (ADF) trong Azure subscription. Cụ thể, bạn có một ADF tên ADF1 và một Log Analytics workspace tên Workspace1. Nhiệm vụ là cấu hình ADF1 để gửi thông tin thực thi (execution information) của các pipeline (như trạng thái chạy, lỗi, thời gian thực thi, v.v.) đến Workspace1.
✅ Mục tiêu chính: Kích hoạt việc gửi dữ liệu giám sát (monitoring data) từ ADF sang Log Analytics để phân tích log và theo dõi pipeline một cách tập trung. Đây là tính năng tiêu chuẩn trong Azure Monitor, giúp tích hợp ADF với Log Analytics mà không cần code tùy chỉnh.
🛠️ Ngữ cảnh kỹ thuật: Execution information của pipeline bao gồm các sự kiện chi tiết (activity runs, pipeline runs), được lưu dưới dạng logs. Việc cấu hình này sử dụng diagnostic settings để route logs đến đích Log Analytics.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: diagnostic settings
📘 Lý do chi tiết: Trong Azure Data Factory (phiên bản mới nhất đến 2026), để gửi execution information của pipelines (bao gồm pipeline runs, activity runs, trigger runs) đến Log Analytics workspace, bạn phải cấu hình Diagnostic settings tại resource ADF1. Diagnostic settings cho phép chọn các log categories như PipelineRuns, ActivityRuns và route chúng trực tiếp đến Workspace1 qua Azure Monitor. Quy trình: Vào ADF → Monitoring → Diagnostic settings → Add diagnostic setting → Chọn logs → Send to Log Analytics. Điều này đảm bảo dữ liệu thực thi được gửi realtime và query được bằng KQL trong Log Analytics.
🔗 Nguồn tham khảo:

📋 Giải thích tất cả các phương án (đúng/sai)

Dưới đây là phân tích từng lựa chọn, giữ nguyên nội dung gốc bằng tiếng Anh, kèm giải thích rõ ràng bằng tiếng Việt:

  • diagnostic settings
    ✅ Đúng: Đây là phương án chính xác nhất. Diagnostic settings là cơ chế cốt lõi của Azure Monitor để thu thập và route logs chi tiết về execution (như PipelineRuns, ActivityRuns) từ ADF sang Log Analytics workspace. Không có cách nào khác trực tiếp hơn để gửi execution information mà không qua diagnostic settings. Tính năng này hỗ trợ đầy đủ từ ADF v2 và được khuyến nghị chính thức.

  • metrics
    ❌ Sai: Metrics chỉ cung cấp dữ liệu số lượng cơ bản (như số lượng pipeline runs thành công/thất bại, thời gian thực thi trung bình) dưới dạng số liệu định lượng, không phải execution information chi tiết (dữ liệu log sự kiện cụ thể). Metrics không gửi đến Log Analytics theo cách cần thiết cho phân tích sâu; chúng chủ yếu dùng cho charts và alerts, không phù hợp với yêu cầu gửi logs pipeline.

  • logs
    ❌ Sai: "Logs" chỉ là loại dữ liệu (resource logs) được tạo ra từ ADF, nhưng bạn không thể cấu hình trực tiếp "logs" để gửi đến Workspace1. Logs phải được kích hoạt và route qua diagnostic settings. Nếu chỉ chọn logs mà không cấu hình settings, dữ liệu sẽ không được gửi, dẫn đến thiếu execution information trong Log Analytics.

  • alerts
    ❌ Sai: Alerts dùng để thiết lập thông báo (notifications) dựa trên metrics/logs (ví dụ: alert khi pipeline thất bại), nhưng không gửi execution information đầy đủ đến Log Analytics. Alerts chỉ trigger action như email/SMS, không phải cơ chế lưu trữ hoặc route dữ liệu chi tiết từ ADF sang workspace.

🧠 Lưu ý bổ sung: Trong các phiên bản Azure mới nhất (2024-2026), ADF hỗ trợ tích hợp tự động hơn với Azure Monitor, nhưng diagnostic settings vẫn là bước bắt buộc. Nếu dùng Managed Virtual Network hoặc Git integration, quy trình tương tự không thay đổi. Hãy kiểm tra quyền IAM (Monitoring Reader) cho Log Analytics!

Câu 156
You have an Azure Synapse Analytics dedicated SQL pool.

You need to create a fact table named Table1 that will store sales data from the last three years. The solution must be optimized for the following query operations:

•Show order counts by week.
•Calculate sales totals by region.
•Calculate sales totals by product.
•Find all the orders from a given month.

Which data should you use to partition Table1?
  1. A product
  2. B month
  3. C week
  4. D region
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc phân vùng (partitioning) một bảng fact tên Table1 trong Azure Synapse Analytics dedicated SQL pool (nay là một phần của Microsoft Fabric, nhưng nguyên tắc partitioning vẫn giữ nguyên đến phiên bản mới nhất 2026). Bảng này lưu trữ dữ liệu bán hàng (sales data) của 3 năm gần nhất, và cần được tối ưu hóa cho các truy vấn sau:

  • Show order counts by week: Hiển thị số lượng đơn hàng theo tuần.
  • Calculate sales totals by region: Tính tổng doanh số theo khu vực.
  • Calculate sales totals by product: Tính tổng doanh số theo sản phẩm.
  • Find all the orders from a given month: Tìm tất cả đơn hàng từ một tháng cụ thể.

📌 Mục tiêu chính: Chọn cột phân vùng phù hợp để tối ưu hiệu suất truy vấn (query performance) thông qua partition elimination – cơ chế tự động loại bỏ các phân vùng không liên quan, giảm I/O và tăng tốc độ. Trong dedicated SQL pool, partitioning lý tưởng cho fact table thường dựa trên cột ngày tháng (date column) vì dữ liệu lịch sử và truy vấn thời gian-based phổ biến. Dữ liệu chỉ 3 năm nên số lượng phân vùng phải cân bằng (không quá nhiều để tránh overhead).

✅ Đáp án đúng: month

Lý do lựa chọn:
Phân vùng theo tháng (month) là tối ưu nhất vì:

  • Hỗ trợ trực tiếp truy vấn "Find all the orders from a given month" → partition elimination loại bỏ hoàn toàn các phân vùng khác, chỉ scan tháng cần thiết.
  • Phù hợp với order counts by week (tuần nằm trong tháng, dễ prune partitions).
  • Giúp sales totals by region/product nhanh hơn khi kết hợp filter thời gian (thường có trong WHERE clause).
  • Với 3 năm dữ liệu → khoảng 36 partitions (một tháng một partition), cân bằng giữa granularity và performance (không quá nhỏ như week gây >150 partitions, overhead cao).
    🛠️ Best practice Azure Synapse 2026: Partition theo year-month (e.g., DATEFROMPARTS(YEAR(date_col), MONTH(date_col), 1)) để tránh skew và hỗ trợ sliding window (xóa dữ liệu cũ).

📋 Giải thích tất cả các phương án (đúng/sai)

  • ❌ [SAI] product
    Phân vùng theo product không tối ưu vì các truy vấn chính không filter theo product (chỉ calculate totals, không phải where condition chính). Truy vấn theo week/month sẽ scan tất cả partitions, không có elimination. Product thường dùng cho dimension table, không phải fact (dễ skew nếu số product lớn).

  • ✅ [ĐÚNG] month
    Như giải thích trên: Tối ưu cho time-based queries (week, month), cân bằng số partitions cho 3 năm dữ liệu, hỗ trợ partition elimination hiệu quả nhất.

  • ❌ [SAI] week
    Phân vùng theo week tạo quá nhiều partitions (~156 cho 3 năm), gây overhead quản lý cao (metadata, maintenance). Queries theo month chỉ prune một phần (không toàn bộ tháng), kém hiệu quả hơn month partitioning. Azure khuyến cáo tránh granularity quá nhỏ cho historical data.

  • ❌ [SAI] region
    Region không liên quan đến time-based queries (week, month), nên không có elimination cho "orders from a given month". Chỉ hữu ích nếu queries chủ yếu filter region, nhưng ở đây region chỉ dùng cho aggregate totals (không phải filter chính). Dễ skew nếu region imbalance.

📘 Tài liệu tham khảo (cập nhật đến 2026)

🧩 Kết luận: Month là lựa chọn data engineering best practice cho workload này! Nếu implement, dùng CREATE TABLE với PARTITION scheme trên date column.

Câu 157
You have an enterprise data warehouse in Azure Synapse Analytics named DW1 on a server named Server1.
You need to determine the size of the transaction log file for each distribution of DW1.
What should you do?
  1. A On DW1, execute a query against the sys.database_files dynamic management view.
  2. B From Azure Monitor in the Azure portal, execute a query against the logs of DW1.
  3. C Execute a query against the logs of DW1 by using the Get-AzOperationalInsightsSearchResult PowerShell cmdlet.
  4. D On the master database, execute a query against the sys.dm_pdw_nodes_os_performance_counters dynamic management view.
Xem giải thích

🧩 Giải thích nội dung câu hỏi

Câu hỏi tập trung vào Azure Synapse Analytics (trước đây gọi là Azure SQL Data Warehouse), một dịch vụ kho dữ liệu doanh nghiệp (enterprise data warehouse) hỗ trợ kiến trúc Massively Parallel Processing (MPP). Ở đây, bạn có kho dữ liệu tên DW1 nằm trên server Server1. Nhiệm vụ là xác định kích thước của transaction log file cho từng distribution (phân phối dữ liệu) trong DW1.

📘 Lý do cần kiến thức chuyên sâu: Trong Azure Synapse Analytics, dữ liệu được phân phối (distributed) qua nhiều Compute nodes (nút tính toán), mỗi node quản lý transaction log riêng cho các distribution. Transaction log không giống SQL Server thông thường mà được theo dõi qua các Dynamic Management Views (DMVs) đặc thù của Synapse, cập nhật đến phiên bản mới nhất năm 2026 (Synapse Analytics tích hợp sâu với Fabric và hỗ trợ Gen2 storage).

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: On the master database, execute a query against the sys.dm_pdw_nodes_os_performance_counters dynamic management view.

🛠️ Lý do chi tiết:

  • DMV sys.dm_pdw_nodes_os_performance_counters cung cấp thông tin hiệu suất hệ điều hành trên từng PDW node (PolyBase Data Warehouse nodes), bao gồm kích thước transaction log file cho mỗi distribution.
  • Phải chạy query trên master database vì đây là nơi lưu trữ metadata toàn cục của Synapse workspace.
  • Counter cụ thể như Log File(s) Used Size (KB) hoặc Log File(s) Size (KB) giúp lấy dữ liệu chính xác per distribution per node. Đây là phương pháp chuẩn theo tài liệu Microsoft (cập nhật 2026).

📋 Phân tích tất cả các phương án (đúng/sai)

Dưới đây là phân tích từng lựa chọn, giữ nguyên văn bản gốc tiếng Anh. Mỗi phương án được đánh giá với emoji và giải thích rõ ràng bằng tiếng Việt:

  • ❌ On DW1, execute a query against the sys.database_files dynamic management view.
    Sai vì: sys.database_files chỉ hoạt động trên SQL Server thông thường hoặc single database, không hỗ trợ trong môi trường MPP của Synapse Analytics. Nó không thể truy vấn transaction log per distribution trên các compute nodes phân tán, dẫn đến lỗi hoặc dữ liệu không đầy đủ.

  • ❌ From Azure Monitor in the Azure portal, execute a query against the logs of DW1.
    Sai vì: Azure Monitor thu thập logs và metrics tổng quát (như CPU, storage), nhưng không cung cấp chi tiết transaction log size per distribution. Logs của DW1 chỉ ghi sự kiện, không phải kích thước file cụ thể theo từng phân phối dữ liệu.

  • ❌ Execute a query against the logs of DW1 by using the Get-AzOperationalInsightsSearchResult PowerShell cmdlet.
    Sai vì: Cmdlet Get-AzOperationalInsightsSearchResult dùng cho Log Analytics workspace (Operational Insights), chỉ query text-based logs, không hỗ trợ metrics hiệu suất như transaction log size per distribution. Nó phù hợp cho tìm kiếm log sự kiện, không phải đo lường file size.

  • ✅ On the master database, execute a query against the sys.dm_pdw_nodes_os_performance_counters dynamic management view.
    Đúng vì: Như đã giải thích ở trên, đây là DMV chuyên biệt của Synapse để lấy performance counters từ OS trên từng PDW node, bao gồm transaction log metrics per distribution. Query mẫu:

    SELECT * FROM sys.dm_pdw_nodes_os_performance_counters 
    WHERE counter_name LIKE '%Log File(s)%' AND object_name LIKE '%Databases%';
    

📚 Tài liệu tham khảo

Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần query mẫu chi tiết hơn, hãy hỏi nhé!

Câu 158
You have an Azure Blob storage account named storage1 and an Azure Synapse Analytics serverless SQL poo1 named Pool1.

From Pool1, you plan to run ad-hoc queries that target storage1.

You need to ensure that you can use shared access signature (SAS) authorization without defining a data source.

What should you create first?
  1. A a stored access policy
  2. B a server-level credential
  3. C a managed identity
  4. D a database scoped credential
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi này xoay quanh việc thiết lập quyền truy cập dữ liệu từ Azure Synapse Analytics serverless SQL pool (tên là Pool1) đến Azure Blob storage (tên là storage1) để chạy các truy vấn ad-hoc (tức là các truy vấn tạm thời, không cần cấu hình trước).

📌 Yêu cầu cụ thể: Sử dụng Shared Access Signature (SAS) để ủy quyền truy cập, mà không cần định nghĩa một data source (nguồn dữ liệu ngoại vi). Bạn cần tạo đối tượng gì đầu tiên để đảm bảo điều này hoạt động.

🛠️ Bối cảnh kỹ thuật (dựa trên kiến thức Azure cập nhật đến 2026):

  • Serverless SQL pools trong Azure Synapse cho phép truy vấn dữ liệu bên ngoài (như Blob storage) mà không cần workspace dedicated.
  • SAS là token tạm thời cấp quyền đọc/ghi cho Blob mà không cần key account đầy đủ.
  • Để sử dụng SAS trực tiếp trong ad-hoc queries (ví dụ: OPENROWSET với SAS URL), bạn phải tạo credential ở mức database để Synapse xác thực SAS token một cách an toàn, tránh hardcode token vào query.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: a database scoped credential

Lý do chi tiết:

  • Trong Azure Synapse serverless SQL pools, để truy vấn Blob storage qua SAS mà không cần data source, bạn cần tạo database scoped credential trước tiên. Credential này lưu trữ SAS token dưới dạng secret, cho phép sử dụng trong các hàm như OPENROWSET hoặc EXTERNAL TABLE ad-hoc.
  • Cú pháp ví dụ: CREATE DATABASE SCOPED CREDENTIAL sas_cred WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'sv=...&sig=...'
  • Điều này đảm bảo SAS được quản lý an toàn tại database level (scoped đến Pool1), hỗ trợ ad-hoc queries mà không expose token. Đây là best practice từ Microsoft docs (cập nhật 2024-2026, không thay đổi cơ bản).

📋 Giải thích tất cả các phương án (đúng/sai)

Dưới đây là phân tích từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh:

  • ❌ a stored access policy
    Sai vì: Stored access policy được tạo trên Azure Storage account (không phải trên Synapse), dùng để giới hạn quyền SAS theo thời gian/IP. Nó không liên quan đến việc cấu hình truy cập từ Synapse pool, và không hỗ trợ ad-hoc queries trực tiếp mà không cần credential.

  • ❌ a server-level credential
    Sai vì: Server-level credential áp dụng cho toàn bộ server (như dedicated SQL pools), không scoped đến database cụ thể. Với serverless SQL pools, nó không được hỗ trợ cho SAS ad-hoc; thay vào đó cần database-scoped để isolate quyền truy cập.

  • ❌ a managed identity
    Sai vì: Managed identity dùng cho xác thực dựa trên Azure AD (như system-assigned MI trên Synapse workspace), không phải SAS. SAS là key-based auth, không tương thích với MI; dùng MI sẽ yêu cầu data source hoặc external table với RBAC, vi phạm yêu cầu "không data source".

  • ✅ a database scoped credential
    Đúng vì: Như giải thích ở trên, đây là bước đầu tiên bắt buộc cho SAS trong serverless pools, cho phép ad-hoc queries an toàn (ví dụ: SELECT * FROM OPENROWSET(..., 'https://storage1.blob.core.windows.net/...sas', 'SELECT * FROM ...') AS x USING credential sas_cred).

📘 Tài liệu tham khảo

Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần demo code, hãy hỏi thêm nhé!

Câu 159
You are designing the folder structure for an Azure Data Lake Storage Gen2 account.

You identify the following usage patterns:

•Users will query data by using Azure Synapse Analytics serverless SQL pools and Azure Synapse Analytics serverless Apache Spark pools.
•Most queries will include a filter on the current year or week.
•Data will be secured by data source.

You need to recommend a folder structure that meets the following requirements:

•Supports the usage patterns
•Simplifies folder security
•Minimizes query times

Which folder structure should you recommend?
  1. A \DataSource\SubjectArea\YYYY\WW\FileData_YYYY_MM_DD.parquet
  2. B \DataSource\SubjectArea\YYYY-WW\FileData_YYYY_MM_DD.parquet
  3. C DataSource\SubjectArea\WW\YYYY\FileData_YYYY_MM_DD.parquet
  4. D \YYYY\WW\DataSource\SubjectArea\FileData_YYYY_MM_DD.parquet
  5. E WW\YYYY\SubjectArea\DataSource\FileData_YYYY_MM_DD.parquet
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi yêu cầu thiết kế cấu trúc thư mục (folder structure) cho tài khoản Azure Data Lake Storage Gen2 (ADLS Gen2), nhằm đáp ứng các mô hình sử dụng dữ liệu cụ thể:

  • Người dùng truy vấn dữ liệu bằng Azure Synapse Analytics serverless SQL pools và Azure Synapse Analytics serverless Apache Spark pools (các công cụ serverless không cần quản lý cluster, tối ưu cho truy vấn lớn).
  • Hầu hết các truy vấn sẽ có bộ lọc (filter) trên năm hiện tại (current year) hoặc tuần hiện tại (current week), giúp giảm lượng dữ liệu quét.
  • Dữ liệu được bảo mật theo nguồn dữ liệu (data source), nghĩa là cần dễ dàng áp dụng quyền truy cập (ACLs/RBAC) riêng cho từng nguồn.

Yêu cầu chính của cấu trúc thư mục:

  • Hỗ trợ mô hình sử dụng (usage patterns): Tối ưu cho filter year/week.
  • Đơn giản hóa bảo mật thư mục (simplifies folder security): Dễ gán quyền theo data source mà không phức tạp.
  • Giảm thời gian truy vấn (minimizes query times): Sử dụng partition pruning (loại bỏ partition không cần thiết) trong Synapse serverless, dựa trên cấu trúc thư mục phân cấp (hierarchical partitioning) như year/week/day.

🛠️ Nguyên tắc thiết kế tốt nhất (best practices theo tài liệu Microsoft cập nhật đến 2024-2026):

  • Đặt data source ở cấp cao nhất để dễ bảo mật (ACL inheritance).
  • Partition theo thứ tự filter phổ biến: Year trước Week (vì filter year trước sẽ prune mạnh hơn; week có thể lặp lại hàng năm như WW01).
  • Sử dụng định dạng thư mục như YYYY\WW để Synapse tự động nhận diện và prune (hỗ trợ Parquet với partition discovery).

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: \DataSource\SubjectArea\YYYY\WW\FileData_YYYY_MM_DD.parquet

Lý do:

  • Bảo mật đơn giản 🛡️: DataSource ở cấp root, dễ gán ACLs/RBAC riêng cho từng nguồn dữ liệu (ví dụ: chỉ user A truy cập DataSource=Sales).
  • Tối ưu truy vấn ⚡: Cấu trúc YYYY\WW hỗ trợ partition pruning hoàn hảo trong Synapse serverless SQL/Spark – khi filter WHERE year=2024 hoặc week=25, engine chỉ quét thư mục liên quan, giảm I/O và thời gian query đáng kể (có thể lên đến 90% theo benchmarks Microsoft).
  • Hỗ trợ usage patterns 📈: Phù hợp filter year/week hiện tại; SubjectArea tổ chức logic (ví dụ: Sales, HR); file Parquet theo ngày hỗ trợ drill-down.
  • Toàn diện đáp ứng 3 yêu cầu, tuân thủ best practices ADLS Gen2 và Synapse (không có thay đổi lớn đến 2026).

📋 Giải thích tất cả các phương án

Dưới đây là phân tích từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phương án được đánh giá dựa trên 3 tiêu chí: hỗ trợ usage, bảo mật, và query time.

  • ✅ \DataSource\SubjectArea\YYYY\WW\FileData_YYYY_MM_DD.parquet
    Đúng hoàn toàn vì lý do như phần trên: Partition year-week lý tưởng, data source root dễ bảo mật, pruning tối ưu cho filter year/week.

  • ❌ \DataSource\SubjectArea\YYYY-WW\FileData_YYYY_MM_DD.parquet
    Sai: Mặc dù data source ở root (tốt cho bảo mật), nhưng YYYY-WW là một thư mục duy nhất (ví dụ: 2024-25), không phân cấp riêng year/week. Synapse serverless không prune hiệu quả khi filter chỉ year (phải quét tất cả weeks trong year), tăng query time. Không hỗ trợ tốt usage patterns.

  • ❌ DataSource\SubjectArea\WW\YYYY\FileData_YYYY_MM_DD.parquet
    Sai: Thứ tự WW\YYYY nghịch đảo so với filter phổ biến (year trước week), dẫn đến pruning kém – filter year phải quét tất cả weeks trước. Week lặp lại hàng năm (WW01 ở cuối năm cũ/đầu năm mới) gây nhầm lẫn. Data source root tốt, nhưng tổng thể không tối ưu query time và usage.

  • ❌ \YYYY\WW\DataSource\SubjectArea\FileData_YYYY_MM_DD.parquet
    Sai nghiêm trọng: Partition YYYY\WW tốt cho pruning, nhưng data source ở sâu (sau year/week), làm bảo mật phức tạp – phải gán ACLs lồng ghép nhiều cấp, khó quản lý (vi phạm "simplifies folder security"). Không hỗ trợ bảo mật theo data source dễ dàng.

  • ❌ WW\YYYY\SubjectArea\DataSource\FileData_YYYY_MM_DD.parquet
    Sai toàn diện: Thứ tự WW\YYYY kém pruning như lựa chọn 3; data source ở cuối cùng, bảo mật cực kỳ phức tạp (phải traverse qua week/year/subject). Tăng query time và không đơn giản hóa security.

📘 Tài liệu tham khảo

Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần ví dụ code Synapse query, hãy hỏi thêm nhé! 😊

Câu 160
You are designing an anomaly detection solution for streaming data from an Azure IoT hub. The solution must meet the following requirements:
✑ Send the output to Azure Synapse.
✑ Identify spikes and dips in time series data.
✑ Minimize development and configuration effort.
Which should you include in the solution?
  1. A Azure Databricks
  2. B Azure Stream Analytics
  3. C Azure SQL Database
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc thiết kế một giải pháp phát hiện bất thường (anomaly detection) cho dữ liệu streaming từ Azure IoT Hub. Các yêu cầu cụ thể bao gồm:

  • 📤 Gửi đầu ra (output) đến Azure Synapse: Dữ liệu sau xử lý phải được lưu trữ hoặc tích hợp trực tiếp vào Azure Synapse Analytics để phân tích sâu hơn.
  • 📈 Phát hiện các đỉnh (spikes) và đáy (dips) trong dữ liệu chuỗi thời gian (time series data): Cần xử lý dữ liệu thời gian thực để nhận diện các bất thường đột biến.
  • ⚡ Giảm thiểu nỗ lực phát triển và cấu hình (minimize development and configuration effort): Ưu tiên công cụ low-code/no-code, dễ triển khai nhanh mà không cần viết code phức tạp.

Giải pháp phải xử lý dữ liệu streaming thời gian thực từ IoT Hub, phù hợp với Azure ecosystem, và tận dụng tính năng sẵn có để tiết kiệm thời gian. Đây là câu hỏi trắc nghiệm kiểu "which should you include", yêu cầu chọn dịch vụ cốt lõi phù hợp nhất.

✅ Đáp án đúng: Azure Stream Analytics

Lý do lựa chọn:

  • Azure Stream Analytics là dịch vụ xử lý streaming dữ liệu thời gian thực chuyên dụng của Azure, được thiết kế tối ưu cho các kịch bản IoT và anomaly detection.
  • 🛠️ Nó hỗ trợ built-in anomaly detection functions (như AnomalyPoint(), GetSpikesAndDips()) để phát hiện spikes/dips trong time series chỉ với SQL query đơn giản – hoàn toàn low-code, giảm thiểu nỗ lực dev/config.
  • 📤 Tích hợp trực tiếp output sink với Azure Synapse qua connector Synapse Analytics (hỗ trợ cả dedicated SQL pool và serverless).
  • ⚡ Phù hợp hoàn hảo với streaming từ Azure IoT Hub (input source native), xử lý real-time với độ trễ thấp.
  • Cập nhật đến 2026: Tính năng anomaly detection vẫn là core feature (từ 2019), được cải tiến với ML integration và scaling tự động trong phiên bản mới nhất (Azure Stream Analytics 2.0+).

Nguồn tham khảo:

🔍 Giải thích tất cả các phương án (đúng/sai)

  • Azure Databricks ❌
    Phân tích sai: Azure Databricks là nền tảng batch và streaming xử lý dữ liệu lớn dựa trên Apache Spark, mạnh về ML/ETL phức tạp nhưng không phải lựa chọn tối ưu cho low-effort anomaly detection. Nó yêu cầu viết code Spark Streaming/Spark Structured Streaming (Scala/Python), cấu hình cluster, và phát hiện spikes/dips cần custom ML models (như Isolation Forest) – vi phạm yêu cầu "minimize development effort". Không có built-in anomaly functions đơn giản như Stream Analytics, và output đến Synapse cần thêm connector thủ công. Phù hợp hơn cho big data analytics sâu, không phải streaming IoT real-time lightweight.

  • Azure Stream Analytics ✅
    Phân tích đúng: Như đã giải thích ở trên, đây là dịch vụ chính xác nhất với anomaly detection native cho time series (spikes/dips), input từ IoT Hub, output Synapse, và giao diện SQL low-code (chỉ vài dòng query là deploy). Không cần dev phức tạp, auto-scale, chi phí pay-per-use. Hoàn hảo khớp 100% requirements.

  • Azure SQL Database ❌
    Phân tích sai: Azure SQL Database là CSDL quan hệ truyền thống (OLTP/OLAP nhẹ), không hỗ trợ streaming real-time từ IoT Hub. Nó không có anomaly detection built-in cho time series (phải dùng T-SQL custom hoặc tích hợp ML bên ngoài), và xử lý spikes/dips yêu cầu batch insert + query phức tạp – tăng effort cao. Output đến Synapse không native (cần ETL tools như Data Factory). Không phù hợp cho streaming data volumes lớn từ IoT.

🏆 Kết luận

Azure Stream Analytics là lựa chọn tối ưu nhất 🥇 cho kịch bản này, giúp triển khai nhanh chóng mà vẫn mạnh mẽ. Nếu áp dụng thực tế, hãy test query mẫu với GetSpikesAndDips() để verify! 🚀