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

Tìm thấy 228 câu.

Câu 1
What should you do to improve high availability of the real-time data processing solution?
  1. A Deploy a High Concurrency Databricks cluster.
  2. B Deploy an Azure Stream Analytics job and use an Azure Automation runbook to check the status of the job and to start the job if it stops.
  3. C Set Data Lake Storage to use geo-redundant storage (GRS).
  4. D Deploy identical Azure Stream Analytics jobs to paired regions in Azure.
Xem giải thích

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

Câu hỏi tập trung vào việc cải thiện tính sẵn sàng cao (high availability - HA) cho giải pháp xử lý dữ liệu thời gian thực (real-time data processing). Trong ngữ cảnh Azure, giải pháp này thường liên quan đến các dịch vụ như Azure Stream Analytics (ASA) để xử lý stream dữ liệu liên tục. High availability nghĩa là đảm bảo hệ thống không bị gián đoạn, có khả năng phục hồi tự động trước sự cố (như outage vùng dữ liệu), duy trì uptime cao (thường >99.99%). Câu hỏi yêu cầu chọn hành động tối ưu nhất để đạt HA cho toàn bộ pipeline xử lý dữ liệu thời gian thực, dựa trên best practices của Azure đến năm 2026 (phiên bản ASA mới nhất hỗ trợ deployment đa vùng paired regions với failover tự động).

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

Đáp án đúng: Deploy identical Azure Stream Analytics jobs to paired regions in Azure.

Lý do:
🛠️ Đây là phương pháp chuẩn HA chính thức của Azure Stream Analytics (ASA). Bằng cách triển khai các job ASA giống hệt nhau vào cặp vùng paired regions (ví dụ: East US và West US), hệ thống tự động failover khi một vùng gặp sự cố (regional outage). ASA hỗ trợ live traffic switching giữa các job ở paired regions mà không mất dữ liệu, đảm bảo xử lý real-time liên tục. Theo tài liệu Azure cập nhật 2025-2026, đây là cách tích hợp sẵn cho HA, không cần code thêm, và SLA lên đến 99.99% uptime.
📘 Nguồn tham khảo: Azure Stream Analytics High Availability & Azure Paired Regions.

📋 Giải thích chi tiết 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 nội dung gốc bằng tiếng Anh. Tôi sử dụng ✅ cho đúng và ❌ cho sai, kèm lý do cụ thể dựa trên kiến thức Azure mới nhất:

  • ❌ Deploy a High Concurrency Databricks cluster.
    Phương án này không phù hợp vì Databricks cluster (dù High Concurrency mode) chủ yếu dùng cho batch/ Spark processing hoặc ML, không phải real-time streaming HA. Databricks không thay thế ASA cho stream analytics, và high concurrency chỉ tăng scalability chứ không đảm bảo geo-redundancy hoặc failover tự động. Sử dụng nó sẽ làm phức tạp pipeline mà không giải quyết HA cốt lõi.

  • ❌ Deploy an Azure Stream Analytics job and use an Azure Automation runbook to check the status of the job and to start the job if it stops.
    Phương án này chỉ là workaround thủ công, không phải HA thực sự. Azure Automation runbook có thể monitor và restart job, nhưng phụ thuộc vào thời gian phát hiện lỗi (có thể mất hàng phút/giờ), gây gián đoạn real-time data. ASA 2026 hỗ trợ auto-scale nhưng không dùng runbook cho HA; cách này không scalable và tăng chi phí vận hành.

  • ❌ Set Data Lake Storage to use geo-redundant storage (GRS).
    Phương án này chỉ bảo vệ storage layer, không ảnh hưởng đến processing layer (ASA job). Data Lake Gen2 với GRS đảm bảo dữ liệu an toàn cross-region, nhưng nếu ASA job dừng (do vùng outage), processing vẫn fail. HA cho real-time cần tập trung vào compute/job, không chỉ storage.

  • ✅ Deploy identical Azure Stream Analytics jobs to paired regions in Azure.
    Như đã giải thích ở trên: Phương án tối ưu, hỗ trợ failover seamless, zero-downtime cho real-time pipeline. Best practice từ Microsoft đến 2026!

🧠 Kết luận: Chọn đáp án đúng giúp đạt HA toàn diện cho Azure real-time data processing. Nếu triển khai thực tế, hãy kết hợp với Event Hubs/Kafka cho input HA! 🚀

Câu 2
You have a table in an Azure Synapse Analytics dedicated SQL pool. The table was created by using the following Transact-SQL statement.
CREATE TABLE [dbo].[DimEmployee] (
    [EmployeeKey] [int] IDENTITY(1,1) NOT NULL,
    [EmployeeID] [int] NOT NULL,
    [FirstName] [varchar](100) NOT NULL,
    [LastName] [varchar](100) NOT NULL,
    [JobTitle] [varchar](100) NULL,
    [LastHireDate] [date] NULL,
    [StreetAddress] [varchar](500) NOT NULL,
    [City] [varchar](200) NOT NULL,
    [StateProvince] [varchar](50) NOT NULL,
    [Portalcode] [varchar](10) NOT NULL
)

You need to alter the table to meet the following requirements:
✑ Ensure that users can identify the current manager of employees.
✑ Support creating an employee reporting hierarchy for your entire company.
✑ Provide fast lookup of the managers' attributes such as name and job title.
Which column should you add to the table?
  1. A [ManagerEmployeeID] [smallint] NULL
  2. B [ManagerEmployeeKey] [smallint] NULL
  3. C [ManagerEmployeeKey] [int] NULL
  4. D [ManagerName] [varchar](200) NULL
Xem giải thích

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

Câu hỏi này thuộc lĩnh vực thiết kế cơ sở dữ liệu trong Azure Synapse Analytics (dedicated SQL pool), cụ thể là cách mở rộng một bảng dimension (DimEmployee) để hỗ trợ hệ thống phân cấp báo cáo nhân viên (employee reporting hierarchy).

  • Bối cảnh bảng gốc: Bảng DimEmployee là một bảng dimension điển hình trong mô hình data warehouse, sử dụng surrogate key [EmployeeKey] [int] IDENTITY(1,1) NOT NULL làm primary key. Các cột khác bao gồm business key [EmployeeID] [int], thông tin cá nhân (tên, địa chỉ), và một số thuộc tính NULLable như JobTitle, LastHireDate.

  • Yêu cầu alter table (thêm cột mới):

    • ✅ Xác định manager hiện tại của nhân viên.
    • ✅ Hỗ trợ xây dựng hierarchy báo cáo toàn công ty (ví dụ: nhân viên báo cáo cho manager, manager báo cáo cho cấp cao hơn – dạng self-referencing).
    • ✅ Tra cứu nhanh attributes của manager (như tên, job title) – yêu cầu hiệu suất cao trong dedicated SQL pool.

