☰
DP-100考试大纲深度解析:Azure数据工程能力校准与实操验证
2026/10/21 15:32:02 网站建设 项目流程

简介:本资源为微软DP-100认证考试(Designing and Implementing a Data Science Solution on Azure)官方大纲精要整理版PDF,面向备考Azure数据科学方向的开发者、数据工程师与AI实践者,助力系统掌握考试核心能力域。文件共1个PDF,大小1.95MB,内容涵盖考试结构、91道高仿真真题及详解(含Docker环境部署前提、Azure Databricks与Data Factory协同架构选型等典型场景),并深度解析数据工程管道构建、Python/Scala双语言开发、工作负载隔离、CI/CD集成及Azure ML/Databricks/Event Hubs等关键服务组合策略。预览显示题目均标注考点章节与官方参考链接,附有清晰答案解析与排除逻辑,便于针对性查漏补缺与应试强化。目前已有245人学习下载,适合作为考前冲刺笔记、知识点索引与实操决策参考。

1. DP-100考试大纲不是“刷题指南”,而是Azure数据工程能力的结构化校准标尺

你手头那份标着“DP-100考试大纲 .pdf”的文件,不是一张待背诵的知识点清单,而是一份由微软官方定义的Azure数据平台工程能力映射图——它把零散的ADF管道、Synapse工作区、Databricks集群、SQL托管实例、Event Hubs流接入、Power BI数据建模等数十项服务,压缩进5个可测量、可验证、可交付的工程域:数据摄取与存储、批处理与流处理、数据安全与治理、数据集成与转换、监控与优化。我见过太多开发者花三个月猛攻MS Learn模块,却在真实考场上被一道“如何为跨区域灾难恢复设计Blob生命周期策略+版本控制+软删除组合方案”的题卡住——不是不会用Blob,而是没意识到DP-100考的是工程决策链:选什么服务、为什么此时选、边界在哪、代价是什么。这份PDF的价值,恰恰在于它强制你跳出“功能会用”层面,进入“架构权衡”层面。适合正在从SQL Server DBA转向云数据平台工程师、或刚完成Azure Fundamentals(AZ-900)想落地数据工程能力的从业者。它不教你怎么点开Synapse UI,但告诉你:当客户要求“T+1报表延迟压到15分钟内且支持小时级回滚”,你该在哪个环节插入Delta Lake的事务日志检查点,又该在哪个环节放弃Spark Streaming改用Kafka Connect。


2. 用大纲PDF反向拆解出真实考试的5大能力域与对应服务矩阵

DP-100考试大纲PDF虽只十几页,但每一条能力描述都暗含服务选型逻辑。不能按PDF目录机械记忆,必须把它还原成一张服务-能力-约束条件三维表。比如大纲中“Implement data storage solutions”这一条,表面看是考Blob Storage,实际隐含3层判断:

  • 数据形态:结构化(SQL MI)vs 半结构化(Parquet in ADLS Gen2)vs 非结构化(JSON日志在Blob);
  • 访问模式:高并发低延迟(Cosmos DB)vs 大吞吐低成本(ADLS Gen2 + Hierarchical Namespace);
  • 合规硬约束:GDPR要求的地域锁定(必须用区域冗余存储RA-GRS而非LRS)、HIPAA要求的加密密钥管理(必须启用CMK而非微软托管密钥)。

2.1 把PDF里的每条能力声明转译成可验证的工程动作

以大纲Section 2.1 “Design and implement data ingestion solutions”为例,原文是:“Design and implement data ingestion solutions for batch and real-time scenarios using Azure Data Factory, Azure Synapse Analytics, and Azure Event Hubs.” 这句话必须拆解为具体动作:

# 验证是否真正掌握“real-time ingestion with Event Hubs” # 步骤1:创建带捕获功能的Event Hubs命名空间(注意:必须开启Capture,且Archive to Storage Account需指定ADLS Gen2) az eventhubs namespace create \ --name eh-namespace-prod \ --resource-group rg-data-eng \ --location "East US" \ --sku Standard \ --enable-auto-inflate true \ --capacity 2 # 步骤2:在Event Hub中启用Capture,归档到ADLS Gen2的特定路径(关键:PartitionKey必须设为{partition},否则下游Spark读取时无法并行) az eventhubs eventhub create \ --name eh-iot-stream \ --namespace-name eh-namespace-prod \ --resource-group rg-data-eng \ --partition-count 4 \ --retention-period 1 \ --enable-capture true \ --destination-name EventHubArchive.AzureBlockBlob \ --storage-account dlsprodstg \ --blob-container archive-raw \ --archive-path-format "year={Year}/month={Month}/day={Day}/hour={Hour}/"

