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

Tìm thấy 228 câu.

Câu 81
You have an Azure Synapse Analytics dedicated SQL pool named Pool1. Pool1 contains a partitioned fact table named dbo.Sales and a staging table named stg.Sales that has the matching table and partition definitions.
You need to overwrite the content of the first partition in dbo.Sales with the content of the same partition in stg.Sales. The solution must minimize load times.
What should you do?
  1. A Insert the data from stg.Sales into dbo.Sales.
  2. B Switch the first partition from dbo.Sales to stg.Sales.
  3. C Switch the first partition from stg.Sales to dbo.Sales.
  4. D Update dbo.Sales from stg.Sales.
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 tên Pool1), một dịch vụ phân tích dữ liệu lớn của Microsoft Azure. Trong pool này có:

  • Bảng fact được phân vùng (partitioned) tên dbo.Sales – đây là bảng chính chứa dữ liệu bán hàng.
  • Bảng staging tên stg.Sales – bảng tạm để chuẩn bị dữ liệu, có cấu trúc bảng và phân vùng khớp hoàn toàn (matching table and partition definitions) với dbo.Sales.

Yêu cầu nhiệm vụ:

  • Overwrite (ghi đè) nội dung của phân vùng đầu tiên (first partition) trong dbo.Sales bằng nội dung cùng phân vùng đó từ stg.Sales.
  • Giải pháp phải giảm thiểu thời gian load (minimize load times) – nghĩa là tránh các hoạt động chậm như insert/update lớn, ưu tiên phương pháp metadata-only (chỉ thay đổi metadata mà không di chuyển dữ liệu vật lý).

🛠️ Nguyên lý cốt lõi: Trong Azure Synapse Dedicated SQL Pools (dựa trên SQL Server engine), các bảng partitioned hỗ trợ SWITCH PARTITION – một lệnh ALTER TABLE cho phép trao đổi phân vùng giữa hai bảng một cách rất nhanh (chỉ swap metadata, không copy dữ liệu), giúp overwrite partition mà không tốn thời gian load. Điều này đặc biệt hiệu quả cho fact table lớn.

📘 Kiến thức cập nhật: Theo tài liệu Microsoft mới nhất (Azure Synapse Analytics Dedicated SQL pool docs, cập nhật đến 2024-2026), SWITCH PARTITION yêu cầu hai bảng phải có check constraints khớp và partition scheme giống hệt, điều kiện đã được câu hỏi đảm bảo. Không có thay đổi lớn trong tính năng này so với SQL Server 2022.

Nguồn tham khảo:

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

Đáp án đúng: Switch the first partition from stg.Sales to dbo.Sales.

Lý do 🏆:

  • Lệnh ALTER TABLE dbo.Sales SWITCH PARTITION 1 TO stg.Sales PARTITION 1 (ngược lại hướng switch để đưa partition từ staging vào production) sẽ overwrite partition 1 của dbo.Sales bằng metadata từ stg.Sales một cách gần như tức thì (metadata swap, không scan/copy dữ liệu).
  • Điều này minimize load times tối đa, lý tưởng cho fact table lớn (hàng tỷ rows). Sau switch, stg.Sales sẽ có partition rỗng tương ứng, có thể truncate để chuẩn bị batch tiếp theo.
  • Hoàn toàn phù hợp với best practice ETL trong Synapse cho incremental load partitioned tables.

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

  • ❌ [SAI] Insert the data from stg.Sales into dbo.Sales.
    Phương án này dùng lệnh INSERT INTO dbo.Sales SELECT * FROM stg.Sales WHERE partition condition. Sai vì: Phải scan và copy toàn bộ dữ liệu partition (có thể hàng triệu rows), dẫn đến load times rất lâu (full data movement + index rebuild nếu có). Không overwrite thực sự mà chỉ append, dễ duplicate nếu không DELETE trước.

  • ❌ [SAI] Switch the first partition from dbo.Sales to stg.Sales.
    Lệnh ALTER TABLE stg.Sales SWITCH PARTITION 1 FROM dbo.Sales (hướng ngược). Sai vì: Điều này sẽ đưa partition từ dbo.Sales vào stg.Sales, khiến dbo.Sales mất partition 1 (trở thành rỗng), không overwrite mà swap ngược chiều. Không đạt yêu cầu đưa dữ liệu từ stg vào dbo.

  • ✅ [ĐÚNG] Switch the first partition from stg.Sales to dbo.Sales.
    Như đã giải thích ở phần đáp án đúng: Hướng switch đúng (từ staging vào production), overwrite chính xác partition 1, minimize load times nhờ metadata-only operation. Đây là phương pháp chuẩn theo docs Synapse.

  • ❌ [SAI] Update dbo.Sales from stg.Sales.
    Dùng UPDATE dbo.Sales SET ... FROM stg.Sales với JOIN trên partition key. Sai vì: UPDATE là row-by-row operation, yêu cầu scan toàn partition, logging lớn, và lock table lâu → load times cực kỳ chậm cho fact table partitioned lớn. Không hiệu quả bằng switch.

🧮 Tóm tắt lợi ích SWITCH: Giảm thời gian từ giờ (insert/update) xuống giây! Lý tưởng cho production ETL pipelines trong Azure Synapse. Nếu cần code mẫu: ALTER TABLE dbo.Sales SWITCH PARTITION 1 TO stg.Sales PARTITION 1; (sau đó TRUNCATE partition rỗng ở stg).