Mục tiêu là thêm một cột tham chiếu tự thân (self-referencing FK) để liên kết nhân viên với manager, tận dụng surrogate key cho hiệu suất và tính toàn vẹn dữ liệu. Đây là best practice trong data warehousing (Slowly Changing Dimension loại 2 hoặc hierarchy modeling) theo tài liệu Microsoft cập nhật đến 2024-2026.

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

✅ Đáp án đúng: [ManagerEmployeeKey] [int] NULL

Lý do lựa chọn:

  • 🛠️ Cột này là self-referencing foreign key tham chiếu đến [EmployeeKey] (surrogate key chính).
  • ✅ Hỗ trợ hierarchy: Sử dụng recursive CTE hoặc HierarchyID để xây dựng cây báo cáo (manager của manager...).
  • ✅ Xác định manager hiện tại: NULL cho top-level manager, giá trị khác cho nhân viên.
  • ✅ Tra cứu nhanh attributes: Join trực tiếp DimEmployee e JOIN DimEmployee m ON e.ManagerEmployeeKey = m.EmployeeKey – hiệu suất cao nhờ int surrogate key (nhỏ gọn, index tốt trong Synapse SQL pool).
  • Kiểu int khớp với [EmployeeKey], tránh lỗi cast và đảm bảo tính toàn vẹn (có thể add FK constraint sau).

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

  • ❌ [ManagerEmployeeID] [smallint] NULL
    Sai vì sử dụng business key [EmployeeID] thay vì surrogate key. Business key có thể không unique (duplicate IDs giữa hệ thống), gây vấn đề hierarchy. Kiểu smallint quá nhỏ (chỉ -32k đến 32k), không khớp int của EmployeeID, dẫn đến overflow khi số nhân viên lớn. Không hỗ trợ fast lookup attributes hiệu quả (phải join qua fact/dim khác).

  • ❌ [ManagerEmployeeKey] [smallint] NULL
    Sai ở kiểu dữ liệu smallint – quá hẹp so với [EmployeeKey] [int] (hàng triệu records). Gây lỗi insert/join khi IDENTITY vượt 32k. Ý tưởng đúng (surrogate key) nhưng implementation sai, vi phạm best practice Azure Synapse về data type matching cho performance.

  • ✅ [ManagerEmployeeKey] [int] NULL
    Đúng hoàn toàn như giải thích trên. Best practice cho adjacency list model trong hierarchy, tối ưu cho dedicated SQL pool với columnar storage và distributed tables.

  • ❌ [ManagerName] varchar NULL
    Sai vì denormalized data (lưu tên manager trực tiếp) – vi phạm nguyên tắc data warehouse (redundancy cao). Không hỗ trợ "current manager" nếu manager thay đổi (phải update toàn bộ records). Tra cứu attributes chậm/không chính xác (không join được hierarchy), dễ lỗi chính tả/duy trì. Không dùng cho hierarchy thực thụ.

🧩 Kết luận: Phương án đúng tận dụng surrogate key self-join – pattern chuẩn trong Azure Synapse đến 2026, đảm bảo scalability và query performance!

Câu 3
You implement an enterprise data warehouse in Azure Synapse Analytics.
You have a large fact table that is 10 terabytes (TB) in size.
Incoming queries use the primary key SaleKey column to retrieve data as displayed in the following table:

You need to distribute the large fact table across multiple nodes to optimize performance of the table.
Which technology should you use?
  1. A hash distributed table with clustered index
  2. B hash distributed table with clustered Columnstore index
  3. C round robin distributed table with clustered index
  4. D round robin distributed table with clustered Columnstore index
  5. E heap table with distribution replicate
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 triển khai một enterprise data warehouse trong Azure Synapse Analytics (cụ thể là Dedicated SQL Pools, trước đây gọi là Azure SQL Data Warehouse). 📊

  • Bối cảnh chính: Bạn có một fact table lớn 10TB (bảng sự kiện chứa dữ liệu giao dịch lớn). Các truy vấn đầu vào (incoming queries) chủ yếu sử dụng cột primary key SaleKey để lấy dữ liệu.

  • Dữ liệu mẫu từ hình ảnh 🔍: Hình ảnh hiển thị một bảng dữ liệu mẫu với các cột sau: | SaleKey | CityKey | CustomerKey | StockItemKey | InvoiceDateKey | Quantity | UnitPrice | TotalExcludingTax | |---------|---------|-------------|--------------|----------------|----------|-----------|-------------------| | 49309 | 9858 | 170 | 69 | 10/22/13 | 8 | 16 | 128 | | 49343 | 5710 | 234 | 68 | 10/22/13 | 10 | 16 | 160 | | 49352 | 66109 | 163 | 70 | 10/22/13 | 4 | 16 | 64 | | 49448 | 65812 | 230 | 70 | 10/22/13 | 8 | 16 | 128 | | 49678 | 85877 | 288 | 69 | 10/24/13 | 1 | 16 | 16 |

    Phân tích hình ảnh quan trọng:

    • SaleKey là cột duy nhất và tăng dần (unique primary key), được sử dụng làm điểm lọc/truy vấn chính (queries retrieve data qua SaleKey).
    • Các cột khác như CityKey, CustomerKey, StockItemKey, InvoiceDateKey là các dimension keys (khóa ngoại liên kết với dimension tables).
    • Ngày InvoiceDateKey gần giống nhau (10/22/13 hoặc 10/24/13), Quantity/UnitPrice/TotalExcludingTax là measures (dữ liệu số tính toán).
    • Mục tiêu: Phân phối (distribute) bảng lớn này qua nhiều nodes để tối ưu hiệu suất truy vấn (performance), giảm data movement giữa nodes khi query trên SaleKey.
  • Yêu cầu cốt lõi: Chọn công nghệ phân phối phù hợp cho fact table lớn trong Synapse Analytics để tối ưu hóa (queries nhanh hơn nhờ data co-location, ít shuffle data).