参数说明:--enable-capture true是硬性要求,DP-100考题常设置陷阱——给出一个未启用Capture的Event Hub配置图,问“如何满足法规要求的原始数据留存”,答案必是先启用Capture;--archive-path-format中的{Year}/{Month}占位符必须小写,大写会报错;--partition-count 4要匹配后续Spark Structured Streaming的option("maxOffsetsPerTrigger", "10000"),否则背压崩溃。

2.2 构建“能力域-服务-失败场景”对照表,直击考试高频陷阱

能力域(大纲原文)对应核心服务典型失败场景(考试真题变形)关键修复动作
Implement data security and complianceAzure Key Vault + SQL MI TDE考题给图:SQL MI已启用TDE,但密钥轮换后报表查询报错“Cannot decrypt database”必须在Key Vault中为新密钥配置“SQL Server密钥管理员”RBAC角色,且在SQL MI中执行ALTER DATABASE ENCRYPTION KEY REGENERATE WITH ALGORITHM = AES_256
Monitor, troubleshoot, and optimize data storageAzure Monitor + Log Analytics考题描述:ADLS Gen2吞吐下降50%,Log Analytics中StorageReadOperations指标正常但StorageWriteOperations突增300%立即检查是否有Spark作业误用coalesce(1)导致单分区写入,触发ADLS Gen2的单文件写入限流(默认100MB/s per file)
Design and implement data integration solutionsAzure Data Factory v2考题给管道截图:Copy Activity源为Oracle,目标为ADLS Gen2,但未启用“Preserve hierarchy”且文件名含中文必须勾选“Preserve hierarchy”并设置“Binary copy”模式,否则中文路径在Linux-based IR上会乱码为%E4%B8%AD%E6%96%87

3. 用大纲PDF驱动实操环境搭建:本地最小可行验证集(MVP Lab)

别一上来就部署全量生产级架构。DP-100考试验证的是对服务边界的敏感度,而非堆砌功能。我给自己搭的MVP Lab只包含4个资源组、7项服务,但覆盖了大纲90%的考点:

  • rg-dp100-core:含1个ADLS Gen2(启用了Hierarchical Namespace、Soft Delete、Versioning)、1个Azure SQL Managed Instance(启用了TDE+Auditing);
  • rg-dp100-stream:含1个Event Hubs命名空间(启用Capture)、1个Function App(消费Event Hubs事件并写入ADLS);
  • rg-dp100-etl:含1个Azure Data Factory(仅配2个IR:Azure IR用于SQL MI连接,Self-hosted IR用于本地SQL Server测试);
  • rg-dp100-monitor:含1个Log Analytics Workspace(关联所有资源的Diagnostic Settings)。

3.1 用Bicep模板一键部署MVP Lab,避免手动点击埋坑

手动在Portal点选10次可能漏掉1个关键开关(比如ADLS Gen2的Hierarchical Namespace只能创建时开启)。用Bicep保证环境一致性:

// main.bicep - 核心ADLS Gen2资源 resource adlsGen2 'Microsoft.Storage/storageAccounts@2023-01-01' = { name: 'dlsdp100core${uniqueString(resourceGroup().id)}' location: resourceGroup().location sku: { name: 'Standard_LRS' } kind: 'StorageV2' properties: { // ⚠️ 这里是DP-100高频考点:Hierarchical Namespace必须显式设为true isHnsEnabled: true // ⚠️ Soft Delete必须开启,否则无法通过“recover deleted files”类考题 deleteRetentionPolicy: { enabled: true days: 14 } // ⚠️ Versioning是Delta Lake ACID事务基础,考试必考 versioning: { enabled: true } } }

逻辑说明:isHnsEnabled: true是ADLS Gen2区别于普通Blob Storage的核心,它让路径/sales/2023/01/01/成为真正的目录结构,支撑Spark的spark.read.parquet("abfss://container@dlsdp100core.dfs.core.windows.net/sales/");deleteRetentionPolicy的days: 14必须≥7(微软最低要求),否则az storage blob undelete命令会失败;versioning开启后,每次df.write.mode("overwrite").save(...)都会生成新版本,这是应对“误删分区后快速回滚”考题的唯一解法。

3.2 在MVP Lab中验证大纲要求的3类关键操作流

场景1:验证“batch ingestion with ADF + PolyBase”(大纲Section 2.2)

考题常问:“如何将1TB CSV从本地NAS导入SQL MI,要求<30分钟且支持断点续传”。答案不是用Copy Activity,而是:

  1. 用ADF的Get Metadata活动检查NAS上CSV文件最后修改时间;
  2. 用Lookup活动查SQL MI中staging_table的最大load_timestamp;
  3. 用If Condition活动判断是否需全量重载;
  4. 最终调用Copy Activity,Source设置为“Binary copy”,Sink设置为“PolyBase”,并勾选“Enable PolyBase”和“Use Type Default”。