Câu 82
You have a partitioned table in an Azure Synapse Analytics dedicated SQL pool.
You need to design queries to maximize the benefits of partition elimination.
What should you include in the Transact-SQL queries?
  1. A JOIN
  2. B WHERE
  3. C DISTINCT
  4. D GROUP BY
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 (trước đây gọi là Azure SQL Data Warehouse), một dịch vụ phân tích dữ liệu lớn của Microsoft Azure. Cụ thể:

  • Bạn có một bảng phân vùng (partitioned table), nghĩa là dữ liệu được chia thành các phân vùng (partitions) dựa trên một cột phân vùng (partition key), thường là ngày tháng hoặc giá trị rời rạc để tối ưu hóa hiệu suất truy vấn.
  • Mục tiêu: Thiết kế các câu truy vấn Transact-SQL (T-SQL) để tối đa hóa lợi ích của partition elimination – đây là kỹ thuật mà SQL engine tự động loại bỏ (eliminate) các phân vùng không liên quan, chỉ quét dữ liệu trong các phân vùng phù hợp, giúp giảm I/O, tăng tốc độ và tiết kiệm tài nguyên compute (DWU).
  • Partition elimination chỉ xảy ra khi truy vấn có điều kiện lọc chính xác trên cột phân vùng (equality hoặc range predicates), và engine có thể xác định các phân vùng bị loại bỏ ngay từ kế hoạch thực thi.

Câu hỏi yêu cầu xác định yếu tố nào cần include trong T-SQL queries để kích hoạt và tận dụng tối đa partition elimination. 📘 (Dựa trên tài liệu chính thức Microsoft Azure Synapse Analytics, cập nhật đến 2024-2026: Partitioning in Synapse Analytics và Query performance with partitioning).

✅ Đáp án đúng: WHERE

Lý do lựa chọn:

  • Clause WHERE là yếu tố cốt lõi và trực tiếp kích hoạt partition elimination. Khi bạn thêm predicates (điều kiện) trên cột phân vùng (ví dụ: WHERE partition_date = '2024-01-01' hoặc WHERE partition_date BETWEEN '2024-01-01' AND '2024-01-31'), engine sẽ tự động loại bỏ các phân vùng không khớp, chỉ quét dữ liệu cần thiết.
  • Điều này tối đa hóa lợi ích bằng cách giảm lượng dữ liệu đọc từ storage (PolyBase hoặc Azure Storage), đặc biệt hiệu quả với bảng lớn (hàng tỷ rows). Không có WHERE phù hợp, engine phải quét toàn bộ bảng (full scan). 🛠️ Kết quả: Giảm thời gian query lên đến 90% trong các workload phân tích.

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

  • JOIN ❌
    Sai: JOIN (kể cả INNER, LEFT JOIN) không kích hoạt partition elimination trực tiếp. JOIN chỉ kết hợp dữ liệu giữa các bảng, nhưng elimination vẫn phụ thuộc vào WHERE clause trên cột phân vùng của bảng chính. Nếu không có WHERE lọc partition key, engine vẫn quét full partitions. JOIN có thể làm phức tạp kế hoạch thực thi nhưng không "maximize" elimination. 🧩 Ví dụ: Query với JOIN mà thiếu WHERE sẽ không loại bỏ partitions hiệu quả.

  • WHERE ✅
    Đúng: Như đã giải thích ở trên, WHERE với predicates trên partition column là chìa khóa duy nhất để engine thực hiện partition elimination. Đây là best practice được Microsoft khuyến nghị cho dedicated SQL pools. 📘 Tham khảo: Execution plan trong SSMS/Synapse Studio sẽ hiển thị "Partition Eliminated" khi WHERE hợp lệ.

  • DISTINCT ❌
    Sai: DISTINCT loại bỏ duplicates nhưng không liên quan đến partition elimination. Nó chỉ hoạt động sau khi dữ liệu đã được quét, có thể tăng overhead sort/hash mà không giảm partitions quét. Elimination vẫn cần WHERE; DISTINCT chỉ ảnh hưởng đến output, không tối ưu input scan. 🚫 Không khuyến khích dùng DISTINCT ở đầu query lớn vì tốn tài nguyên.

  • GROUP BY ❌
    Sai: GROUP BY dùng cho aggregation (nhóm và tính tổng), nhưng không tự kích hoạt elimination. Nó yêu cầu quét dữ liệu trước khi group, và elimination chỉ xảy ra nếu có WHERE lọc partition key. GROUP BY có thể phân phối dữ liệu qua nodes nhưng thường làm chậm query nếu thiếu WHERE, dẫn đến full scan. 🛠️ Best practice: Luôn kết hợp GROUP BY với WHERE trên partition column.

💡 Lời khuyên thực tế từ Azure Data Engineer

  • Kiểm tra elimination: Sử dụng EXPLAIN hoặc xem execution plan trong Synapse Studio để xác nhận "Partitions Eliminated: X out of Y".
  • Best practices 2026: Sử dụng clustered columnstore indexes (CCI) kết hợp partitioning cho hiệu suất cao nhất; tránh dynamic elimination với functions (như CAST). Tham khảo thêm: Synapse SQL performance tuning.

Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần ví dụ code T-SQL cụ thể, hãy hỏi thêm.

Câu 83 Chọn nhiều đáp án
You are designing a slowly changing dimension (SCD) for supplier data in an Azure Synapse Analytics dedicated SQL pool.
You plan to keep a record of changes to the available fields.
The supplier data contains the following columns.

Which three additional columns should you add to the data to create a Type 2 SCD? Each correct answer presents part of the solution.
NOTE: Each correct selection is worth one point.
  1. A surrogate primary key
  2. B effective start date
  3. C business key
  4. D last modified date
  5. E effective end date
  6. F foreign key
Xem giải thích

🧩 Phân tích chi tiết câu hỏi trắc nghiệm về Slowly Changing Dimension (SCD) Type 2 trong Azure Synapse Analytics

📘 Nội dung câu hỏi được giải thích rõ ràng:
Câu hỏi yêu cầu thiết kế một Slowly Changing Dimension (SCD) Type 2 cho dữ liệu nhà cung cấp (supplier data) trong Azure Synapse Analytics dedicated SQL pool. Mục tiêu là giữ lại toàn bộ lịch sử thay đổi của các trường dữ liệu hiện có (không ghi đè, mà tạo bản ghi mới cho mỗi thay đổi).