🛠️ Kiến thức nền tảng (cập nhật đến 2026): Trong Azure Synapse Dedicated SQL Pools (phiên bản mới nhất), dữ liệu được phân phối theo 3 cách chính: Hash Distributed (dựa trên hash của cột cụ thể), Round Robin (ngẫu nhiên), Replicated (sao chép toàn bộ). Đối với fact table lớn >1TB, ưu tiên Hash Distributed trên cột join/filter thường xuyên (như primary key SaleKey) để tránh skew và tối ưu joins. Kết hợp Clustered Columnstore Index (CCI) cho compression cao (đến 10x), segment elimination, và analytics queries nhanh (best practice từ MS Docs 2024-2026).

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

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

Đáp án đúng: hash distributed table with clustered Columnstore index

Lý do chi tiết 🏆:

  • Hash distributed trên SaleKey (primary key, cột truy vấn chính): Đảm bảo dữ liệu được phân bổ đều (hash function tạo even distribution), queries trên SaleKey chỉ scan một node duy nhất (colocation), giảm data movement 90%+, lý tưởng cho fact table 10TB với point lookups/joins trên PK.
  • Clustered Columnstore index (CCI): Tối ưu cho data warehouse lớn, nén dữ liệu hiệu quả (giảm storage 10x), hỗ trợ batch mode processing, segment pruning (chỉ đọc segment cần thiết). Kết hợp hash + CCI là best practice cho large fact tables trong Synapse (DWU cao), cải thiện query speed 5-10x so với rowstore.
  • Không dùng Round Robin (skew cao nếu filter SaleKey), Heap (không index, chậm scan), hay Replicate (không scale cho 10TB).

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

  • hash distributed table with clustered index ❌
    Sai vì: Hash distributed trên SaleKey là tốt cho phân phối và queries, nhưng clustered index (rowstore, B-tree) kém hiệu quả với 10TB analytics data – nén kém (chỉ 2-3x), chậm batch processing, dễ fragmentation. CCI vượt trội hơn cho DW workloads (MS khuyến nghị CCI cho >1TB).

  • hash distributed table with clustered Columnstore index ✅
    Đúng vì: Kết hợp hoàn hảo hash trên SaleKey (even distribution, colocation queries) + CCI (compression cao, analytics nhanh). Phù hợp 100% cho large fact table với point queries trên PK, scale tốt trên multi-nodes (xác nhận từ MS best practices 2026).

  • round robin distributed table with clustered index ❌
    Sai vì: Round Robin phân bổ ngẫu nhiên, queries trên SaleKey phải broadcast/full scan tất cả nodes (data movement cao, chậm 5-10x với 10TB). Clustered index rowstore càng làm tệ hơn cho analytics.

  • round robin distributed table with clustered Columnstore index ❌
    Sai vì: CCI tốt cho compression/analytics, nhưng Round Robin không tận dụng được filter trên SaleKey (không colocation), dẫn đến shuffle data lớn giữa nodes, hiệu suất kém với large table.

  • heap table with distribution replicate ❌
    Sai vì: Heap (no index) chậm scan toàn bộ 10TB; Replicated sao chép toàn bộ table lên tất cả nodes (storage explode 10TB x nodes, chỉ phù hợp small dimensions <2GB, không dùng cho large fact). Không optimize performance mà còn tốn kém.

Câu 4
What should you recommend to prevent users outside the Litware on-premises network from accessing the analytical data store?
  1. A a server-level virtual network rule
  2. B a database-level virtual network rule
  3. C a server-level firewall IP rule
  4. D a database-level firewall IP rule
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 khuyến nghị giải pháp bảo mật cho kho dữ liệu phân tích (analytical data store) trong môi trường hybrid của Litware, nơi có mạng on-premises. Mục tiêu chính là ngăn chặn người dùng bên ngoài mạng Litware on-premises truy cập vào kho dữ liệu này.

  • Bối cảnh: Litware thường là case study trong các kỳ thi Microsoft Azure (như DP-203 Data Engineering), với kho dữ liệu phân tích có thể là Azure Synapse Analytics (SQL pool), Azure SQL Database hoặc tương tự. Mạng on-premises kết nối với Azure qua VPN hoặc ExpressRoute, nhưng cần chặn truy cập công khai từ internet hoặc các mạng khác ngoài on-premises.
  • Vấn đề cốt lõi: Mặc định, các dịch vụ Azure SQL/Synapse có endpoint công khai, cho phép truy cập từ bất kỳ IP nào. Để chỉ cho phép từ IP range cụ thể của on-premises (thường là dải IP cố định hoặc public IP của on-premises), cần cấu hình quy tắc tường lửa (firewall rules) ở mức server để whitelist chỉ những IP đó, từ chối tất cả các IP còn lại.
  • Kiến thức cập nhật (tính đến 2026): Theo tài liệu Azure mới nhất (Azure SQL & Synapse 2024+), firewall IP rules (server-level) là cách hiệu quả nhất để kiểm soát truy cập IP-based cho public endpoint, đặc biệt khi on-premises có IP range rõ ràng. VNet rules phù hợp hơn cho traffic từ Azure VNets, không lý tưởng cho on-premises trực tiếp trừ khi đã tích hợp VNet đầy đủ (private endpoint ưu tiên hơn).

✅ Đáp án đúng: a server-level firewall IP rule