参数深挖:Use Type Default意味着PolyBase自动推断CSV schema,但若字段含逗号(如地址字段"Beijing, China"),必须在Copy Activity的Source设置中添加"quoteChar": "\"",否则PolyBase解析失败——这是DP-100实操题最常埋的坑。

场景2:验证“stream ingestion with Event Hubs + Spark Structured Streaming”(大纲Section 2.3)

考题给一段Scala代码,问“为何流处理延迟持续>2分钟”。关键看两处:

  • option("eventhubs.maxEventsPerTrigger", "1000"):若设为"10000",单批次处理过载;
  • option("eventhubs.checkpointLocation", "abfss://checkpoints@dlsdp100core.dfs.core.windows.net/streaming/"):Checkpoint路径必须是ADLS Gen2(非Blob),否则FileNotFoundException。
场景3:验证“data security with RBAC + Purview”(大纲Section 4.1)

考题图示:Purview中注册了ADLS Gen2,但扫描失败。原因必是:

  • Purview托管身份未在ADLS Gen2上分配Storage Blob Data Reader角色;
  • 或ADLS Gen2的防火墙未放行Purview IP段(需在ADLS网络规则中添加Allow trusted Microsoft services to access this storage account)。

4. 避坑:DP-100考试中90%考生栽在PDF大纲没明说的3个隐性约束

DP-100考试大纲PDF写得极简,但微软考题处处埋着“文档没写但服务强制要求”的隐性约束。这些坑不踩一次,永远不知道为什么配置完全正确却扣分。

4.1 现象:ADF Copy Activity从SQL MI复制数据到ADLS Gen2,报错“Failed to connect to SQL MI: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'”

原因:考试环境默认使用系统分配的托管身份(System Assigned Managed Identity),但SQL MI的防火墙规则未放行该身份。大纲PDF只说“use managed identity”,没提必须手动在SQL MI中执行:

-- 在SQL MI中执行(注意:必须用SQL Server身份验证登录,不能用AAD) CREATE USER [your-adf-name] FROM EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [your-adf-name]; ALTER ROLE db_datawriter ADD MEMBER [your-adf-name];

解决:在SQL MI的“Active Directory admin”中设置AAD管理员,然后用该管理员账号登录SQL MI,运行上述T-SQL。

4.2 现象:Synapse Pipeline中Linked Service连接Azure SQL Database成功,但Execute Spark Job活动报错“ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver”

原因:Synapse默认不预装SQL Server JDBC驱动。大纲PDF说“use Synapse for ETL”,但没写必须手动上传JAR包。
解决:

  1. 下载mssql-jdbc-12.6.0.jre11.jar;
  2. 在Synapse Studio中,进入Manage > Apache Spark packages,上传JAR;
  3. 在Spark作业配置中,--jars参数必须指向abfss://spark-packages@<storage>.dfs.core.windows.net/mssql-jdbc-12.6.0.jre11.jar。

4.3 现象:用Azure Monitor Alert规则监控ADLS Gen2的StorageWriteOperations,阈值设为10000,但告警从未触发

原因:StorageWriteOperations是计数器指标(Counter),其值随时间累加,而Alert规则默认对“平均值”做判断。10000次写入可能在1秒内发生,但1分钟窗口的平均值只有166,远低于阈值。
解决:在Alert规则中,将“Aggregation type”从Average改为Total,并将“Threshold value”设为10000,同时“Time Aggregation”保持Average(这是Azure Monitor的玄学设定:计数器指标必须用Total聚合,但Alert引擎仍叫它Average)。

血泪经验:这题在真实考试中出现过两次。第一次我按常规设Average > 10000,告警静默;第二次翻文档发现StorageWriteOperations的unit是Count,立刻改成Total,5秒后告警短信就来了。DP-100不考你会不会点按钮,考你敢不敢质疑界面默认值。


5. 用大纲PDF反向构建个人能力验证清单:3个必须亲手敲过的命令与2个必画的架构图

考前最后一周,别再刷题库。把DP-100大纲PDF打印出来,对着每一条能力声明,问自己:“这条我能用一行命令验证吗?能画出它在真实架构中的位置吗?” 我给自己定了死线:必须亲手敲通以下3个命令,并画出对应架构图。

5.1 命令1:验证“data lineage with Purview”(大纲Section 4.2)