Dữ liệu supplier bao gồm các cột sau (dựa trên hình ảnh bảng được cung cấp):

  • SupplierSystemID: ID duy nhất của nhà cung cấp trong hệ thống ERP (đây là business key chính, không thay đổi).
  • SupplierName: Tên công ty nhà cung cấp.
  • SupplierAddress1: Địa chỉ chính của nhà cung cấp.
  • SupplierAddress2: Địa chỉ phụ của nhà cung cấp.
  • SupplierCity: Thành phố.
  • SupplierStateProvince: Bang hoặc tỉnh.
  • SupplierCountry: Quốc gia.
  • SupplierPostalCode: Mã bưu điện.
  • SupplierDescription: Mô tả tự do về nhà cung cấp.
  • SupplierCategory: Danh mục hàng hóa cung cấp.

🛠️ SCD Type 2 là kỹ thuật data warehousing chuẩn để xử lý thay đổi chậm (slowly changing) bằng cách:

  • Tạo bản ghi mới cho mỗi thay đổi (ví dụ: tên hoặc địa chỉ thay đổi → tạo row mới, row cũ vẫn giữ nguyên lịch sử).
  • Sử dụng surrogate key làm primary key (không dùng business key vì nó không thay đổi).
  • Theo dõi khoảng thời gian hiệu lực của mỗi phiên bản qua effective dates (ngày bắt đầu và kết thúc).
    Câu hỏi là multiple choice (chọn 3 đáp án đúng), mỗi đáp án đúng trị giá 1 điểm. Chúng ta cần thêm 3 cột mới vào bảng để hỗ trợ SCD Type 2.

✅ Đáp án đúng (3 lựa chọn):
surrogate primary key, effective start date, effective end date.

🧠 Lý do lựa chọn các đáp án đúng (dựa trên chuẩn SCD Type 2 mới nhất đến 2026):

  • Đây là bộ 3 cột bắt buộc cho SCD Type 2 trong Azure Synapse Analytics (và data warehousing nói chung). Chúng cho phép:
    • Surrogate primary key (thường là bigint IDENTITY): Làm PK nhân tạo, đảm bảo mỗi phiên bản thay đổi có ID riêng, tránh xung đột với business key.
    • Effective start date (datetime2): Ngày bắt đầu hiệu lực của phiên bản (thường là ngày phát hiện thay đổi).
    • Effective end date (datetime2): Ngày kết thúc hiệu lực (thường là '9999-12-31' cho bản ghi hiện tại, cập nhật khi có thay đổi mới).
      Azure Synapse hỗ trợ pattern này qua MERGE/UPSERT hoặc stored procedures, giữ lịch sử đầy đủ mà không mất dữ liệu cũ. (Cập nhật 2026: Synapse vẫn dùng pattern chuẩn Kimball cho SCD Type 2, tích hợp với Fabric cho real-time SCD).

🔍 Giải thích TẤT CẢ các phương án (đúng/sai)

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 tiếng Anh. Mỗi phương án được đánh dấu ✅ (đúng, cần thêm) hoặc ❌ (sai, không cần thêm cho SCD Type 2).

  • ✅ surrogate primary key
    🛠️ Đúng: Đây là khóa chính nhân tạo (không dựa vào business key như SupplierSystemID). Nó đảm bảo mỗi phiên bản thay đổi có row riêng biệt, tránh duplicate khi query. Trong Synapse dedicated SQL pool, dùng IDENTITY column để tự tăng. Không có nó, bảng không thể là SCD Type 2 chuẩn.

  • ✅ effective start date
    🛠️ Đúng: Cột datetime ghi ngày bắt đầu hiệu lực của phiên bản dữ liệu (ví dụ: '2024-01-01'). Kết hợp với end date, giúp query đúng phiên bản tại thời điểm cụ thể (point-in-time query). Thiết yếu cho lịch sử đầy đủ trong Type 2.

  • ❌ business key
    🧩 Sai: Business key (SupplierSystemID) đã tồn tại trong dữ liệu gốc (là ID duy nhất từ ERP, không thay đổi). SCD Type 2 KHÔNG thêm cột này vì nó dùng để xác định entity, không phải track thay đổi. Thêm sẽ dư thừa và gây nhầm lẫn PK.

  • ❌ last modified date
    🧩 Sai: Cột này chỉ ghi ngày sửa cuối cùng, phù hợp SCD Type 1 (ghi đè) hoặc audit trail đơn giản, nhưng KHÔNG đủ cho Type 2 vì không track khoảng thời gian hiệu lực (không biết phiên bản nào active khi nào). Type 2 cần start/end dates chính xác hơn.

  • ✅ effective end date
    🛠️ Đúng: Cột datetime ghi ngày kết thúc hiệu lực (NULL hoặc '9999-12-31' cho current record). Khi có thay đổi, cập nhật end date của row cũ và tạo row mới. Bắt buộc để phân biệt phiên bản hiện tại vs lịch sử.

  • ❌ foreign key
    🧩 Sai: Foreign key dùng để liên kết bảng (ví dụ: reference fact table), không liên quan đến việc track thay đổi dimension. SCD Type 2 tập trung vào surrogate PK và effective dates, không yêu cầu FK ở đây.

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

Hy vọng phân tích này giúp bạn nắm vững SCD Type 2! 🚀 Nếu cần code sample MERGE cho Synapse, hãy hỏi thêm.

