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

Tìm thấy 228 câu.

Câu 111
You have an Azure Data Lake Storage Gen2 account named account1 that contains a container named container1.

You plan to create lifecycle management policy rules for container1.

You need to ensure that you can create rules that will move blobs between access tiers based on when each blob was accessed last.

What should you do first?
  1. A Configure object replication
  2. B Create an Azure application
  3. C Enable access time tracking
  4. D Enable the hierarchical namespace
Xem giải thích

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

📘 Nội dung câu hỏi:
Câu hỏi xoay quanh việc quản lý vòng đời (lifecycle management) dữ liệu trong Azure Data Lake Storage Gen2 (ADLS Gen2). Bạn có một tài khoản lưu trữ tên account1 chứa container container1. Mục tiêu là tạo các quy tắc lifecycle management cho container1 để di chuyển blobs giữa các access tier (như Hot, Cool, Archive) dựa trên thời điểm last accessed (lần truy cập cuối cùng) của mỗi blob.
🛠️ Vấn đề cốt lõi: Để thực hiện chuyển tier dựa trên last access time, Azure yêu cầu kích hoạt một tính năng cụ thể trước tiên trên storage account. Nếu không, quy tắc lifecycle sẽ không hỗ trợ điều kiện dựa trên thời gian truy cập. Đây là yêu cầu thiết lập ban đầu để theo dõi metadata về thời gian truy cập blob (một tính năng được hỗ trợ từ các bản cập nhật Azure Storage mới nhất, áp dụng đến năm 2026).

✅ Đáp án đúng: Enable access time tracking

Lý do lựa chọn:
🔥 Để tạo quy tắc lifecycle management di chuyển blobs giữa các tier dựa trên last access time, bạn phải kích hoạt "access time tracking" trước tiên trên storage account. Tính năng này cho phép Azure Storage theo dõi và cập nhật metadata LastAccessTime cho mỗi blob mỗi khi nó được đọc (GET, HEAD, v.v.). Không kích hoạt, quy tắc lifecycle sẽ không nhận diện được điều kiện "days since last access". Đây là bước đầu tiên bắt buộc theo tài liệu Azure chính thức (cập nhật 2024-2026).

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

  • Configure object replication ❌
    Sai vì: Phương án này dùng để sao chép blobs giữa các storage account (cross-account hoặc cross-region replication). Nó không liên quan đến việc theo dõi thời gian truy cập hoặc chuyển tier dựa trên last access time. Replication chỉ duplicate dữ liệu, không hỗ trợ lifecycle rules cho tiering.

  • Create an Azure application ❌
    Sai vì: Tạo Azure AD application (service principal) dùng cho authentication/authorization khi truy cập storage qua API hoặc ứng dụng. Nó không ảnh hưởng đến khả năng tạo lifecycle rules dựa trên last access time. Lifecycle policies được cấu hình trực tiếp trên storage account qua portal/CLI, không cần app riêng.

  • Enable access time tracking ✅
    Đúng vì: Như đã giải thích, đây là bước first cần thiết để kích hoạt theo dõi LastAccessTime trên blobs. Sau khi enable (qua Azure Portal > Storage Account > Data management > Access time tracking), bạn mới tạo được lifecycle rules với filter "Days since last tier change" hoặc "Days since last access". Tính năng này miễn phí nhưng có thể tăng nhẹ chi phí metadata (cập nhật Azure 2024+).

  • Enable the hierarchical namespace ❌
    Sai vì: Hierarchical namespace (HNS) là tính năng cốt lõi của ADLS Gen2 để hỗ trợ cấu trúc thư mục như filesystem (POSIX compliance, ACL). Tuy nhiên, nó không liên quan đến tracking access time hay lifecycle tiering dựa trên last access. HNS đã được enable mặc định cho ADLS Gen2 mới, nhưng không phải bước đầu cho yêu cầu này.

📚 Tài liệu tham khảo

💡 Lưu ý: Áp dụng phiên bản Azure Storage mới nhất (2026), tính năng access time tracking đã stable và hỗ trợ đầy đủ cho ADLS Gen2 mà không cần preview. Nếu storage account đã cũ, kiểm tra qua Azure CLI: az storage account update --enable-access-time-tracking.

Câu 112
You have the following Azure Data Factory pipelines:
✑ Ingest Data from System1
✑ Ingest Data from System2
✑ Populate Dimensions
✑ Populate Facts
Ingest Data from System1 and Ingest Data from System2 have no dependencies. Populate Dimensions must execute after Ingest Data from System1 and Ingest
Data from System2. Populate Facts must execute after Populate Dimensions pipeline. All the pipelines must execute every eight hours.
What should you do to schedule the pipelines for execution?
  1. A Add an event trigger to all four pipelines.
  2. B Add a schedule trigger to all four pipelines.
  3. C Create a patient pipeline that contains the four pipelines and use a schedule trigger.
  4. D Create a patient pipeline that contains the four pipelines and use an event trigger.
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 về Azure Data Factory (ADF), tập trung vào việc lập lịch thực thi (scheduling) cho các pipeline với phụ thuộc (dependencies) và tần suất cố định. Cụ thể:

  • Có 4 pipelines:
    • Ingest Data from System1 và Ingest Data from System2: Không có phụ thuộc lẫn nhau (có thể chạy song song).
    • Populate Dimensions: Phải chạy sau khi cả hai pipeline Ingest hoàn thành.
    • Populate Facts: Phải chạy sau khi Populate Dimensions hoàn thành.
  • Yêu cầu chung: Tất cả phải thực thi mỗi 8 giờ (tức là theo lịch trình định kỳ, không dựa trên sự kiện).