Lý do lựa chọn:

  • Quy tắc tường lửa IP ở mức server-level (áp dụng cho toàn bộ logical server chứa database) cho phép whitelist chỉ dải IP của mạng Litware on-premises, tự động chặn tất cả IP từ bên ngoài (internet hoặc các mạng khác).
  • Đây là giải pháp đơn giản, hiệu quả cho public endpoint, không yêu cầu VNet integration phức tạp. Server-level đảm bảo bảo vệ toàn diện cho tất cả databases trên server, phù hợp với analytical data store (như Synapse SQL pool).
  • 🛠️ Cách triển khai: Trong Azure Portal > SQL Server > Networking > Firewalls and virtual networks > Add client IP hoặc specific IP range của on-premises (ví dụ: 192.168.1.0/24). Mặc định deny all public access trừ khi whitelist.

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

  • a server-level virtual network rule: ❌ Sai vì quy tắc VNet ở mức server chỉ cho phép truy cập từ các Azure Virtual Network (VNet)/subnet cụ thể, không trực tiếp whitelist IP của on-premises (trừ khi on-premises đã tunnel qua VNet via VPN và traffic routed đúng). Không hiệu quả để chặn "người dùng bên ngoài on-premises" nếu endpoint vẫn public; phù hợp hơn cho intra-Azure traffic. Sử dụng sẽ yêu cầu private endpoint hoặc service endpoint, phức tạp hơn cần thiết.

  • a database-level virtual network rule: ❌ Sai vì tương tự option trên, nhưng chỉ áp dụng cho một database cụ thể (không toàn server). Giới hạn phạm vi bảo vệ, không khuyến nghị cho analytical data store chia sẻ server. VNet rule vẫn không ưu tiên cho on-premises IP public/direct access.

  • a server-level firewall IP rule: ✅ Đúng (như giải thích ở trên). Đây là lựa chọn tối ưu cho kiểm soát IP chính xác từ on-premises, chặn toàn bộ traffic ngoài whitelist ở mức server.

  • a database-level firewall IP rule: ❌ Sai vì chỉ áp dụng cho một database riêng lẻ, không bảo vệ toàn bộ server chứa analytical data store. Nếu có nhiều DBs hoặc pools, kẻ tấn công có thể truy cập các DB khác trên cùng server. Server-level là best practice cho bảo mật toàn diện.

📘 Tài liệu tham khảo

  • Azure Docs (cập nhật 2024-2026): IP firewall rules - Azure SQL Database & Synapse – Chi tiết server vs database-level.
  • Synapse Networking: Networking in Azure Synapse Analytics.
  • Best Practices DP-203: Microsoft Learn paths về Data Engineering on Azure, case study Litware nhấn mạnh firewall IP cho hybrid access control.
  • Cập nhật mới: Từ 2024, Microsoft khuyến nghị kết hợp với Microsoft Defender for SQL và private endpoints cho zero public access, nhưng firewall IP vẫn là baseline cho IP-based restriction.

Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần case study đầy đủ Litware, hãy cung cấp thêm chi tiết.

Câu 5
You have an Azure Synapse workspace named MyWorkspace that contains an Apache Spark database named mytestdb.
You run the following command in an Azure Synapse Analytics Spark pool in MyWorkspace.
CREATE TABLE mytestdb.myParquetTable(
EmployeeID int,
EmployeeName string,
EmployeeStartDate date)

USING Parquet -
You then use Spark to insert a row into mytestdb.myParquetTable. The row contains the following data.

One minute later, you execute the following query from a serverless SQL pool in MyWorkspace.

SELECT EmployeeID -
FROM mytestdb.dbo.myParquetTable
WHERE EmployeeName = 'Alice';
What will be returned by the query?
  1. A 24
  2. B an error
  3. C a null value
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 chủ đề Azure Synapse Analytics (không phải AWS như mô tả ban đầu, có thể là nhầm lẫn), tập trung vào khả năng chia sẻ dữ liệu giữa Apache Spark pool và serverless SQL pool trong cùng một Azure Synapse workspace.

  • Bối cảnh: Bạn có workspace tên MyWorkspace chứa Spark database mytestdb.
    • Lệnh CREATE TABLE mytestdb.myParquetTable(...) USING Parquet tạo một bảng Parquet trong Spark pool (lưu dữ liệu dưới dạng file Parquet trong data lake).
    • Sau đó, dùng Spark để insert một hàng dữ liệu (dựa trên hình ảnh đính kèm): | EmployeeName | EmployeeID | EmployeeStartDate | |--------------|------------|-------------------| | Alice | 24 | 2020-01-25 |
      • Khoảng 1 phút sau, chạy query từ serverless SQL pool:
        SELECT EmployeeID
        FROM mytestdb.dbo.myParquetTable
        WHERE EmployeeName = 'Alice';
        
  • Vấn đề cốt lõi: Query từ SQL pool có đọc được dữ liệu vừa insert từ Spark pool không? Schema .dbo cho thấy SQL pool đang truy cập bảng Spark qua tích hợp Lakehouse (dữ liệu Parquet được expose tự động như external table trong SQL pool).
  • Điểm quan trọng (cập nhật đến 2026): Azure Synapse hỗ trợ near real-time data sharing giữa Spark và SQL pools qua Spark Catalog. Dữ liệu Parquet được commit từ Spark sẽ có sẵn ngay lập tức hoặc sau vài giây/phút (1 phút ở đây để đảm bảo flush metadata). Không cần Delta Lake vì Parquet thuần túy vẫn hoạt động tốt trong Synapse Lakehouse model. 📘 Tài liệu tham khảo: Azure Synapse Analytics - Use Spark tables from serverless SQL pool (phiên bản mới nhất 2024-2026).

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

Đáp án đúng: "24"
🛠️ Lý do:

  • Dữ liệu insert từ Spark (Alice với EmployeeID=24) được lưu vào file Parquet trong mytestdb.
  • Serverless SQL pool truy cập trực tiếp qua mytestdb.dbo.myParquetTable (.dbo là schema mặc định để SQL pool đọc Spark tables).
  • Sau 1 phút, metadata được cập nhật, query WHERE EmployeeName = 'Alice' sẽ trả về chính xác 24 vì dữ liệu khớp hoàn hảo (từ hình ảnh). Không có delay lớn hay lỗi schema trong Synapse Lakehouse. ✅ Hoàn hảo!

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

  • "24"
    ✅ Đúng. Như phân tích trên, Spark table Parquet được chia sẻ seamless với SQL serverless pool. Hình ảnh xác nhận EmployeeID=24 cho 'Alice', query sẽ match và return giá trị này ngay. Không có vấn đề về type mismatch (int/string/date đều compatible).

  • "an error"
    ❌ Sai. Không có lỗi vì:

    • Synapse hỗ trợ đọc Parquet từ Spark database qua .dbo schema mà không cần external table thủ công.
    • Không lỗi quyền truy cập (cùng workspace), schema đúng (mytestdb), và dữ liệu đã commit sau insert. Nếu có lỗi, thường do quyền hoặc path sai – không áp dụng ở đây.
  • "a null value"
    ❌ Sai.

    • EmployeeID=24 không null (rõ ràng từ hình ảnh insert).
    • Query WHERE khớp 'Alice' sẽ return full row, không null. Null chỉ xảy ra nếu cột thiếu dữ liệu hoặc filter sai, nhưng dữ liệu đầy đủ và match chính xác.