Câu 84
You are designing an Azure Databricks table. The table will ingest an average of 20 million streaming events per day.
You need to persist the events in the table for use in incremental load pipeline jobs in Azure Databricks. The solution must minimize storage costs and incremental load times.
What should you include in the solution?
  1. A Partition by DateTime fields.
  2. B Sink to Azure Queue storage.
  3. C Include a watermark column.
  4. D Use a JSON format for physical data storage.
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 bảng Azure Databricks (thường là Delta Lake table) để xử lý dữ liệu streaming với trung bình 20 triệu events mỗi ngày. Mục tiêu chính là lưu trữ (persist) các events này vào bảng để sử dụng trong các pipeline incremental load (tải dữ liệu tăng dần, chỉ xử lý dữ liệu mới). Giải pháp phải tối ưu hóa chi phí lưu trữ (minimize storage costs) và thời gian tải incremental (incremental load times).

  • Bối cảnh kỹ thuật: Azure Databricks sử dụng Structured Streaming (dựa trên Spark) để ingest dữ liệu streaming. Bảng đích thường là Delta Lake (định dạng mặc định cho tables ở Databricks), hỗ trợ ACID transactions, time travel, và tối ưu hóa. Với volume lớn (20M events/ngày ~ 230 events/giây), cần cơ chế prune data (loại bỏ scan không cần thiết) để incremental loads nhanh chóng, tránh full scan toàn bộ bảng.
  • Yêu cầu cốt lõi:
    • Persist: Lưu bền vững vào bảng, không phải transient storage.
    • Incremental load: Pipeline chỉ load delta changes (dữ liệu mới), giảm I/O và chi phí compute/storage.
    • Tối ưu chi phí: Delta Lake tự compress (Parquet columnar), nhưng cần partitioning/clustering để lifecycle management và pruning.
  • Phiên bản cập nhật (đến 2026): Delta Lake 3.x+ (từ Databricks Runtime 14.0+) ưu tiên Liquid Clustering thay partitioning truyền thống cho tables mới, nhưng partitioning by DateTime vẫn được khuyến nghị cho streaming time-series data để hỗ trợ partition pruning trong incremental queries (theo docs Databricks 2024-2026).

📘 Nguồn tham khảo:

✅ Đáp án đúng: Partition by DateTime fields

Lý do lựa chọn (🛠️ Giải thích chi tiết):
Với dữ liệu streaming cao volume theo thời gian (20M events/ngày), partitioning theo trường DateTime (như ingestion_time hoặc event_time theo ngày/giờ) là giải pháp tối ưu nhất.

  • Giảm thời gian incremental load: Spark/Databricks tự động partition pruning – chỉ scan partitions mới (ví dụ: partition hôm nay), tránh full table scan, giảm load time từ hours xuống minutes.
  • Giảm chi phí storage: Dễ dàng delete/drop old partitions (lifecycle policy), compact small files tự động qua OPTIMIZE, và Delta compression columnar. Theo benchmarks Databricks 2025, partitioning time-based giảm 70-90% scan time cho incremental queries.
  • Phù hợp streaming: Trong writeStream to Delta table, thêm .partitionBy("date") khi thiết kế table. Không ảnh hưởng throughput ingest.
    Đây là best practice cho time-series streaming tables ở Azure Databricks (không cần thay bằng Liquid Clustering trừ khi table rất lớn >1TB).

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

  • Partition by DateTime fields ✅ ĐÚNG
    🧩 Phân tích: Như giải thích trên, partitioning theo DateTime kích hoạt partition pruning tự động trong Spark queries, lý tưởng cho incremental pipelines chỉ load data gần nhất. Giảm storage costs qua lifecycle (VACUUM old partitions) và optimize write performance. Best practice cho streaming events (Databricks docs 2026 khuyến nghị cho <100 partitions).

  • Sink to Azure Queue storage ❌ SAI
    🧩 Phân tích: Azure Queue Storage là transient message queue (FIFO, max 64KB/message), KHÔNG dùng để persist table data. Structured Streaming không hỗ trợ Queue làm sink cho Delta tables (chỉ Kafka, Delta, Files). Sử dụng Queue sẽ mất data durability, tăng costs (per-operation billing), và không hỗ trợ incremental queries (không có schema enforcement/pruning). Không minimize storage/load times – hoàn toàn không phù hợp cho Databricks tables.

  • Include a watermark column ❌ SAI
    🧩 Phân tích: Watermark (.withWatermark("eventTime", "10 minutes")) dùng để handle late data trong streaming processing (discard old events), không phải persist/storage strategy. Nó là runtime config, không ảnh hưởng storage costs (không tạo column physical) hay incremental load times (chỉ filter lúc process). Thêm column thừa còn tăng overhead schema.

  • Use a JSON format for physical data storage ❌ SAI
    🧩 Phân tích: JSON là row-oriented, kém nén (storage costs cao gấp 2-5x so Parquet/Delta), query chậm (không columnar pruning). Delta Lake mặc định Parquet + compression (ZSTD/Snappy), JSON không recommend cho high-volume (Databricks 2026: Tránh JSON cho tables >1GB). Tăng load times do decompression/full scan, vi phạm yêu cầu minimize costs/times.

Câu 85
You have an Azure Synapse Analytics dedicated SQL pool named Pool1 that contains a table named Sales.

Sales has row-level security (RLS) applied. RLS uses the following predicate filter.

CREATE FUNCTION Security.fn_securitypredicate(@SalesRep AS sysname) 
RETURNS TABLE 
WITH SCHEMABINDING 
AS 
RETURN SELECT 1 AS fn_securitypredicate_result 
WHERE @SalesRep = USER_NAME() OR USER_NAME() = 'Manager';


A user named SalesUser1 is assigned the db_datareader role for Pool1.

Which rows in the Sales table are returned when SalesUser1 queries the table?
  1. A only the rows for which the value in the User_Name column is SalesUser1
  2. B all the rows
  3. C only the rows for which the value in the SalesRep column is Manager
  4. D only the rows for which the value in the SalesRep column is SalesUser1
Xem giải thích

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

Câu hỏi tập trung vào Row-Level Security (RLS) trong Azure Synapse Analytics dedicated SQL pool. Cụ thể:

  • Có một dedicated SQL pool tên Pool1 chứa bảng Sales.
  • Bảng Sales áp dụng RLS với predicate filter sử dụng hàm Security.fn_securitypredicate(@SalesRep AS sysname).
  • Hàm này kiểm tra điều kiện: @SalesRep = USER_NAME() (tức tên người dùng hiện tại) HOẶC USER_NAME() = 'Manager'.
    • Nếu đúng, hàm trả về 1 (cho phép truy cập row đó).
    • Nếu sai, row bị lọc bỏ.
  • Người dùng SalesUser1 được gán role db_datareader (quyền đọc dữ liệu).
  • Câu hỏi chính: Khi SalesUser1 truy vấn bảng Sales, những row nào sẽ được trả về? (Giả sử RLS được áp dụng trên cột SalesRep trong bảng Sales, theo chuẩn thực hiện predicate filter).