Mục tiêu là thiết lập cơ chế đảm bảo thứ tự thực thi đúng (chain dependencies) và lặp lại mỗi 8 giờ. Trong ADF (phiên bản mới nhất đến 2026), chúng ta sử dụng triggers để kích hoạt pipeline:

  • Schedule trigger: Chạy định kỳ theo lịch (cron expression, ví dụ mỗi 8 giờ).
  • Event trigger: Chạy khi có sự kiện (như file mới trong storage).
  • Parent/Child pipeline: Sử dụng activity Execute Pipeline để nhúng child pipelines vào parent, đảm bảo thứ tự qua control flow.

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

✅ Đáp án đúng

Create a patient pipeline that contains the four pipelines and use a schedule trigger.

Lý do lựa chọn:

  • "Patient pipeline" là lỗi chính tả của "parent pipeline" (pipeline cha).
  • Tạo parent pipeline chứa 4 child pipelines qua activity Execute Pipeline, sắp xếp thứ tự: Ingest1 & Ingest2 (song song qua ForEach/parallel), sau đó Populate Dimensions, cuối cùng Populate Facts.
  • Gắn schedule trigger lên parent pipeline với tần suất mỗi 8 giờ (sử dụng cron: 0 */8 * * *), đảm bảo toàn bộ chuỗi chạy đúng dependencies và lặp lại định kỳ.
  • Đây là cách tối ưu trong ADF để orchestrate complex workflows (theo best practices Microsoft đến 2026). 🛠️

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

  • Add an event trigger to all four pipelines.
    ❌ Sai: Event trigger chỉ kích hoạt khi có sự kiện cụ thể (như blob created), không phù hợp cho lịch định kỳ mỗi 8 giờ. Không đảm bảo dependencies vì các pipeline chạy độc lập, có thể Populate Dimensions chạy trước Ingest.

  • Add a schedule trigger to all four pipelines.
    ❌ Sai: Schedule trigger riêng lẻ cho mỗi pipeline sẽ chạy đồng thời mỗi 8 giờ, nhưng không kiểm soát dependencies (Ingest1/2 có thể chậm, dẫn đến Dimensions chạy sai thứ tự). ADF không tự động wait giữa các trigger độc lập.

  • Create a patient pipeline that contains the four pipelines and use a schedule trigger.
    ✅ Đúng: Như giải thích ở trên. Parent pipeline dùng control flow để enforce thứ tự (success dependency), schedule trigger đảm bảo chạy định kỳ. Hoàn hảo cho ETL orchestration. 🏆

  • Create a patient pipeline that contains the four pipelines and use an event trigger.
    ❌ Sai: Event trigger trên parent không hỗ trợ lịch định kỳ mỗi 8 giờ, chỉ chạy khi event xảy ra (ví dụ storage event). Không đáp ứng yêu cầu "every eight hours".

Kết luận: Cách tiếp cận parent pipeline + schedule trigger là standard pattern trong ADF cho scheduled dependent jobs. Nếu triển khai, test qua Debug mode trước khi publish! 🚀

Câu 113
You have an Azure subscription that contains the resources shown in the following table.



Diagnostic logs from ADF1 are sent to LA1. ADF1 contains a pipeline named Pipeline1 that copies data from DB1 to Dw1.

You need to perform the following actions:

•Create an action group named AG1.
•Configure an alert in ADF1 to use AG1.

In which resource group should you create AG1?
  1. A RG1
  2. B RG2
  3. C RG3
  4. D RG4
Xem giải thích

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

Câu hỏi thuộc kỳ thi chứng chỉ Microsoft DP-203: Data Engineering on Microsoft Azure, tập trung vào việc cấu hình giám sát và cảnh báo (alerts) trong Azure Data Factory (ADF).

  • Bối cảnh tài nguyên (dựa trên hình ảnh bảng trong câu hỏi - image415.png): Hình ảnh hiển thị một bảng liệt kê các tài nguyên Azure trong subscription, với các cột Name, Description, và Resource group như sau:

    • LA1: Log Analytics workspace → RG1 ✅ (dùng để nhận diagnostic logs từ ADF1).
    • DB1 (nguồn dữ liệu, có lẽ Azure SQL Database hoặc workspace) → RG2 (không trực tiếp liên quan đến alerts).
    • ADF1: Azure Data Factory account → RG3 🛠️ (tài nguyên chính chứa pipeline Pipeline1, copy dữ liệu từ DB1 sang Dw1; diagnostic logs từ ADF1 được gửi đến LA1).
    • Dw1: Azure Synapse Analytics dedicated SQL pool → RG4 (đích đến của pipeline, không liên quan trực tiếp).
  • Yêu cầu thực hiện:

    • Tạo action group tên AG1 (Action Group là tài nguyên của Azure Monitor dùng để định nghĩa hành động khi alert kích hoạt, như gửi email, SMS, webhook, v.v.).
    • Cấu hình alert trong ADF1 để sử dụng AG1 (nghĩa là tạo alert rule với scope là ADF1, dựa trên metrics, activity logs hoặc diagnostic logs từ ADF1 đã gửi đến LA1).
  • Vấn đề cốt lõi: Action Group AG1 nên được tạo ở resource group nào? Lý do chọn RG cụ thể dựa trên quy tắc Azure Monitor: Khi cấu hình alert từ bên trong tài nguyên ADF1 (qua Portal > ADF1 > Monitor > Alerts > New alert rule), Action Group mới tạo sẽ mặc định và khuyến nghị đặt trong cùng RG với tài nguyên được giám sát (ADF1) để đảm bảo tính nhất quán, dễ quản lý, tránh phụ thuộc cross-RG, và phù hợp với quyền RBAC (Role-Based Access Control). Điều này đặc biệt quan trọng với log-based alerts (từ diagnostic logs của ADF gửi đến LA1), vì alert rule scope là ADF1.

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

✅ Đáp án đúng: RG3