Kết luận: Câu hỏi kiểm tra kiến thức về data sharing giữa Spark & SQL pools trong Synapse – một tính năng mạnh mẽ của Azure Lakehouse! 🚀 Nếu cần demo code thực tế, hãy cho biết thêm!

Câu 6 Chọn nhiều đáp án
A company has a real-time data analysis solution that is hosted on Microsoft Azure. The solution uses Azure Event Hub to ingest data and an Azure Stream
Analytics cloud job to analyze the data. The cloud job is configured to use 120 Streaming Units (SU).
You need to optimize performance for the Azure Stream Analytics job.
Which two actions should you perform? Each correct answer presents part of the solution.
NOTE: Each correct selection is worth one point.
  1. A Implement event ordering.
  2. B Implement Azure Stream Analytics user-defined functions (UDF).
  3. C Implement query parallelization by partitioning the data output.
  4. D Scale the SU count for the job up.
  5. E Scale the SU count for the job down.
  6. F Implement query parallelization by partitioning the data input.
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 (ASA) – một dịch vụ xử lý dữ liệu thời gian thực trên Microsoft Azure. 🛤️

  • Bối cảnh: Một công ty đang chạy giải pháp phân tích dữ liệu thời gian thực trên Azure. Dữ liệu được thu thập qua Azure Event Hubs (dịch vụ ingestion dữ liệu streaming), sau đó được xử lý bởi một Azure Stream Analytics cloud job với cấu hình 120 Streaming Units (SU). SU là đơn vị đo lường tài nguyên tính toán (CPU/memory) cho job ASA, và 120 SU là mức khá cao (tối đa hiện tại là 1200 SU theo tài liệu Azure 2024+).

  • Yêu cầu: Tối ưu hiệu suất (performance) cho job ASA này. Đây là câu hỏi multi-select (chọn 2 đáp án đúng), mỗi đáp án đúng chiếm 1 điểm. 🎯

  • Mục tiêu tối ưu: Với SU cao nhưng performance chưa tốt, cần tập trung vào parallelization (song song hóa truy vấn) để tận dụng tài nguyên hiệu quả hơn, thay vì chỉ scale SU (vì 120 SU đã lớn). ASA hỗ trợ parallel execution khi dữ liệu được partition đúng cách trên input/output. 📈

Kiến thức cập nhật: Dựa trên tài liệu Azure Stream Analytics phiên bản mới nhất (2024-2026), ASA ưu tiên query parallelization qua partitioning để scale out horizontally, đặc biệt với Event Hubs (hỗ trợ lên đến 32 partitions). Không liên quan AWS như đề cập (có thể nhầm lẫn), toàn bộ là Azure-native. 📘

Nguồn tham khảo:

✅ Đáp án đúng (chọn 2)

Hai hành động cần thực hiện để tối ưu performance là:

  1. Implement query parallelization by partitioning the data output
    Lý do: Partition output giúp ASA phân bổ workload đều trên nhiều node, tăng throughput. Với 120 SU, parallelization output tận dụng tối đa SU bằng cách tạo nhiều "steps" song song. 🔄

  2. Implement query parallelization by partitioning the data input
    Lý do: Partition input (từ Event Hubs) cho phép ASA đọc dữ liệu song song từ nhiều partitions, tránh bottleneck ở ingestion. Điều này kích hoạt full query parallelization khi kết hợp với output partitioning. 🚀

Giải thích tổng quát lý do chọn: ASA job chỉ fully parallelize khi cả input VÀ output đều được partition (sử dụng PARTITION BY trong query hoặc cấu hình consumer groups). Scale SU chỉ tăng compute vertically, không giải quyết bottleneck parallel nếu không partition. Theo best practices Azure 2026, đây là bước đầu tiên trước khi scale SU thêm. 💡

📋 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 một cách chi tiết. 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 nổi bật:

  • Implement event ordering.
    ❌ Sai. Event ordering (sắp xếp sự kiện theo thứ tự) chỉ cần thiết cho các use case yêu cầu strict ordering (như Window functions với timestamps), nhưng nó tăng latency và giảm throughput vì buộc ASA serialize dữ liệu. Không giúp tối ưu performance cho job 120 SU, thậm chí làm chậm hơn. 🐌

  • Implement Azure Stream Analytics user-defined functions (UDF).
    ❌ Sai. UDF (hàm tự định nghĩa JavaScript/CLI) dùng cho custom logic phức tạp, nhưng tăng CPU overhead và không hỗ trợ parallelization tốt (UDF chạy serialized). Không liên quan trực tiếp đến scale performance streaming job; chỉ dùng khi cần business logic đặc biệt. ⚠️

  • Implement query parallelization by partitioning the data output.
    ✅ Đúng. Như giải thích trên, partitioning output (ví dụ: INTO [output] PARTITIONED BY [key]) cho phép ASA tạo nhiều output adapters song song, tận dụng 120 SU hiệu quả. Giảm backpressure và tăng scalability. 📤

  • Scale the SU count for the job up.
    ❌ Sai. Scale SU lên (tăng từ 120) chỉ tăng compute vertically, nhưng nếu query không parallelized (thiếu partitioning), performance vẫn bottleneck do single-threaded execution. Azure khuyến nghị parallelization trước, sau đó mới scale SU (max 1200 SU). ⏫

  • Scale the SU count for the job down.
    ❌ Sai. Giảm SU xuống sẽ giảm performance thay vì tối ưu, vì workload đã yêu cầu 120 SU cao. Đây là hành động ngược lại với mục tiêu, chỉ dùng khi over-provisioned (nhưng câu hỏi không chỉ ra). ⏬

  • Implement query parallelization by partitioning the data input.
    ✅ Đúng. Partitioning input (từ Event Hubs, ví dụ: INPUT PARTITIONED BY PartitionId) kích hoạt ASA đọc parallel từ nhiều partitions Event Hubs (tối đa 32), loại bỏ input bottleneck. Kết hợp với output partitioning để đạt max parallelization. 📥

Kết luận: Thực hiện hai hành động ✅ sẽ giúp job ASA đạt scale-out tối ưu, tăng throughput lên gấp nhiều lần mà không cần tăng SU. Hãy test với ASA Live Metrics để monitor sau khi apply! 🔍