🛠️ Cách RLS hoạt động ở đây (dựa trên tài liệu Azure Synapse mới nhất đến 2026):

  • RLS filter predicate được gọi tự động cho mỗi row khi query.
  • Đối với SalesUser1 (không phải 'Manager'), chỉ row có SalesRep = 'SalesUser1' thỏa mãn điều kiện @SalesRep = USER_NAME().
  • Role db_datareader cho phép đọc, nhưng RLS ghi đè để lọc dữ liệu theo user context.

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

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

Đáp án đúng: only the rows for which the value in the SalesRep column is SalesUser1.

Lý do (🧩 phân tích logic):

  • Khi SalesUser1 query, USER_NAME() trả về 'SalesUser1'.
  • Hàm kiểm tra @SalesRep = 'SalesUser1' (từ cột SalesRep của row) HOẶC 'SalesUser1' = 'Manager' (sai).
  • Kết quả: Chỉ row có SalesRep = 'SalesUser1' được trả về. Đây là hành vi chuẩn của RLS filter predicate trong Azure Synapse dedicated SQL pool.

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

  • [SAI] only the rows for which the value in the User_Name column is SalesUser1
    ❌ Sai vì bảng Sales không có cột User_Name được đề cập. Hàm sử dụng @SalesRep (từ cột SalesRep) so với USER_NAME() (tên user hiện tại), không phải cột User_Name nào đó.

  • [SAI] all the rows
    ❌ Sai vì RLS đang active và lọc row dựa trên user context. SalesUser1 không phải 'Manager', nên không thấy tất cả row – chỉ thấy row khớp với tên mình.

  • [SAI] only the rows for which the value in the SalesRep column is Manager
    ❌ Sai vì điều kiện OR USER_NAME() = 'Manager' chỉ áp dụng khi user là 'Manager' (thấy tất cả). SalesUser1 không phải Manager, nên không thấy row SalesRep = 'Manager' trừ khi trùng tên mình.

  • [ĐÚNG] only the rows for which the value in the SalesRep column is SalesUser1
    ✅ Đúng như giải thích ở trên: Predicate filter chỉ cho phép row nơi SalesRep khớp chính xác với USER_NAME() của SalesUser1. Đây là thiết kế điển hình cho sales rep chỉ thấy dữ liệu của mình! 🏆

Câu 86 Chọn nhiều đáp án
You have an Azure Stream Analytics query. The query returns a result set that contains 10,000 distinct values for a column named clusterID.
You monitor the Stream Analytics job and discover high latency.
You need to reduce the latency.
Which two actions should you perform? Each correct answer presents a complete solution.
NOTE: Each correct selection is worth one point.
  1. A Add a pass-through query.
  2. B Increase the number of streaming units.
  3. C Add a temporal analytic function.
  4. D Scale out the query by using PARTITION BY.
  5. E Convert the query to a reference query.
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 Stream Analytics (một dịch vụ xử lý dữ liệu thời gian thực trên Azure), không phải AWS như đề cập ban đầu (có thể là nhầm lẫn). Tình huống: Bạn có một truy vấn Stream Analytics trả về 10.000 giá trị phân biệt (distinct values) cho cột clusterID. Khi giám sát job, phát hiện độ trễ cao (high latency). Nhiệm vụ là chọn hai hành động để giảm độ trễ, mỗi lựa chọn đúng đáng 1 điểm.

🔍 Vấn đề cốt lõi:

  • Stream Analytics xử lý dữ liệu streaming, và với nhiều distinct values (10.000 clusterID khác nhau), job có thể gặp bottleneck do stateful operations (như aggregation, windowing) phải duy trì state lớn cho từng key (clusterID).
  • Latency cao xảy ra vì xử lý tuần tự hoặc thiếu parallelism, dẫn đến queue backlog.
  • Giải pháp tập trung vào tăng tài nguyên và phân vùng song song hóa để scale out.

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

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

Hai hành động đúng là:

  • Increase the number of streaming units.
  • Scale out the query by using PARTITION BY.

Lý do chọn 🛠️:

  • Với 10.000 distinct clusterID (high cardinality), job cần tăng Streaming Units (SU) để cung cấp CPU/memory nhiều hơn, xử lý nhanh hơn backlog.
  • PARTITION BY clusterID cho phép scale out (chia query thành nhiều partition song song), mỗi instance xử lý subset clusterID, giảm latency đáng kể (theo docs, cải thiện lên đến 30x với high-cardinality).

📋 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, kèm giải thích chi tiết bằng tiếng Việt:

  • ❌ Add a pass-through query.
    Sai vì: Pass-through query chỉ dùng để truyền dữ liệu thô mà không xử lý (bypass transformation), phù hợp với low-latency passthrough nhưng không giải quyết vấn đề distinct values cao gây stateful overload. Thêm nó có thể làm phức tạp query mà không giảm latency chính.

  • ✅ Increase the number of streaming units.
    Đúng vì: Streaming Units (SU) là đơn vị scale dọc (vertical scaling), tăng SU (từ 1 lên 120+) cung cấp thêm CPU/RAM, giúp xử lý nhanh hơn dữ liệu với high cardinality. Docs khuyến nghị cho latency >1s, đặc biệt với 10k keys.

  • ❌ Add a temporal analytic function.
    Sai vì: Temporal functions (như LAG, LEAD, hoặc window functions) là stateful operations, yêu cầu lưu state lịch sử, tăng thêm latency với high distinct values (state bloat). Không phải giải pháp giảm latency mà còn làm tệ hơn.

  • ✅ Scale out the query by using PARTITION BY.
    Đúng vì: PARTITION BY (ví dụ: PARTITION BY clusterID) chia query thành partitions song song, mỗi streaming node xử lý subset clusterID độc lập. Với 10k values, điều này parallelize aggregation, giảm backlog và latency (scale ngang, hỗ trợ lên đến 120 partitions theo phiên bản 2024+).

  • ❌ Convert the query to a reference query.
    Sai vì: Reference query dùng cho reference data joins (dữ liệu tĩnh), không liên quan đến streaming latency từ distinct clusterID. Chuyển đổi chỉ áp dụng cho joins, có thể tăng overhead lookup chứ không giảm latency chính.