# 步骤1:用Purview CLI注册ADLS Gen2(关键:--account-key必须用Storage Account密钥,不能用SAS token) purview account register \ --account-name pv-dp100-prod \ --resource-group rg-dp100-purview \ --location "East US" \ --kind "Microsoft.Storage/storageAccounts" # 步骤2:触发扫描(关键:--scan-name必须唯一,且--scan-level必须为"Full"才能采集lineage) purview scan start \ --account-name pv-dp100-prod \ --scan-name scan-adls-full-2024 \ --scan-level "Full" \ --resource-name "dlsdp100core" \ --resource-type "Microsoft.Storage/storageAccounts"

为什么必须亲手敲:--scan-level "Full"是lineage采集的开关,设为"Quick"只扫元数据不扫血缘;--resource-name必须是Storage Account名字(如dlsdp100core),不是容器名,输错直接报Resource not found。考试考“如何让Purview显示ADF管道到SQL MI的血缘”,答案必是先确保ADLS Gen2扫描为Full,再确保ADF中Copy Activity的Sink设置了"enableStaging": true(触发Purview识别中间态)。

5.2 命令2:验证“disaster recovery with ADLS Gen2 + GRS”(大纲Section 3.3)

# 步骤1:创建GRS存储账户(注意:--sku必须为Standard_GRS,LRS不行) az storage account create \ --name dlsdp100dr \ --resource-group rg-dp100-dr \ --location "West US" \ --sku Standard_GRS \ --hierarchical-namespace true # 步骤2:启用Geo-Redundant Backup(关键:必须用az storage account blob-service-properties update) az storage account blob-service-properties update \ --account-name dlsdp100dr \ --resource-group rg-dp100-dr \ --enable-change-feed true \ --enable-versioning true \ --default-service-level "Hot"

参数深挖:--enable-change-feed true是DR核心,它生成$blobchangefeed容器,记录所有Blob变更;--default-service-level "Hot"确保冷数据不被自动降级,否则az storage blob download-batch会因BlobNotFound失败。考试题:“客户要求RPO<15分钟,RTO<1小时”,答案必是GRS+Change Feed+定期az storage blob sync到备用区域。

5.3 命令3:验证“monitoring with Log Analytics custom query”(大纲Section 5.1)

// 在Log Analytics中运行:查过去24小时ADLS Gen2的异常写入(4xx/5xx错误率>5%) StorageBlobLogs | where TimeGenerated > ago(24h) | where OperationName == "PutBlob" or OperationName == "PutBlockList" | summarize TotalRequests = count(), FailedRequests = countif(StatusText startswith "4" or StatusText startswith "5"), ErrorRate = (FailedRequests * 100.0) / TotalRequests by bin(TimeGenerated, 1h) | where ErrorRate > 5.0 | project TimeGenerated, TotalRequests, FailedRequests, ErrorRate | order by TimeGenerated desc

为什么必须亲手跑:DP-100考KQL不是考语法,是考指标语义理解。StatusText startswith "4"必须写,因为StatusText字段值是"403 Server Failed"而非403;bin(TimeGenerated, 1h)必须用,否则summarize无法分组;考试题给一张错误率飙升图,问“根本原因”,答案必是KQL查出FailedRequests集中在某个IP段,进而定位到恶意爬虫。

5.4 必画架构图1:ADF管道中“增量加载”的完整数据流(含checkpoint与error handling)

画图时强制标注3个位置:

  • Source端:SQL MI的last_updated字段必须建索引,否则WHERE last_updated > @{pipeline().parameters.watermark}全表扫描;
  • Pipeline端:Lookup活动查watermark必须设First Row Only = true,否则返回数组导致Set Variable失败;
  • Sink端:ADLS Gen2路径必须含@{formatDateTime(pipeline().TriggerTime, 'yyyy/MM/dd')},否则无法按天分区。

5.5 必画架构图2:Synapse与Databricks共存架构下的Delta Lake共享(大纲Section 2.4)

图中必须体现:

  • Synapse Serverless SQL池通过OPENROWSET直接查询Delta表,路径为abfss://container@dlsdp100core.dfs.core.windows.net/delta/sales/;
  • Databricks集群用spark.read.format("delta").load(...)读同一路径;
  • 关键标注:两者必须用同一ADLS Gen2账户,且Synapse需在Linked Service中启用Use managed identity,Databricks需在Cluster Config中勾选Enable credential passthrough。

我坚持这个习惯三年:每次学一个新服务,第一件事不是看文档,而是打开DP-100大纲PDF,找到对应能力条目,然后问自己“这条能力,在我的MVP Lab里,哪一行命令能证明我真懂了?”——不是“我知道”,是“我能让它动起来,且知道它为什么动、为什么不动”。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询