Câu 7
You have an Azure Synapse Analytics dedicated SQL pool that contains a large fact table. The table contains 50 columns and 5 billion rows and is a heap.
Most queries against the table aggregate values from approximately 100 million rows and return only two columns.
You discover that the queries against the fact table are very slow.
Which type of index should you add to provide the fastest query times?
  1. A nonclustered columnstore
  2. B clustered columnstore
  3. C nonclustered
  4. D clustered
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 dedicated SQL pool (một dịch vụ phân tích dữ liệu lớn của Microsoft Azure, tương tự data warehouse). Bạn có một bảng fact lớn (large fact table) với 50 cột và 5 tỷ hàng (5 billion rows), hiện đang là heap (bảng không có clustered index, dữ liệu lưu trữ theo thứ tự chèn).

Hầu hết các truy vấn (queries) trên bảng này tổng hợp (aggregate) giá trị từ khoảng 100 triệu hàng và chỉ trả về 2 cột. Tuy nhiên, các truy vấn đang chạy rất chậm.

Mục tiêu: Chọn loại index phù hợp để tối ưu hóa thời gian truy vấn nhanh nhất (fastest query times). Đây là tình huống điển hình trong data warehousing/analytics, nơi cần xử lý dữ liệu lớn với các phép tổng hợp (SUM, COUNT, AVG...) trên subset lớn dữ liệu.

🛠️ Lưu ý kỹ thuật: Trong Azure Synapse dedicated SQL pool (dựa trên SQL Server engine với phân tán), columnstore indexes rất hiệu quả cho workload OLAP (Online Analytical Processing) nhờ nén dữ liệu cao (compression lên đến 10x), segment elimination, và batch mode processing. Heap không có cấu trúc tối ưu cho analytics lớn.

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

Đáp án đúng: clustered columnstore

Lý do:

  • Clustered Columnstore Index (CCI) là lựa chọn tối ưu nhất cho bảng fact lớn trong dedicated SQL pool. Nó thay thế hoàn toàn cấu trúc heap bằng cách tổ chức dữ liệu theo cột (column-wise), hỗ trợ nén dữ liệu cực cao (đặc biệt với 50 cột), segment elimination (loại bỏ nhanh các segment không liên quan khi query 100M rows), và batch mode execution cho aggregates nhanh chóng.
  • Với 5B rows và queries aggregate chỉ 2 cột, CCI giảm I/O đáng kể (chỉ đọc dữ liệu cần thiết), cải thiện performance lên 10-100x so với heap.
  • Microsoft khuyến nghị CCI cho fact tables > 100M rows trong Synapse để đạt fastest query times. (Cập nhật 2024-2026: Synapse hỗ trợ CCI với adaptive caching và auto-compaction cải tiến).

📘 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 một cách chi tiết, giữ nguyên văn bản gốc tiếng Anh. Mỗi phương án được đánh giá dựa trên hiệu suất cho workload cụ thể (large aggregates trên heap table).

  • nonclustered columnstore ❌ SAI
    Đây là Nonclustered Columnstore Index (NCCI), chỉ là index phụ trên heap/rowstore. Nó tốt cho một số queries selective, nhưng không hiệu quả bằng CCI cho bảng fact lớn (5B rows) vì:

    • Vẫn phải đọc toàn bộ heap (row-by-row) trước khi dùng index → I/O cao, chậm với 100M rows aggregate.
    • Không thay thế storage chính, chỉ hỗ trợ filter → Không đạt "fastest query times". Synapse ưu tiên CCI cho analytics thuần.
  • clustered columnstore ✅ ĐÚNG
    Clustered Columnstore Index (CCI) tổ chức toàn bộ bảng theo cột, lý tưởng cho aggregates lớn. Với 50 cột/5B rows, nó nén dữ liệu tối đa, loại bỏ segment nhanh (delta store cho updates nhỏ), và tận dụng vectorized processing → Query time giảm mạnh (thử nghiệm Microsoft: 10x+ speedup). Hoàn hảo thay thế heap.

  • nonclustered ❌ SAI
    Nonclustered (Rowstore) Index chỉ là index B-tree trên hàng (rows), phù hợp OLTP (transactional queries nhỏ). Với 100M rows aggregate, nó quét toàn bảng (table scan) → Chậm khủng khiếp trên 5B rows/50 cột (bookmark lookup overhead). Không dành cho data warehouse.

  • clustered ❌ SAI
    Clustered (Rowstore) Index tổ chức bảng theo key (B-tree), tốt cho point lookups/OLTP. Nhưng với aggregates rộng (100M rows) và chỉ 2 cột output, nó vẫn yêu cầu index scan lớn hoặc table scan → I/O cao, không nén tốt như columnstore. Microsoft không khuyến nghị cho Synapse fact tables lớn (heap → clustered row chỉ cải thiện marginal).

🧩 Tóm tắt khuyến nghị: Luôn ưu tiên CCI cho fact tables >1B rows trong Synapse. Nếu cần update thường xuyên, dùng CCI + delta store. Test với CREATE CLUSTERED COLUMNSTORE INDEX để verify! 🚀

Câu 8
What should you recommend using to secure sensitive customer contact information?
  1. A Transparent Data Encryption (TDE)
  2. B row-level security
  3. C column-level security
  4. D data sensitivity labels
Xem giải thích

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

Câu hỏi: "What should you recommend using to secure sensitive customer contact information?"
✅ Giải thích chi tiết: Câu hỏi này tập trung vào việc bảo mật dữ liệu nhạy cảm như thông tin liên lạc của khách hàng (ví dụ: email, số điện thoại, địa chỉ). Trong ngữ cảnh AWS (Amazon Redshift) – một dịch vụ kho dữ liệu phân tích phổ biến – chúng ta cần chọn công cụ phù hợp để che giấu, mã hóa hoặc kiểm soát truy cập ở mức cột cụ thể (column-level), vì thông tin liên lạc thường lưu trữ trong các cột riêng biệt. Mục tiêu là bảo vệ dữ liệu tại chỗ (in-place) mà không ảnh hưởng đến toàn bộ bảng hoặc hàng. Kiến thức cập nhật đến năm 2026: AWS Redshift hỗ trợ Column-level security policies từ năm 2022, cho phép áp dụng dynamic data masking hoặc encryption cho các cột nhạy cảm, tích hợp với AWS Lake Formation và IAM.

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