🧠 Lưu ý bổ sung: Kết hợp hai đúng sẽ tối ưu nhất (SU cho power, PARTITION cho parallelism). Test bằng Azure Portal Metrics để verify latency giảm dưới 1s. Nếu cardinality quá cao (>100k), xem xét Tumbling Window hoặc Adjust SU tự động (tính năng preview 2025).

Câu 87
You have an Azure Synapse Analytics dedicated SQL pool named Pool1 and a database named DB1. DB1 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 the built-in pool and run DBCC CHECKALLOC.
  3. C Connect to Pool1 and query sys.dm_pdw_node_status.
  4. D Connect to Pool1 and query sys.dm_pdw_nodes_db_partition_stats.
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 (không phải AWS như đề cập, có thể là nhầm lẫn), cụ thể là dedicated SQL pool (một loại SQL pool chuyên dụng với tài nguyên cố định). Bạn có một dedicated SQL pool tên Pool1 chứa cơ sở dữ liệu DB1, và trong DB1 có bảng fact Table1. Nhiệm vụ là xác định mức độ data skew (sự lệch dữ liệu) trên Table1.

📌 Data skew là vấn đề phổ biến trong data warehouse phân tán như Synapse dedicated SQL pool: Dữ liệu không phân bố đều giữa các distributions (đơn vị phân phối dữ liệu trên các compute nodes), dẫn đến một số nodes quá tải, ảnh hưởng hiệu suất query. Để kiểm tra skew, cần query các DMV (Dynamic Management Views) cụ thể trong Synapse Studio (giao diện quản lý Synapse).

🛠️ Cách thực hiện trong Synapse Studio: Kết nối đến pool đúng (Pool1), sau đó chạy query trên các view hệ thống liên quan đến partitions và nodes để tính toán độ lệch (ví dụ: so sánh row_count giữa các distributions).

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

Đáp án đúng: Connect to Pool1 and query sys.dm_pdw_nodes_db_partition_stats.