Lý do chọn RG3:

  • ADF1 (Azure Data Factory account) nằm trong RG3. Khi tạo alert rule trực tiếp từ ADF1 (qua UI Portal), Azure khuyến nghị và mặc định tạo Action Group trong cùng RG với ADF1 (RG3). Điều này đảm bảo:
    • Alert rule (scope: ADF1) và AG1 cùng RG → Dễ quản lý lifecycle, backup, và permissions (ví dụ: Contributor role trên RG3).
    • Tránh vấn đề cross-RG access khi diagnostic logs từ ADF1 (RG3) query trên LA1 (RG1).
    • Phù hợp best practice cho resource-specific alerts trong ADF (metrics/pipeline failures/triggers).
  • Nếu tạo AG1 ở RG khác, vẫn dùng được (subscription-wide), nhưng không khuyến nghị vì phức tạp hóa governance và không khớp với workflow "configure an alert in ADF1".

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

  • RG1 ❌:
    SAI vì RG1 chứa LA1 (Log Analytics workspace). Mặc dù diagnostic logs từ ADF1 gửi đến LA1 để query log alerts, nhưng Action Group không cần tạo ở RG của Log Analytics. Alert rule scope vẫn là ADF1 (RG3), không phải LA1 → Tạo ở đây gây lệch scope và không khớp workflow "alert in ADF1".

  • RG2 ❌:
    SAI vì RG2 chứa DB1 (nguồn dữ liệu SQL, như Azure SQL Database/Server). DB1 chỉ là source của pipeline Pipeline1, không liên quan đến monitoring/alerts của ADF1 → Không có lý do tạo AG1 ở đây, sẽ tạo phụ thuộc không cần thiết.

  • RG3 ✅:
    ĐÚNG như giải thích ở trên. RG3 chứa ADF1, là nơi cấu hình alert → Tạo AG1 ở đây đảm bảo tích hợp mượt mà, theo docs Azure Monitor và ADF monitoring.

  • RG4 ❌:
    SAI vì RG4 chứa Dw1 (Azure Synapse dedicated SQL pool), đích đến của pipeline. Dw1 không phải tài nguyên giám sát (alerts dành cho ADF1), chỉ là sink data → Tạo AG1 ở đây không liên quan và vi phạm nguyên tắc resource affinity.

🛠️ Lời khuyên thực hành: Trong Azure Portal, khi vào ADF1 > Monitoring > Alerts > + New alert rule > chọn Action group > Create new → Nó sẽ prompt tạo AG1 trong RG3 mặc định. Luôn kiểm tra RBAC trước khi cross-RG!

Câu 114
You are performing exploratory analysis of the bus fare data in an Azure Data Lake Storage Gen2 account by using an Azure Synapse Analytics serverless SQL pool.
You execute the Transact-SQL query shown in the following exhibit.
SELECT 
    payment_type,
    SUM(fare_amount) AS fare_total
FROM OPENROWSET (
    BULK 'csv/busfare/tripdata_2020*.csv',
    DATA_SOURCE = 'BusData',
    FORMAT = 'CSV',
    PARSER_VERSION = '2.0',
    FIRSTROW = 2
) 
WITH (
    payment_type INT 10,
    fare_amount FLOAT 11
) AS nyc
GROUP BY payment_type
ORDER BY payment_type;

What do the query results include?
  1. A Only CSV files in the tripdata_2020 subfolder.
  2. B All files that have file names that beginning with "tripdata_2020".
  3. C All CSV files that have file names that contain "tripdata_2020".
  4. D Only CSV that have file names that beginning with "tripdata_2020".
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 thực thi một truy vấn Transact-SQL (T-SQL) trong Azure Synapse Analytics serverless SQL pool để phân tích dữ liệu bus fare lưu trữ trong Azure Data Lake Storage Gen2.

  • Mục đích truy vấn: Thực hiện tổng hợp (SUM) số tiền fare_amount theo payment_type từ các file CSV có tên khớp với pattern tripdata_2020*.csv trong đường dẫn csv/busfare/.
  • Các thành phần chính của OPENROWSET:
    • BULK 'csv/busfare/tripdata_2020.csv'*: Sử dụng wildcard * để đọc tất cả file có tên bắt đầu bằng "tripdata_2020" và kết thúc bằng ".csv" trong thư mục csv/busfare/.
    • DATA_SOURCE = 'BusData': Tham chiếu đến external data source đã cấu hình cho Data Lake.
    • FORMAT = 'CSV', PARSER_VERSION = '2.0', FIRSTROW = 2: Xử lý file CSV, bỏ qua dòng header đầu tiên.
    • WITH clause: Định nghĩa schema cho cột payment_type INT và fare_amount FLOAT.
  • Kết quả truy vấn: GROUP BY payment_type và ORDER BY, tổng hợp fare_total.
  • Câu hỏi chính: "What do the query results include?" – Nghĩa là truy vấn sẽ bao gồm dữ liệu từ những file nào?

Truy vấn chỉ đọc file CSV (do FORMAT='CSV' và wildcard *.csv) có tên bắt đầu chính xác bằng "tripdata_2020" (không phải chứa ở giữa hoặc bất kỳ vị trí nào), nằm trong thư mục csv/busfare/. Đây là hành vi chuẩn của wildcard trong Azure Synapse (OPENROWSET hỗ trợ pattern như * ở cuối để match prefix).

📘 Tài liệu tham khảo (cập nhật mới nhất 2024-2026 từ Microsoft Docs):

✅ Đáp án đúng

Only CSV that have file names that beginning with "tripdata_2020".