Đáp án đúng: column-level security
🛠️ Lý do chi tiết: Trong AWS Redshift (phiên bản mới nhất 2026), column-level security là tính năng chính thức cho phép che giấu dữ liệu (data masking) hoặc kiểm soát truy cập ở mức cột cụ thể, lý tưởng cho thông tin liên lạc nhạy cảm. Nó sử dụng security policies để áp dụng quy tắc động dựa trên người dùng/role (ví dụ: admin thấy đầy đủ, user thường chỉ thấy masked data như "****@example.com"). Điều này đảm bảo tuân thủ GDPR/CCPA mà không cần thay đổi schema. So với các lựa chọn khác, nó chính xác nhất cho bảo mật granular ở cộ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 tính phù hợp với AWS Redshift để bảo mật sensitive customer contact information:

  • ❌ Transparent Data Encryption (TDE)
    Phân tích sai: TDE chỉ mã hóa toàn bộ dữ liệu tại chỗ (at-rest) ở mức database/file, không bảo vệ dữ liệu khi truy vấn (in-use). Trong AWS RDS (SQL Server), TDE có sẵn nhưng không granular cho cột cụ thể và không áp dụng cho Redshift (Redshift dùng encryption mặc định với KMS). Không phù hợp cho contact info nhạy cảm cần masking động.

  • ❌ row-level security
    Phân tích sai: Row-level security kiểm soát truy cập theo hàng dựa trên điều kiện (ví dụ: user chỉ thấy rows của mình), hỗ trợ trong Redshift/PostgreSQL RDS. Tuy nhiên, nó không bảo vệ cột – user vẫn thấy contact info nếu có quyền đọc row. Không lý tưởng cho dữ liệu nhạy cảm nằm rải rác ở các cột.

  • ✅ column-level security
    Phân tích đúng: Như đã giải thích, đây là tính năng chuyên biệt của Redshift để mask/encrypt cột nhạy cảm (ví dụ: partial/full masking cho email/phone). Tích hợp IAM/Lake Formation, hỗ trợ audit log. Phù hợp nhất cho bảo mật contact info theo best practices AWS 2026.

  • ❌ data sensitivity labels
    Phân tích sai: Đây là tính năng của Microsoft Purview/Azure (hoặc Google DLP), dùng để gắn nhãn độ nhạy cảm và tự động classify. AWS dùng Amazon Macie cho data classification, nhưng không gọi là "data sensitivity labels" và không phải công cụ bảo mật trực tiếp cho cột. Không native trong Redshift.

📘 Tài liệu tham khảo

🧑‍💻 Lời khuyên từ Azure Data Engineer: Là chuyên gia Azure, tôi thấy tương tự Azure Synapse dùng Column-level Encryption/Masking (T-SQL), nhưng AWS Redshift vượt trội ở scale phân tích! Nếu migrate sang Azure, dùng Always Encrypted.

Câu 9
You need to trigger an Azure Data Factory pipeline when a file arrives in an Azure Data Lake Storage Gen2 container.
Which resource provider should you enable?
  1. A Microsoft.Sql
  2. B Microsoft.Automation
  3. C Microsoft.EventGrid
  4. D Microsoft.EventHub
Xem giải thích

🧩 Phân tích câu hỏi trắc nghiệm

Giải thích nội dung câu hỏi một cách chi tiết:
Câu hỏi tập trung vào việc thiết lập một cơ chế tự động kích hoạt (trigger) pipeline trong Azure Data Factory (ADF) khi có file mới được tải lên (arrives) vào một container trong Azure Data Lake Storage Gen2 (ADLS Gen2).

  • Azure Data Factory là dịch vụ ETL/ELT để orchestration dữ liệu, hỗ trợ các trigger dựa trên sự kiện (event-based triggers).
  • Azure Data Lake Storage Gen2 là kho lưu trữ dữ liệu lớn, hỗ trợ tích hợp với các sự kiện blob (như tạo file mới).
  • Để thực hiện, cần sử dụng Event-driven architecture qua Azure Event Grid, nơi ADLS Gen2 phát hiện sự kiện "file arrived" (tương đương blobCreated event) và gửi đến ADF trigger.
  • Resource provider là các namespace cần đăng ký (register) trong Azure subscription để sử dụng dịch vụ tương ứng (qua Azure Portal > Subscriptions > Resource providers).
    Câu hỏi kiểm tra kiến thức về tích hợp ADF với Event Grid cho ADLS Gen2, theo tài liệu Azure cập nhật đến năm 2026 (phiên bản mới nhất: Event Grid hỗ trợ Storage events v2023-01-01 trở lên).
    📘 Tài liệu tham khảo:
  • Azure Event Grid events for Azure Blob Storage (cập nhật 2025).
  • Create event-based triggers in Azure Data Factory (hướng dẫn ADF triggers với Event Grid).

✅ Đáp án đúng: Microsoft.EventGrid

Lý do lựa chọn:
Đây là resource provider chính xác cần enable để sử dụng Azure Event Grid, dịch vụ routing events từ ADLS Gen2 (source) đến ADF pipeline trigger (sink). Khi file mới đến container ADLS Gen2, Event Grid capture event "Microsoft.Storage.BlobCreated" và trigger pipeline tự động. Không enable provider này, bạn không thể tạo Event Grid topics/system topics cho storage events. Đây là best practice theo Azure Well-Architected Framework 2026 cho data integration.
🛠️ Cách triển khai: Register provider qua PowerShell: Register-AzResourceProvider -ProviderNamespace Microsoft.EventGrid.

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

Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh. Phân loại rõ ràng đúng/sai với lý do cụ thể:

  • ❌ Microsoft.Sql
    Sai vì: Provider này dành cho các dịch vụ SQL như Azure SQL Database/Serverless, không liên quan đến event triggering từ storage. Nó chỉ hỗ trợ SQL managed instances hoặc databases, không capture blob events từ ADLS Gen2. Sử dụng sẽ không trigger ADF pipeline.

  • ❌ Microsoft.Automation
    Sai vì: Provider cho Azure Automation (runbooks, automation accounts), dùng để automate tasks script-based hoặc hybrid workers. Không hỗ trợ real-time event từ storage như file arrival; chỉ phù hợp cho scheduled jobs, không integrate trực tiếp với ADLS events cho ADF.

  • ✅ Microsoft.EventGrid
    Đúng vì: Như giải thích trên, đây là provider cốt lõi cho Event Grid – dịch vụ pub/sub events. ADLS Gen2 tự động publish events đến Event Grid topics, ADF subscribe để trigger pipeline ngay lập tức (latency <1 phút). Hỗ trợ scale cao, chi phí thấp theo model 2026.

  • ❌ Microsoft.EventHub
    Sai vì: Provider cho Azure Event Hubs – dịch vụ streaming dữ liệu lớn (Kafka-compatible), dùng cho high-throughput ingestion như IoT/logs. Không phải cho simple blob events từ ADLS; Event Hubs yêu cầu custom producers, phức tạp hơn và không native integrate với ADF storage triggers như Event Grid.