Lý do:

  • View sys.dm_pdw_nodes_db_partition_stats cung cấp thống kê chi tiết về số lượng rows, kích thước dữ liệu trên từng partition của bảng qua các nodes (đơn vị tính toán). Bằng cách group by distribution_id, bạn có thể tính min/max/avg row_count để đo lường skew (ví dụ: nếu max rows gấp nhiều lần avg, thì có skew nghiêm trọng).
  • Phải kết nối trực tiếp đến Pool1 (dedicated SQL pool cụ thể), vì DMV này chỉ khả dụng trên pool đang chạy và scoped đến pool đó.
  • Đây là phương pháp chuẩn theo tài liệu Microsoft (cập nhật đến 2024-2026, không thay đổi cơ bản trong Synapse runtime mới nhấ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 tiếng Anh:

  • ❌ Connect to the built-in pool and query sys.dm_pdw_nodes_db_partition_stats.
    Sai vì: "Built-in pool" thường ám chỉ serverless SQL pool hoặc pool mặc định (không phải dedicated). Dedicated pool như Pool1 yêu cầu kết nối riêng biệt trong Synapse Studio. Query DMV này trên built-in pool sẽ không truy cập được dữ liệu của Pool1, dẫn đến kết quả sai hoặc lỗi.

  • ❌ Connect to the built-in pool and run DBCC CHECKALLOC.
    Sai vì: DBCC CHECKALLOC chỉ kiểm tra tính toàn vẹn allocation pages (không gian lưu trữ) trên SQL Server, không cung cấp thông tin về data skew hay phân phối dữ liệu giữa distributions/nodes. Đây là lệnh diagnostic cơ bản, không phù hợp cho Synapse dedicated pool và không liên quan đến skew.

  • ❌ Connect to Pool1 and query sys.dm_pdw_node_status.
    Sai vì: View sys.dm_pdw_node_status chỉ hiển thị trạng thái tổng quát của các nodes (như health, CPU, memory), không chứa dữ liệu về partitions hay row counts của bảng cụ thể như Table1. Không dùng để đo skew dữ liệu.

  • ✅ Connect to Pool1 and query sys.dm_pdw_nodes_db_partition_stats.
    Đúng vì: Như giải thích ở trên, đây là DMV chính xác để lấy stats partition-level trên nodes của Pool1, giúp tính skew chính xác (ví dụ: query SELECT distribution_id, SUM(row_count) FROM sys.dm_pdw_nodes_db_partition_stats GROUP BY distribution_id).

📘 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ụ query cụ thể, hãy hỏi thêm nhé!

Câu 88
You have an Azure Databricks workspace named workspace1 in the Standard pricing tier.
You need to configure workspace1 to support autoscaling all-purpose clusters. The solution must meet the following requirements:
✑ Automatically scale down workers when the cluster is underutilized for three minutes.
✑ Minimize the time it takes to scale to the maximum number of workers.
✑ Minimize costs.
What should you do first?
  1. A Enable container services for workspace1.
  2. B Upgrade workspace1 to the Premium pricing tier.
  3. C Set Cluster Mode to High Concurrency.
  4. D Create a cluster policy 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 việc cấu hình autoscaling cho các all-purpose clusters trong Azure Databricks workspace tên là workspace1, hiện đang ở Standard pricing tier.

📋 Yêu cầu cụ thể của giải pháp:

  • Tự động scale down workers khi cluster bị underutilized (sử dụng thấp) trong 3 phút ✅ (đây là tính năng mặc định của autoscaling trong Databricks).
  • Giảm thiểu thời gian scale lên số lượng workers tối đa (tối ưu hóa tốc độ mở rộng).
  • Giảm thiểu chi phí (minimize costs, có thể liên quan đến spot instances hoặc tối ưu hóa scaling).

❓ Câu hỏi yêu cầu hành động đầu tiên (What should you do first?) để đáp ứng các yêu cầu trên. Lưu ý: Standard tier có hạn chế lớn về autoscaling cho all-purpose clusters (chỉ hỗ trợ cơ bản cho job clusters), nên cần kiểm tra điều kiện tiên quyết.

🛠️ Kiến thức cập nhật (Azure Databricks phiên bản mới nhất 2024-2026): Theo tài liệu chính thức Databricks trên Azure (Unity Catalog enabled workspaces), autoscaling cho all-purpose clusters chỉ khả dụng từ Premium tier trở lên. Standard tier không hỗ trợ đầy đủ tính năng này, đặc biệt là scale down chính xác sau 3 phút và tối ưu hóa nhanh cho all-purpose (shared) clusters. Upgrade là bước đầu tiên bắt buộc.

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

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

Đáp án đúng: Upgrade workspace1 to the Premium pricing tier.

Lý do chi tiết 🏆:

  • Standard tier không hỗ trợ autoscaling đầy đủ cho all-purpose clusters: Chỉ job clusters mới autoscaling được; all-purpose (dùng cho interactive workloads) yêu cầu Premium để enable tính năng scale down sau 3 phút underutilized và tối ưu tốc độ scale up (sử dụng predictive autoscaling).
  • Đáp ứng tất cả yêu cầu: Premium cho phép cấu hình autoscaling chính xác (min 1 worker, max tùy chỉnh), hỗ trợ spot instances để minimize costs, và cold start nhanh hơn (giảm thời gian scale to max workers).
  • Là bước đầu tiên (first): Không thể cấu hình autoscaling nếu workspace vẫn ở Standard – các setting khác sẽ không apply.
  • Minimize costs: Premium có giá cao hơn nhưng enable spot VMs/ autoscaling giúp tiết kiệm dài hạn cho underutilized scenarios.

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

Dưới đây là phân tích từng phương á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 dấu ✅ (đúng) hoặc ❌ (sai), kèm lý do bằng tiếng Việt rõ ràng:

  • ❌ Enable container services for workspace1.
    Sai vì: Container services (Kubernetes-based) dùng cho custom runtimes hoặc IPy, không liên quan đến autoscaling. Enable nó không unlock autoscaling cho all-purpose clusters, và không giúp scale down 3 phút hay minimize scale time/costs. Đây là tính năng riêng biệt, chỉ tốn thêm chi phí không cần thiết.

  • ✅ Upgrade workspace1 to the Premium pricing tier.
    Đúng vì: Như giải thích trên, Standard tier thiếu autoscaling cho all-purpose clusters. Premium enable ngay tính năng này với scale down sau 3 phút (default idle timeout), hỗ trợ fast scale-up (predictive scaling), và tích hợp spot instances để minimize costs. Đây là bước tiên quyết, theo docs Databricks.

  • ❌ Set Cluster Mode to High Concurrency.
    Sai vì: High Concurrency mode dành cho shared multi-user access (tăng security/isolation), nhưng không enable autoscaling ở Standard tier. Nó còn hạn chế scale (fixed workers thường), làm chậm scale to max và không tự động scale down 3 phút. Phù hợp cho dev/testing, không optimize costs hay speed.

  • ❌ Create a cluster policy in workspace1.
    Sai vì: Cluster policy dùng để restrict configurations (e.g., limit instance types, max workers) cho users/admins, không enable autoscaling. Ở Standard tier, policy vẫn không bypass hạn chế tier-level. Nó chỉ quản lý sau khi autoscaling đã available, không phải bước đầu tiên và không minimize time/costs trực tiếp.

🧮 Tóm tắt nhanh: Upgrade Premium là mandatory first step để unlock autoscaling all-purpose. Các lựa chọn khác chỉ là "nice-to-have" sau đó! Nếu cần config tiếp (e.g., set minWorkers=1, idleTimeout=3min, enableSpot), hãy enable trong cluster config sau upgrade. 🚀

Câu 89
You have an Azure subscription that is linked to a tenant in Microsoft Azure Active Directory (Azure AD), part of Microsoft Entra. The tenant that contains a security group named Group1. The subscription contains an Azure Data Lake Storage account named myaccount1. The myaccount1 account contains two containers named container1 and container2.

You need to grant Group1 read access to container1. The solution must use the principle of least privilege.

Which role should you assign to Group1?
  1. A Storage Table Data Reader for myaccount1
  2. B Storage Blob Data Reader for container1
  3. C Storage Blob Data Reader for myaccount1
  4. D Storage Table Data Reader for container1
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 quản lý quyền truy cập (RBAC - Role-Based Access Control) trong Azure Data Lake Storage Gen2 (ADLS Gen2), một dịch vụ lưu trữ dữ liệu lớn trên Azure.

  • Bối cảnh: Bạn có một subscription Azure liên kết với tenant Microsoft Entra (tên mới của Azure AD từ năm 2023). Tenant này chứa một security group tên Group1. Subscription có tài khoản lưu trữ myaccount1 (là Azure Data Lake Storage Gen2, hỗ trợ hierarchical namespace cho dữ liệu blob). Tài khoản này có hai container: container1 và container2.
  • Yêu cầu: Cấp quyền read (đọc) cho Group1 chỉ trên container1. Giải pháp phải tuân thủ nguyên tắc least privilege (quyền hạn nhỏ nhất cần thiết), nghĩa là chỉ cấp quyền đúng mức độ và phạm vi hẹp nhất để tránh rủi ro bảo mật.
  • Mục tiêu: Sử dụng Azure RBAC roles để assign quyền cho group tại mức container cụ thể, không phải toàn tài khoản, và chỉ cho dữ liệu blob (vì ADLS Gen2 dựa trên Blob Storage).

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

✅ Đáp án đúng: Storage Blob Data Reader for container1

Lý do lựa chọn:

  • Role Storage Blob Data Reader cho phép đọc dữ liệu blob (bao gồm list và get blobs/files trong container), phù hợp hoàn hảo với yêu cầu "read access" trên ADLS Gen2.
  • Assign tại mức container1 đảm bảo least privilege: Group1 chỉ đọc được container1, không ảnh hưởng đến container2 hoặc các tài nguyên khác trong myaccount1.
  • Đây là best practice theo Microsoft: RBAC hỗ trợ scope granular (container-level) từ Azure Storage role assignments (cập nhật 2023+). 🛠️ Sử dụng Azure Portal/CLI: az role assignment create --assignee Group1 --role "Storage Blob Data Reader" --scope "/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/myaccount1/blobServices/default/containers/container1".

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

  • Storage Table Data Reader for myaccount1
    ❌ Sai: Role này dành cho Azure Table Storage (dữ liệu NoSQL dạng table), không liên quan đến blob/container trong ADLS Gen2. Assign tại account-level cũng quá rộng, vi phạm least privilege. Không cấp quyền đọc blob.

  • Storage Blob Data Reader for container1
    ✅ Đúng (như đã giải thích ở trên). Role chính xác cho blob read, scope hẹp chỉ container1. Hoàn hảo cho least privilege! 🎯

  • Storage Blob Data Reader for myaccount1
    ❌ Sai: Role đúng cho blob read, nhưng scope tại toàn tài khoản myaccount1 sẽ cấp quyền đọc tất cả containers (container1 và container2), vi phạm nguyên tắc least privilege. Nên assign ở mức container thay vì account.

  • Storage Table Data Reader for container1
    ❌ Sai: Kết hợp lỗi kép – role Table không áp dụng cho container/blob (Table Storage không dùng container), và "container1" không phải scope hợp lệ cho Table role. Hoàn toàn không phù hợp với ADLS Gen2. 🚫

Câu 90
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 Pool1 and DBCC PDW_SHOWSPACEUSED.
  2. B Connect to the built-in pool and run DBCC PDW_SHOWSPACEUSED.
  3. C Connect to the built-in pool and run DBCC CHECKALLOC.
  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 câu hỏi trắc nghiệm

✅ Giải thích nội dung câu hỏi:
Câu hỏi tập trung vào việc xác định mức độ lệch dữ liệu (data skew) trong một bảng fact tên là Table1 thuộc dedicated SQL pool có tên Pool1 trên Azure Synapse Analytics. Data skew xảy ra khi dữ liệu không phân bố đều trên các distribution (đơn vị phân phối dữ liệu) trong dedicated SQL pool, dẫn đến hiệu suất kém (một số node xử lý quá tải). Để kiểm tra, bạn cần thực hiện thao tác trong Synapse Studio – công cụ giao diện chính của Azure Synapse. Câu hỏi yêu cầu chọn hành động chính xác nhất để lấy thông tin skew cụ thể cho Table1 trên Pool1. Kiến thức dựa trên phiên bản Azure Synapse Analytics mới nhất (2024-2026), nơi dedicated SQL pool hỗ trợ các lệnh T-SQL đặc thù như DBCC cho phân tích phân phối dữ liệu.

🛠️ Đáp án đúng:
Connect to Pool1 and DBCC PDW_SHOWSPACEUSED.
Lý do lựa chọn: Lệnh DBCC PDW_SHOWSPACEUSED là công cụ chuẩn của Microsoft để kiểm tra data skew và space usage trên từng distribution của một bảng cụ thể trong dedicated SQL pool. Bạn phải kết nối trực tiếp đến Pool1 (không phải built-in pool) trong Synapse Studio, sau đó chạy lệnh với tên bảng (DBCC PDW_SHOWSPACEUSED('Table1')). Kết quả sẽ hiển thị số dòng, kích thước dữ liệu trên từng distribution, giúp tính toán chỉ số skew (ví dụ: max rows per distribution so với average). Đây là phương pháp được khuyến nghị chính thức cho dedicated SQL pools.

📘 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, 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ài liệu Azure Synapse Analytics mới nhất:

✅ Connect to Pool1 and DBCC PDW_SHOWSPACEUSED.
Đúng vì: Kết nối trực tiếp đến Pool1 (dedicated SQL pool cụ thể) và chạy lệnh này sẽ trả về báo cáo chi tiết về phân bố dữ liệu của Table1 trên tất cả distributions, bao gồm row count và size per distribution. Điều này trực tiếp xác định extent of data skew (mức độ lệch dữ liệu). Lệnh chỉ hoạt động trên dedicated SQL pools, không phải serverless.

❌ Connect to the built-in pool and run DBCC PDW_SHOWSPACEUSED.
Sai vì: Built-in pool (hay serverless SQL pool) không hỗ trợ các lệnh DBCC PDW như PDW_SHOWSPACEUSED vì nó không có khái niệm distributions cố định như dedicated SQL pool. Kết nối sai pool sẽ không truy cập được dữ liệu của Pool1, dẫn đến lỗi hoặc kết quả không liên quan.

❌ Connect to the built-in pool and run DBCC CHECKALLOC.
Sai vì: DBCC CHECKALLOC dùng để kiểm tra tính nhất quán phân bổ không gian lưu trữ (allocation consistency) trên các đối tượng database, không cung cấp thông tin skew cụ thể cho Table1. Hơn nữa, kết nối đến built-in pool vẫn sai vì lệnh này chỉ dành cho dedicated SQL pools và không tập trung vào phân tích skew.

❌ Connect to the built-in pool and query sys.dm_pdw_sys_info.
Sai vì: DMV sys.dm_pdw_sys_info cung cấp thông tin hệ thống tổng quát về appliance (như CPU, memory usage), không chi tiết về skew của một bảng cụ thể như Table1. Kết nối đến built-in pool (serverless) cũng không hỗ trợ đầy đủ các DMV PDW, nên không thể áp dụng cho dedicated pool Pool1.

📚 Tài liệu tham khảo

Hy vọng phân tích này giúp bạn nắm vững cách xử lý data skew trong Azure Synapse! 🚀