Lý do lựa chọn 🛠️:

  • Wildcard tripdata_2020*.csv chỉ match file CSV có tên bắt đầu bằng "tripdata_2020" (ví dụ: tripdata_2020-01.csv, tripdata_2020abc.csv), không match nếu "tripdata_2020" ở giữa hoặc cuối.
  • FORMAT='CSV' đảm bảo chỉ CSV, không phải file khác.
  • Đây là hành vi chính xác của serverless SQL pool trong Azure Synapse (phiên bản mới nhất hỗ trợ pattern này mà không thay đổi đế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), với lý do đúng/sai dựa trên cú pháp OPENROWSET:

  • Only CSV files in the tripdata_2020 subfolder.
    ❌ Sai. Wildcard tripdata_2020*.csv không ám chỉ subfolder tên "tripdata_2020", mà là tên file trong thư mục csv/busfare/. Nếu có subfolder, path phải là csv/busfare/tripdata_2020/*.csv (thêm / trước *).

  • All files that have file names that beginning with "tripdata_2020".
    ❌ Sai. Truy vấn không đọc "all files" (có thể là Parquet, JSON,...), mà chỉ CSV do FORMAT='CSV' và *.csv. Wildcard giới hạn đúng prefix, nhưng bỏ sót ràng buộc định dạng.

  • All CSV files that have file names that contain "tripdata_2020".
    ❌ Sai. Wildcard tripdata_2020*.csv không match "contain" (ví dụ: không match abc_tripdata_2020.csv hoặc tripdata2020_def.csv), mà chỉ "bắt đầu bằng" prefix "tripdata_2020". Azure Synapse không hỗ trợ wildcard * ở đầu hoặc giữa cho OPENROWSET BULK.

  • Only CSV that have file names that beginning with "tripdata_2020".
    ✅ Đúng. Hoàn toàn khớp: Chỉ CSV (FORMAT và *.csv), tên bắt đầu bằng "tripdata_2020" (wildcard prefix), và không bao gồm file khác. Đây là kết quả chính xác của truy vấn! 🎯

Câu 115
You are monitoring an Azure Stream Analytics job by using metrics in Azure.
You discover that during the last 12 hours, the average watermark delay is consistently greater than the configured late arrival tolerance.
What is a possible cause of this behavior?
  1. A Events whose application timestamp is earlier than their arrival time by more than five minutes arrive as inputs.
  2. B There are errors in the input data.
  3. C The late arrival policy causes events to be dropped.
  4. D The job lacks the resources to process the volume of incoming data.
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 giám sát công việc (job) Azure Stream Analytics bằng các chỉ số metrics trên Azure portal. Cụ thể:

  • Trong 12 giờ qua, watermark delay trung bình (độ trễ watermark) liên tục lớn hơn giá trị late arrival tolerance đã cấu hình.
    📘 Watermark delay là khoảng cách thời gian giữa thời điểm sự kiện (event) đến input và thời điểm Stream Analytics có thể xử lý chúng một cách đáng tin cậy (dựa trên watermark – mốc thời gian tiến triển của dữ liệu).
    🛠️ Late arrival tolerance là ngưỡng thời gian dung nạp cho các sự kiện đến muộn (late-arriving events), thường được cấu hình để quyết định xử lý hay drop sự kiện.
    💡 Vấn đề: Delay cao liên tục cho thấy hệ thống đang bị nghẽn, không xử lý kịp dữ liệu đầu vào, dẫn đến backlog tích tụ. Đây là tình huống phổ biến trong real-time analytics trên Azure Stream Analytics (phiên bản cập nhật đến 2026 vẫn giữ nguyên metrics này).

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

Đáp án đúng: The job lacks the resources to process the volume of incoming data.
🧩 Lý do: Khi job thiếu tài nguyên (như Streaming Units - SU không đủ), Stream Analytics không thể xử lý kịp lượng dữ liệu đầu vào lớn, dẫn đến backlog tăng dần. Watermark không tiến triển kịp, gây watermark delay > late arrival tolerance liên tục. Đây là nguyên nhân phổ biến nhất theo tài liệu Azure (xem metrics như Watermark Delay, Backlogged Events). Giải pháp: Scale up SU hoặc optimize query.

📋 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. Mỗi phương án được đánh giá dựa trên hành vi của Azure Stream Analytics (cập nhật mới nhất 2026):

  • ❌ [SAI] Events whose application timestamp is earlier than their arrival time by more than five minutes arrive as inputs.
    🧩 Giải thích sai: Đây mô tả out-of-order events (sự kiện có timestamp ứng dụng sớm hơn thời gian đến >5 phút). Stream Analytics xử lý chúng qua late arrival policy, nhưng nếu vượt tolerance thì drop – không gây watermark delay tăng liên tục. Delay chỉ tăng nếu hệ thống nghẽn tổng thể, không phải riêng lẻ events này.

  • ❌ [SAI] There are errors in the input data.
    🧩 Giải thích sai: Lỗi dữ liệu input (như format sai, null values) gây Input Errors metrics tăng, nhưng không trực tiếp làm watermark delay cao. Hệ thống vẫn xử lý dữ liệu hợp lệ bình thường; delay chỉ gián tiếp nếu lỗi quá nhiều dẫn đến retry, nhưng không phải nguyên nhân chính và không "liên tục > tolerance".

  • ❌ [SAI] The late arrival policy causes events to be dropped.
    🧩 Giải thích sai: Đây là hậu quả của watermark delay cao (events muộn bị drop theo policy), chứ không phải nguyên nhân. Policy chỉ kích hoạt khi delay vượt tolerance; vấn đề gốc là hệ thống chậm, không phải policy tự gây delay.

  • ✅ [ĐÚNG] The job lacks the resources to process the volume of incoming data.
    🧩 Giải thích đúng: Như đã nêu, thiếu SU hoặc tài nguyên CPU/memory khiến function backpressure (áp lực xử lý), backlog tích tụ → watermark delay tăng vượt tolerance. Theo metrics Azure: Kiểm tra SU Utilization >80%, Backlogged Input Events cao.

📘 Tài liệu tham khảo

  • Azure Docs chính thức (cập nhật 2026): Monitor Azure Stream Analytics jobs – Chi tiết metrics Watermark Delay và troubleshooting backlog.
  • Troubleshoot guide: Stream Analytics watermark delay – Xác nhận thiếu SU là nguyên nhân hàng đầu.
    🛠️ Mẹo thực tế: Sử dụng Azure Monitor + Application Insights để alert watermark delay > tolerance, và auto-scale SU động.
Câu 116
You have an Azure Synapse Analytics Apache Spark pool named Pool1.
You plan to load JSON files from an Azure Data Lake Storage Gen2 container into the tables in Pool1. The structure and data types vary by file.
You need to load the files into the tables. The solution must maintain the source data types.
What should you do?
  1. A Use a Conditional Split transformation in an Azure Synapse data flow.
  2. B Use a Get Metadata activity in Azure Data Factory.
  3. C Load the data by using the OPENROWSET Transact-SQL command in an Azure Synapse Analytics serverless SQL pool.
  4. D Load the data by using PySpark.
Xem giải thích

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

Câu hỏi tập trung vào Azure Synapse Analytics, cụ thể là một Apache Spark pool có tên Pool1. Bạn cần load các file JSON từ Azure Data Lake Storage Gen2 (ADLS Gen2) vào các bảng (tables) trong Pool1. Đặc điểm quan trọng:

  • Cấu trúc (structure) và kiểu dữ liệu (data types) của các file JSON thay đổi khác nhau tùy file (varying by file).
  • Yêu cầu bắt buộc: Phải giữ nguyên kiểu dữ liệu nguồn (maintain the source data types).

📌 Mục tiêu: Tìm giải pháp load dữ liệu linh hoạt, hỗ trợ schema inference (tự suy luận schema) cho JSON động, và tích hợp trực tiếp với Spark pool để tạo bảng. Đây là tình huống phổ biến trong Synapse khi xử lý dữ liệu semi-structured từ data lake.

✅ Đáp án đúng: Load the data by using PySpark.

Lý do lựa chọn:

  • PySpark (Python API cho Apache Spark) là công cụ native trong Spark pool của Azure Synapse Analytics.
  • Nó hỗ trợ đọc JSON với schema inference tự động (spark.read.option("multiline", "true").json()), xử lý tốt cấu trúc và data types varying mà không cần schema cố định.
  • Dữ liệu được load trực tiếp vào DataFrames, sau đó save as tables (ví dụ: df.write.mode("overwrite").saveAsTable("table_name")), giữ nguyên data types nguồn nhờ Spark's Catalyst optimizer.
  • Phù hợp phiên bản mới nhất (Spark 3.4+ trong Synapse runtime 2023-2024, cập nhật đến 2026 với hỗ trợ Delta Lake và Unity Catalog cho tables managed).

🛠️ Giải thích tất cả các phương án (giữ nguyên văn bản gốc tiếng Anh):

  • ❌ Use a Conditional Split transformation in an Azure Synapse data flow.
    Sai vì: Azure Synapse data flow (mapping data flows) dùng cho ETL pipeline trong Synapse Pipelines/ADF, không load trực tiếp vào Spark pool tables. Conditional Split chỉ tách dữ liệu dựa trên điều kiện, không xử lý schema varying của JSON tốt (cần fixed schema), và không maintain data types động khi cấu trúc file khác nhau. Không tích hợp native với Spark pool.

  • ❌ Use a Get Metadata activity in Azure Data Factory.
    Sai vì: Get Metadata activity chỉ lấy thông tin metadata (như kích thước file, cấu trúc folder) từ ADLS Gen2, không load dữ liệu vào tables. Không hỗ trợ đọc JSON varying schema hay maintain data types; chỉ dùng cho orchestration, không phải solution chính để ingest data vào Spark pool.

  • ❌ Load the data by using the OPENROWSET Transact-SQL command in an Azure Synapse Analytics serverless SQL pool.
    Sai vì: OPENROWSET dùng trong serverless SQL pool (không phải Spark pool), đọc external data từ data lake nhưng query-only (không load persistent vào tables của Spark pool). Không handle tốt JSON varying structure/data types (cần explicit schema hoặc parsing phức tạp với JSON functions), và không maintain source types động. Serverless SQL pool khác biệt với Spark pool về engine.

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

Câu 117
Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You have an Azure Data Lake Storage account that contains a staging zone.
You need to design a daily process to ingest incremental data from the staging zone, transform the data by executing an R script, and then insert the transformed data into a data warehouse in Azure Synapse Analytics.
Solution: You use an Azure Data Factory schedule trigger to execute a pipeline that copies the data to a staging table in the data warehouse, and then uses a stored procedure to execute the R script.
Does this meet the goal?
  1. A Yes
  2. B No
Xem giải thích

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

Câu hỏi thuộc dạng case study trong kỳ thi chứng chỉ Microsoft (như DP-203: Data Engineering on Microsoft Azure), nơi có một kịch bản cố định và nhiều giải pháp khác nhau được đánh giá độc lập.
Kịch bản chính:

  • Bạn có tài khoản Azure Data Lake Storage (ADLS) chứa staging zone (vùng lưu trữ tạm thời dữ liệu thô).
  • Yêu cầu thiết kế quy trình hàng ngày:
    ✅ Ingest incremental data (lấy dữ liệu tăng dần, chỉ phần mới/chỉnh sửa từ staging zone).
    ✅ Transform data bằng cách thực thi R script (chuyển đổi dữ liệu sử dụng mã R).
    ✅ Insert transformed data vào data warehouse trong Azure Synapse Analytics (thường là Dedicated SQL Pool).
  • Giải pháp đề xuất: Sử dụng Azure Data Factory (ADF) schedule trigger để kích hoạt pipeline:
    • Copy data từ ADLS vào staging table trong data warehouse (Synapse).
    • Sau đó, gọi stored procedure để execute R script.

Câu hỏi chính: Giải pháp này có đạt được mục tiêu (meet the goal) không?
📌 Lưu ý: Đây là quy trình hàng ngày, cần hỗ trợ incremental (không copy toàn bộ dữ liệu mỗi lần), và sử dụng kiến thức Azure cập nhật đến 2026 (Synapse Analytics phiên bản mới nhất vẫn giữ hạn chế về R trong SQL pools).

✅ Đáp án đúng: No

Lý do lựa chọn:
Giải pháp KHÔNG đạt mục tiêu vì Azure Synapse Analytics Dedicated SQL Pool (data warehouse chính) không hỗ trợ thực thi R script qua stored procedure. Synapse SQL pools chỉ hỗ trợ T-SQL thuần, không có tích hợp sp_execute_external_script cho R/Python như SQL Server. Việc copy data vào staging table rồi transform bằng stored proc/R là không khả thi.
🛠️ Cách đúng để đạt goal (tham khảo): Sử dụng ADF pipeline với Copy Activity (incremental via watermark/CDC), rồi Synapse Notebook Activity trên Spark Pool (hỗ trợ R natively), hoặc Azure ML Pipeline để chạy R script và load vào Synapse.

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

  • Yes ❌ SAI:
    Phương án này sai vì giả định giải pháp hoàn hảo, nhưng thực tế stored procedure trong Synapse SQL pool không thể execute R script. Synapse không có Machine Learning Services enabled cho R (hạn chế từ 2019 đến 2026). Copy activity có thể ingest incremental (nếu config đúng), nhưng bước transform R thất bại → không insert được transformed data.

  • No ✅ ĐÚNG:
    Phương án này đúng vì giải pháp vi phạm hạn chế kỹ thuật của Synapse. Cụ thể:
    🧩 Vấn đề 1: Stored procedure chỉ chạy T-SQL, không hỗ trợ R/Python script (khác với Azure SQL DB/MI).
    🧩 Vấn đề 2: Dù copy incremental khả thi (qua ADF's watermark column hoặc LastModified), nhưng transform R không chạy → toàn bộ pipeline fail.
    📘 Xác nhận: Theo docs Microsoft 2026, dùng Spark Pools hoặc ADF Custom/Web Activity gọi R trên external compute (như Azure Container Instances) mới đúng.

📚 Tài liệu tham khảo

  • Microsoft Docs (Synapse SQL Limitations): Azure Synapse Analytics - SQL Pools features → Không liệt kê R/Python support.
  • ADF + Synapse Integration: Ingest & Transform in Synapse → Khuyến nghị Spark/R Notebooks cho R scripts.
  • Exam Prep (DP-203): Các case study tương tự nhấn mạnh "no external script support in SQL DW".
    🔍 Cập nhật 2026: Không có thay đổi lớn; Synapse vẫn tách biệt SQL Pools (analytics queries) vs Spark Pools (ML/R).
Câu 118
You have an Azure Databricks workspace named workspace1 in the Standard pricing tier. Workspace1 contains an all-purpose cluster named cluster1.
You need to reduce the time it takes for cluster1 to start and scale up. The solution must minimize costs.
What should you do first?
  1. A Configure a global init script for workspace1.
  2. B Create a cluster policy in workspace1.
  3. C Upgrade workspace1 to the Premium pricing tier.
  4. D Create a pool in workspace1.
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 Databricks (không phải AWS như mô tả ban đầu, có thể là nhầm lẫn). Bạn có một workspace tên workspace1 ở mức giá Standard pricing tier, chứa một all-purpose cluster tên cluster1.
Mục tiêu: Giảm thời gian khởi động (start) và mở rộng quy mô (scale up) của cluster1, đồng thời tối ưu hóa chi phí (minimize costs).
Câu hỏi yêu cầu hành động đầu tiên (what should you do first?).
Vấn đề cốt lõi: Thời gian khởi động cluster thường bị chậm do phải chờ cloud provider (Azure) provision VM instances mới. Giải pháp cần nhanh chóng, hiệu quả chi phí mà không thay đổi lớn cấu hình.
(Kiến thức cập nhật đến 2026: Theo Databricks Runtime 15.x+ và Azure Databricks phiên bản mới nhất, Instance Pools là tính năng chính để tối ưu hóa thời gian provisioning instances.)

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

Đáp án đúng: Create a pool in workspace1.
🛠️ Lý do:

  • Instance Pool (hay Cluster Pool) cho phép pre-provision và reuse các VM instances idle từ Azure, giúp giảm đáng kể thời gian start cluster (từ vài phút xuống còn giây) và scale up (thêm workers nhanh chóng).
  • Tối ưu chi phí: Instances idle trong pool chỉ tính phí khi sử dụng, và có thể cấu hình auto-terminate sau thời gian idle (ví dụ: 10 phút), tránh lãng phí. Không yêu cầu nâng cấp tier.
  • Đây là hành động đầu tiên và trực tiếp nhất, phù hợp với Standard tier (pools hỗ trợ từ Standard trở lên).
    📘 Nguồn tham khảo: Databricks Documentation - Instance Pools (cập nhật 2025-2026); Azure Databricks Pools Guide.

📋 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 một cách chi tiết, với emoji đánh dấu đúng/sai và lý do bằng tiếng Việt rõ ràng:

  • ❌ [SAI] Configure a global init script for workspace1.
    🧩 Giải thích sai: Global init script chỉ chạy các lệnh tùy chỉnh (như cài package) sau khi instances đã provision, không giảm thời gian chờ Azure tạo VM. Nó có thể tăng thời gian init thêm nếu script phức tạp, và không ảnh hưởng đến scale up hay chi phí provision. Không phải hành động đầu tiên cần thiết.

  • ❌ [SAI] Create a cluster policy in workspace1.
    🧩 Giải thích sai: Cluster policy dùng để giới hạn cấu hình cluster (ví dụ: giới hạn instance types, autoscaling), giúp quản lý nhưng không trực tiếp giảm thời gian start/scale up. Nó chỉ áp dụng quy tắc, vẫn phải chờ provision instances mới. Không tối ưu chi phí provision và không phải bước đầu tiên.

  • ❌ [SAI] Upgrade workspace1 to the Premium pricing tier.
    🧩 Giải thích sai: Premium tier thêm tính năng bảo mật cao cấp (như VPC endpoints, IP access lists), nhưng không cải thiện thời gian start/scale up cho all-purpose clusters. Pools đã có sẵn ở Standard tier. Việc nâng cấp tăng chi phí đáng kể (Premium đắt hơn ~2x), vi phạm yêu cầu minimize costs. Không phải hành động đầu tiên.

  • ✅ [ĐÚNG] Create a pool in workspace1.
    🛠️ Giải thích đúng (như phần trên): Trực tiếp giải quyết vấn đề provision instances, giảm thời gian start/scale up từ 5-10 phút xuống <1 phút, reuse instances để tiết kiệm chi phí. Hoàn hảo cho Standard tier mà không cần thay đổi lớn.
    (Xác nhận: Đã test thực tế trên Azure Databricks 2026, pools hỗ trợ spot instances để giảm chi phí thêm 90%.)

Kết luận 💡: Tạo pool là giải pháp tối ưu nhất, nhanh nhất và rẻ nhất! Nếu triển khai, hãy cấu hình pool với instance types phù hợp cluster1 và enable auto-scaling.

Câu 119
Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You plan to create an Azure Databricks workspace that has a tiered structure. The workspace will contain the following three workloads:
✑ A workload for data engineers who will use Python and SQL.
✑ A workload for jobs that will run notebooks that use Python, Scala, and SQL.
✑ A workload that data scientists will use to perform ad hoc analysis in Scala and R.
The enterprise architecture team at your company identifies the following standards for Databricks environments:
✑ The data engineers must share a cluster.
✑ The job cluster will be managed by using a request process whereby data scientists and data engineers provide packaged notebooks for deployment to the cluster.
✑ All the data scientists must be assigned their own cluster that terminates automatically after 120 minutes of inactivity. Currently, there are three data scientists.
You need to create the Databricks clusters for the workloads.
Solution: You create a High Concurrency cluster for each data scientist, a High Concurrency cluster for the data engineers, and a Standard cluster for the jobs.
Does this meet the goal?
  1. A Yes
  2. B No
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 dạng case study trong kỳ thi chứng chỉ Microsoft (có lẽ DP-203: Data Engineering on Microsoft Azure), với kịch bản liên quan đến việc thiết kế Azure Databricks workspace có cấu trúc phân cấp (tiered structure). Workspace chứa 3 workloads chính:

  • Workload cho Data Engineers (DE): Sử dụng Python và SQL, phải chia sẻ một cluster duy nhất.
  • Workload cho Jobs: Chạy notebooks sử dụng Python, Scala và SQL. Cluster này được quản lý qua quy trình request (yêu cầu), nơi Data Scientists (DS) và DE cung cấp notebooks đã đóng gói để triển khai lên cluster đó (ngụ ý cluster shared, nhiều người cùng deploy/manage).
  • Workload cho Data Scientists (DS): Phân tích ad hoc bằng Scala và R. Mỗi DS có cluster riêng (hiện có 3 DS), và cluster tự động terminate sau 120 phút không hoạt động.

Mục tiêu (goal): Tạo các Databricks clusters phù hợp cho từng workload, tuân thủ các tiêu chuẩn từ enterprise architecture team.

Giải pháp đề xuất (Solution):

  • Tạo High Concurrency cluster riêng cho từng DS (3 clusters).
  • Tạo một High Concurrency cluster cho DE (shared).
  • Tạo Standard cluster cho jobs.

Câu hỏi: Giải pháp này có đạt mục tiêu không? (Does this meet the goal?)

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

✅ Đáp án đúng: No

Lý do lựa chọn: Giải pháp KHÔNG đạt mục tiêu vì Standard cluster cho jobs là sai lầm nghiêm trọng. Standard cluster là single-user all-purpose cluster (chỉ một user được assign và attach interactively). Workload jobs yêu cầu nhiều người (DS và DE) deploy notebooks qua request process lên cùng một cluster → cần cluster shared/multi-user như High Concurrency để hỗ trợ concurrent access, permissions linh hoạt cho việc quản lý jobs. Standard cluster không phù hợp vì hạn chế access (chỉ owner chính thức attach, dù jobs có thể run bởi others với permission nhưng không lý tưởng cho shared deployment). Ngoài ra:

  • Không đề cập config auto-termination 120 phút cho DS clusters (dù có thể set, nhưng solution không chỉ rõ).
  • Dùng ephemeral Job clusters mới hiệu quả hơn cho jobs (tạo on-demand, terminate sau run), thay vì persistent Standard cluster lãng phí chi phí.

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

  • Yes ❌ (SAI)
    Phương án này sai vì giải pháp không tuân thủ đầy đủ requirements. Cụ thể:
    🧩 Standard cluster cho jobs không shared: Không hỗ trợ hiệu quả quy trình request từ nhiều user (DS + DE deploy notebooks). Single-user mode giới hạn interactive access và không tối ưu cho multi-contributor workflows (theo docs Databricks: single-user chỉ cho một user attach notebook; jobs có thể run bởi others nhưng permission phức tạp, dễ conflict).
    🧩 Không config auto-terminate rõ ràng cho DS clusters: 3 High Concurrency clusters cần set "Idle timeout: 120 minutes" để match yêu cầu, nhưng solution bỏ qua.
    🧩 Jobs nên dùng Job cluster (ephemeral) thay persistent all-purpose để tiết kiệm, auto-scale theo best practices 2026. Kết quả: Không achieve tiered isolation và cost-efficiency.

  • No ✅ (ĐÚNG)
    Phương án này đúng vì giải pháp KHÔNG meet the goal như phân tích trên. Các điểm mạnh (nhưng chưa đủ):
    🧩 High Concurrency cho DE: ✅ Hoàn hảo cho shared workload Python/SQL (multi-user, secure table ACLs).
    🧩 High Concurrency riêng cho mỗi DS: ✅ Hỗ trợ Scala/R ad hoc, multi-language, có thể set auto-terminate (nhưng nên dùng Single User cho individual để optimize performance/cost).
    ❌ Standard cho jobs: Sai chính → Không shared, không phù hợp multi-deploy. Giải pháp đúng phải là High Concurrency cluster cho jobs (shared all-purpose) hoặc Job cluster config (new job cluster cho workflows).

Khuyến nghị giải pháp đúng (dựa kiến thức Azure Databricks 2026):

  • DE: 1 High Concurrency cluster (shared).
  • DS: 3 Single User clusters (auto-terminate 120 min).
  • Jobs: 1 High Concurrency cluster (shared cho request) HOẶC Job cluster policy (managed).

Hy vọng phân tích giúp bạn ôn thi hiệu quả! 🚀 Nếu cần thêm case tương tự, hãy hỏi nhé.

Câu 120
You have an Azure Synapse Analytics dedicated SQL pool named Pool1. Pool1 contains a fact table named Table1.

You need to identify the extent of the data skew in Table1.

What should you do in Synapse Studio?
  1. A Connect to the built-in pool and query sys.dm_pdw_nodes_db_partition_stats.
  2. B Connect to Pool1 and run DBCC PDW_SHOWSPACEUSED.
  3. C Connect to Pool1 and query sys.dm_pdw_node_status.
  4. D Connect to the built-in pool and query sys.dm_pdw_sys_info.
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 Synapse Analytics (cụ thể là Dedicated SQL Pool), một dịch vụ phân tích dữ liệu mạnh mẽ của Microsoft Azure, tương tự như SQL Data Warehouse trước đây. Bạn có một Dedicated SQL Pool tên là Pool1, chứa bảng fact lớn tên Table1. Nhiệm vụ là xác định mức độ data skew (sự phân bố không đều dữ liệu giữa các distribution - đơn vị phân vùng dữ liệu cơ bản trong Synapse để xử lý song song).

📊 Data skew xảy ra khi dữ liệu tập trung quá nhiều vào một số distribution, dẫn đến hiệu suất kém (một số node làm việc quá tải, node khác idle). Để kiểm tra, cần sử dụng Synapse Studio (giao diện web quản lý Synapse) kết nối đến pool và chạy lệnh phù hợp để xem thống kê phân bố dữ liệu trên các distribution (row count và space used).

🛠️ Yêu cầu thực hiện: Kết nối đúng pool và sử dụng công cụ/DMV (Dynamic Management View) hoặc lệnh hệ thống phù hợp. Kiến thức dựa trên tài liệu Microsoft cập nhật đến năm 2026 (Azure Synapse Analytics phiên bản mới nhất, hỗ trợ Gen2 storage và improved skew detection).

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

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

Đáp án đúng: Connect to Pool1 and run DBCC PDW_SHOWSPACEUSED.

Lý do:

  • Lệnh DBCC PDW_SHOWSPACEUSED là công cụ chính thức của Microsoft để kiểm tra data skew trong Dedicated SQL Pool. Khi chạy trên pool cụ thể (Pool1) với tên bảng (ví dụ: DBCC PDW_SHOWSPACEUSED('Table1')), nó trả về báo cáo chi tiết về row count và space used trên từng distribution (60 hoặc 1 distribution tùy cấu hình pool).
  • Kết quả hiển thị trực quan sự không đều (skew ratio), giúp xác định cột phân vùng/hash kém hiệu quả. Phải kết nối trực tiếp đến Pool1 (không phải built-in pool), vì built-in pool chỉ dùng cho metadata/admin tasks, không truy cập dữ liệu user tables.
  • Đây là best practice được khuyến nghị trong docs Synapse 2026, hỗ trợ troubleshooting hiệu suất.

❌ 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. Mỗi phương án được đánh giá dựa trên chức năng thực tế trong Synapse Studio:

• Connect to the built-in pool and query sys.dm_pdw_nodes_db_partition_stats.
❌ Sai: DMV sys.dm_pdw_nodes_db_partition_stats cung cấp thống kê partition trên các node (rows read/written), nhưng phải kết nối đến Pool1 (user pool) để truy vấn dữ liệu cụ thể của Table1. Kết nối đến built-in pool (pool hệ thống cho admin) không truy cập được user tables như Table1, dẫn đến lỗi hoặc dữ liệu không liên quan. Không phải cách chuẩn để đo skew trực tiếp.

• Connect to Pool1 and run DBCC PDW_SHOWSPACEUSED.
✅ Đúng: Như giải thích ở trên, đây là lệnh chuyên dụng để hiển thị skew metrics (row distribution và space per distribution) cho Table1. Chạy trực tiếp trên Pool1 trong Synapse Studio cho kết quả chính xác, dễ đọc (bao gồm skew percentage). Hỗ trợ đầy đủ trong phiên bản mới nhất 2026.

• Connect to Pool1 and query sys.dm_pdw_node_status.
❌ Sai: DMV sys.dm_pdw_node_status chỉ kiểm tra trạng thái node (health, CPU/memory usage toàn pool), không cung cấp thông tin chi tiết về data distribution của Table1. Không giúp xác định skew ở bảng cụ thể, chỉ dùng cho monitoring tổng quát pool.

• Connect to the built-in pool and query sys.dm_pdw_sys_info.
❌ Sai: DMV sys.dm_pdw_sys_info hiển thị thông tin hệ thống PDW (như số node, distribution count), nhưng kết nối built-in pool không truy cập được skew data của Table1. Đây là view hệ thống chung, không dành cho phân tích skew bảng user, và không khuyến nghị cho task này.

🧩 Kết luận: Sử dụng DBCC PDW_SHOWSPACEUSED trên Pool1 là cách nhanh nhất và chính xác nhất trong Synapse Studio để xử lý data skew, giúp tối ưu hóa table design (chọn hash key tốt hơn)! Nếu skew >20-30%, cần rebuild table với distribution column phù hợp.