🧩 Kết luận: Event Grid là lựa chọn tối ưu, tiết kiệm và serverless cho scenario này. Nếu implement, test qua Azure Portal > Event Grid > System Topics cho storage account! 🚀

Câu 10 Chọn nhiều đáp án
You plan to create an Azure Synapse Analytics dedicated SQL pool.
You need to minimize the time it takes to identify queries that return confidential information as defined by the company's data privacy regulations and the users who executed the queues.
Which two components should you include in the solution? Each correct answer presents part of the solution.
NOTE: Each correct selection is worth one point.
  1. A sensitivity-classification labels applied to columns that contain confidential information
  2. B resource tags for databases that contain confidential information
  3. C audit logs sent to a Log Analytics workspace
  4. D dynamic data masking for columns that contain confidential information
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 việc triển khai Azure Synapse Analytics dedicated SQL pool (một dịch vụ phân tích dữ liệu lớn với SQL pool chuyên dụng).
Mục tiêu chính là giảm thiểu thời gian để xác định:

  • Các query trả về thông tin bảo mật (confidential information) theo quy định bảo mật dữ liệu của công ty.
  • Người dùng (users) đã thực thi các query đó (lưu ý: câu hỏi viết "queues" có thể là lỗi đánh máy của "queries").

Đây là câu hỏi trắc nghiệm đa lựa chọn (multi-select), yêu cầu chọn hai thành phần cần thiết trong giải pháp. Mỗi lựa chọn đúng chiếm 1 điểm.
Giải pháp phải kết hợp phân loại dữ liệu nhạy cảm và ghi log kiểm toán để dễ dàng tra cứu nhanh chóng qua công cụ phân tích log.
📘 Tài liệu tham khảo: Azure Synapse Analytics - Data classification and auditing và Auditing for Azure Synapse Analytics (cập nhật mới nhất đến 2024, vẫn áp dụng cho 2026 với Synapse phiên bản mới nhất).

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

Hai thành phần cần thiết là:

  1. sensitivity-classification labels applied to columns that contain confidential information
  2. audit logs sent to a Log Analytics workspace

Lý do lựa chọn:

  • Sensitivity-classification labels giúp đánh dấu các cột chứa dữ liệu bảo mật (như PII - Personally Identifiable Information). Khi query truy cập các cột này, hệ thống sẽ tự động ghi nhận trong audit log, giúp dễ dàng lọc và xác định query + user vi phạm.
  • Audit logs sent to Log Analytics cho phép tập trung log kiểm toán vào workspace Log Analytics (Azure Monitor), nơi có Kusto Query Language (KQL) để tra cứu siêu nhanh (giây thay vì phút/giờ), xác định chính xác query và user.
    Kết hợp hai yếu tố này tối ưu hóa thời gian (minimize time) theo yêu cầu, vì labels kích hoạt audit thông minh và Log Analytics tăng tốc phân tích. 🛠️

📋 Giải thích chi tiết 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 tiếng Anh. Mỗi phương án được đánh dấu ✅ (đúng) hoặc ❌ (sai), kèm lý do bằng tiếng Việt:

  • ✅ sensitivity-classification labels applied to columns that contain confidential information
    Đúng vì: Tính năng sensitivity classification (phân loại độ nhạy cảm) trong Azure Synapse SQL pool cho phép gắn nhãn (labels) trực tiếp lên cột dữ liệu bảo mật. Khi query SELECT hoặc RETURN dữ liệu từ cột có label, audit log sẽ ghi nhận tự động (bao gồm user, query text, thời gian). Điều này giúp nhanh chóng lọc các query liên quan đến dữ liệu bảo mật mà không cần scan thủ công toàn bộ log. 🏷️ Hỗ trợ tích hợp với Microsoft Purview cho quản lý dữ liệu governance.

  • ❌ resource tags for databases that contain confidential information
    Sai vì: Resource tags chỉ là metadata gắn trên resource Azure (như database) để quản lý chi phí/billing/phân loại tài nguyên (ví dụ: tag "Environment=Prod", "Confidential=Yes"). Chúng không liên quan đến query-level auditing, không ghi nhận query cụ thể hay user thực thi, nên không giúp "minimize time" xác định query trả về dữ liệu bảo mật. Chỉ hữu ích cho quản lý resource cấp cao, không phải audit chi tiết. 🔖

  • ✅ audit logs sent to a Log Analytics workspace
    Đúng vì: Audit logs của Synapse (SQL Auditing) ghi chi tiết mọi hoạt động query (user, query text, kết quả). Gửi đến Log Analytics workspace (Azure Monitor) cho phép dùng KQL query log thời gian thực, lọc theo sensitivity labels hoặc dữ liệu bảo mật chỉ trong giây. Không gửi đến Log Analytics thì phải dùng storage thủ công, chậm hơn nhiều. 📊 Tích hợp sẵn với Synapse từ 2020 và cập nhật 2024.

  • ❌ dynamic data masking for columns that contain confidential information
    Sai vì: Dynamic data masking (DDM) chỉ che giấu (mask) dữ liệu nhạy cảm trong kết quả query (ví dụ: email thành xxx@xxx.com) cho user không có quyền, nhưng không ghi log hay identify query đã cố gắng truy cập dữ liệu thật. Nó bảo vệ dữ liệu runtime chứ không hỗ trợ audit/traceback user/query sau sự kiện, nên không giảm thời gian xác định vi phạm. 😷 (DDM hữu ích cho privacy nhưng không phải auditing tool).

🏆 Kết luận

Giải pháp hoàn chỉnh: Áp dụng sensitivity labels để "đánh dấu" dữ liệu + audit logs to Log Analytics để "tra cứu nhanh". Điều này tuân thủ quy định bảo mật như GDPR/CCPA. Nếu triển khai thực tế, kích hoạt auditing qua Azure Portal > Synapse > Auditing settings. 🚀
📘 Nguồn bổ sung: Microsoft Docs - Sensitivity labels in Synapse (phiên bản 2024, dự kiến không thay đổi lớn đến 2026).