<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jin</title>
    <description>The latest articles on DEV Community by Jin (@luca1iu).</description>
    <link>https://dev.to/luca1iu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg</url>
      <title>DEV Community: Jin</title>
      <link>https://dev.to/luca1iu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/luca1iu"/>
    <language>en</language>
    <item>
      <title>How to Connect Azure SQL Database in Azure Databricks with PySpark</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Wed, 12 Aug 2026 06:59:55 +0000</pubDate>
      <link>https://dev.to/luca1iu/how-to-connect-azure-sql-database-in-azure-databricks-with-pyspark-557f</link>
      <guid>https://dev.to/luca1iu/how-to-connect-azure-sql-database-in-azure-databricks-with-pyspark-557f</guid>
      <description>&lt;p&gt;In this article, I will show how to connect &lt;strong&gt;Azure SQL Database&lt;/strong&gt; from &lt;strong&gt;Azure Databricks&lt;/strong&gt;, read a SQL table or query result, and write a Spark DataFrame back to Azure SQL Database.&lt;/p&gt;

&lt;p&gt;We will use &lt;strong&gt;PySpark&lt;/strong&gt; because Azure Databricks is built for distributed data processing. PySpark can read data from external databases into Spark DataFrames, transform the data at scale, and write the result back to Azure SQL Database. Microsoft also provides Spark connector support for SQL Server and Azure SQL as input data sources and output sinks for Spark jobs.&lt;/p&gt;

&lt;h1&gt;
  
  
  Connect the Azure SQK Database
&lt;/h1&gt;

&lt;p&gt;define the Azure SQL Database connection settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwf75o0zdrfwkhnv9bdib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwf75o0zdrfwkhnv9bdib.png" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Read data from Azure SQL Database
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Read a full table and Read a SQL query&lt;/strong&gt; &lt;br&gt;
To read a full table, use the &lt;code&gt;dbtable&lt;/code&gt; option. To run a SQL query against Azure SQL Database and load the result into Databricks, use the &lt;code&gt;query&lt;/code&gt; option.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz18y1wnke9ntzxdrva2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz18y1wnke9ntzxdrva2y.png" width="675" height="807"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Databricks also supports JDBC-style reads and writes with Spark Data Source APIs, including reading from a table or pushing down a source SQL query.&lt;/p&gt;
&lt;h1&gt;
  
  
  Write Data to Azure SQL Database
&lt;/h1&gt;

&lt;p&gt;In this example, we first create a small pandas DataFrame and convert it to a Spark DataFrame.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Laptop&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mouse&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Keyboard&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Monitor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Headset&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Webcam&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;USB Hub&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Laptop&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mouse&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Monitor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Region&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;North&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;South&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;East&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;West&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;North&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;East&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;South&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;West&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;North&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;East&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Units_Sold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Revenue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;22500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1260&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1875&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;850&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;33000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1140&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;pdf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createDataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In Azure Databricks notebooks, &lt;code&gt;spark&lt;/code&gt; is usually available automatically. If you run the code outside Databricks, you may need to create a SparkSession manually.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;.write.format("sqlserver")&lt;/code&gt; and provide the connection options.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sqlserver&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;options&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;SQL_OPTIONS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dbtable&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dbo.test_table&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;overwrite&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#or "append"
&lt;/span&gt;  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>python</category>
      <category>databricks</category>
      <category>database</category>
      <category>pyspark</category>
    </item>
    <item>
      <title>DP-750: Databricks Asset Bundles, Git, and ALM Explained and with Real Exam Questions</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Tue, 11 Aug 2026 08:00:13 +0000</pubDate>
      <link>https://dev.to/luca1iu/dp-750-databricks-asset-bundles-git-and-alm-explained-and-with-real-exam-questions-1g1a</link>
      <guid>https://dev.to/luca1iu/dp-750-databricks-asset-bundles-git-and-alm-explained-and-with-real-exam-questions-1g1a</guid>
      <description>&lt;p&gt;When preparing for &lt;strong&gt;DP-750: Microsoft Certified: Azure Databricks Data Engineer Associate&lt;/strong&gt;, you need to understand how Azure Databricks projects are deployed and managed across environments.&lt;/p&gt;

&lt;p&gt;This article focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Declarative Automation Bundles, also known in many exam-style questions as Databricks Asset Bundles&lt;/li&gt;
&lt;li&gt;&lt;code&gt;databricks.yml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;bundle targets&lt;/li&gt;
&lt;li&gt;Databricks CLI deployment&lt;/li&gt;
&lt;li&gt;Git folders&lt;/li&gt;
&lt;li&gt;Git merge&lt;/li&gt;
&lt;li&gt;merge conflicts&lt;/li&gt;
&lt;li&gt;application lifecycle management, ALM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The related questions in your DP-750 question bank are Q12, Q62, Q66, Q67, Q73, Q80, and Q81.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why ALM matters in Azure Databricks
&lt;/h2&gt;

&lt;p&gt;In real data engineering projects, you do not want to manually copy notebooks, jobs, pipelines, and configuration from development to production.&lt;/p&gt;

&lt;p&gt;You need a repeatable process for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;source control&lt;/li&gt;
&lt;li&gt;deployment&lt;/li&gt;
&lt;li&gt;environment-specific configuration&lt;/li&gt;
&lt;li&gt;promotion from development to production&lt;/li&gt;
&lt;li&gt;CI/CD automation&lt;/li&gt;
&lt;li&gt;rollback&lt;/li&gt;
&lt;li&gt;team collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is called &lt;strong&gt;application lifecycle management&lt;/strong&gt;, or &lt;strong&gt;ALM&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For DP-750, the common ALM pattern is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use Git for source control.
Use Declarative Automation Bundles for deployable Databricks resources.
Use Databricks CLI to validate, deploy, and run bundles.
Use targets to parameterize environments such as dev, test, and prod.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Microsoft documentation describes Declarative Automation Bundles as the recommended approach to CI/CD on Databricks. Bundles describe resources such as jobs and pipelines as source files, can be source controlled, and can be deployed through external CI/CD automation.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. What are Declarative Automation Bundles?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Declarative Automation Bundles&lt;/strong&gt; are a way to define a Databricks project as files.&lt;/p&gt;

&lt;p&gt;They were formerly known as &lt;strong&gt;Databricks Asset Bundles&lt;/strong&gt;, and many exam questions still use the older name.&lt;/p&gt;

&lt;p&gt;A bundle can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;jobs&lt;/li&gt;
&lt;li&gt;pipelines&lt;/li&gt;
&lt;li&gt;apps&lt;/li&gt;
&lt;li&gt;notebooks&lt;/li&gt;
&lt;li&gt;Python files&lt;/li&gt;
&lt;li&gt;SQL files&lt;/li&gt;
&lt;li&gt;configuration&lt;/li&gt;
&lt;li&gt;environment-specific targets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A bundle is usually defined with a YAML file named:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;databricks.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Microsoft documentation says bundle metadata is defined using YAML files that specify the artifacts, resources, and configuration of a Databricks project. The Databricks CLI can then validate, deploy, and run bundles using these YAML files.&lt;/p&gt;

&lt;p&gt;For DP-750, remember:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Declarative Automation Bundles = repeatable deployment of Databricks resources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Why use bundles instead of manual workspace export/import?
&lt;/h2&gt;

&lt;p&gt;Manual export and import can work for simple cases, but it is not a strong ALM process.&lt;/p&gt;

&lt;p&gt;It is weak because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it is manual&lt;/li&gt;
&lt;li&gt;it is hard to repeat consistently&lt;/li&gt;
&lt;li&gt;environment parameters are difficult to manage&lt;/li&gt;
&lt;li&gt;promotion between dev/test/prod is error-prone&lt;/li&gt;
&lt;li&gt;source control is weaker&lt;/li&gt;
&lt;li&gt;CI/CD integration is harder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bundles are better because the project is defined as code.&lt;/p&gt;

&lt;p&gt;For example, a bundle can define:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Job A
Job B
Pipeline C
App D
dev target
prod target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then the same project can be deployed repeatedly.&lt;/p&gt;

&lt;p&gt;For DP-750, if the requirement says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Deploy notebooks, workflows, and jobs in a consistent and repeatable way.
Parameterize the target deployment environment.
Provide source control.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;the answer should point to:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Declarative Automation Bundles in Git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. &lt;code&gt;databricks.yml&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The main configuration file for a bundle is usually:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;databricks.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A very small example looks like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;bundle&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my_bundle&lt;/span&gt;

&lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;dev&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Microsoft documentation says the simplest &lt;code&gt;databricks.yml&lt;/code&gt; defines the bundle name and a target deployment.&lt;/p&gt;

&lt;p&gt;In real projects, &lt;code&gt;databricks.yml&lt;/code&gt; often contains:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;bundle&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dp750_project&lt;/span&gt;

&lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;ingestion_job&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ingestion_job&lt;/span&gt;
      &lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;task_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ingest&lt;/span&gt;
          &lt;span class="na"&gt;notebook_task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;notebook_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./src/ingest.py&lt;/span&gt;

&lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;dev&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;workspace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://adb-dev.azuredatabricks.net&lt;/span&gt;

  &lt;span class="na"&gt;prod&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
    &lt;span class="na"&gt;workspace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://adb-prod.azuredatabricks.net&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, you usually do not need to memorize every YAML property. You need to know what each major node is for.&lt;/p&gt;


&lt;h2&gt;
  
  
  5. Important bundle nodes
&lt;/h2&gt;

&lt;p&gt;The most important nodes for DP-750 are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Node&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bundle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines bundle metadata, such as the bundle name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;resources&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines deployable resources, such as jobs, pipelines, and apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;targets&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines deployment environments such as dev and prod&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;variables&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines reusable parameters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;workspace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines target workspace settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;artifacts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines build artifacts such as Python packages&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For exam questions, the most important one is usually:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;targets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. What are targets?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;target&lt;/strong&gt; is an environment-specific deployment configuration.&lt;/p&gt;

&lt;p&gt;Common examples:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dev
test
prod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Targets let you deploy the same bundle to different environments with different settings.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;dev&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;workspace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://adb-dev.azuredatabricks.net&lt;/span&gt;

  &lt;span class="na"&gt;prod&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;production&lt;/span&gt;
    &lt;span class="na"&gt;workspace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://adb-prod.azuredatabricks.net&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Microsoft documentation explains that target workspaces are defined in the &lt;code&gt;targets&lt;/code&gt; mapping of the bundle’s &lt;code&gt;databricks.yml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Deploy same bundle to dev and prod = use targets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Targets for selective deployment
&lt;/h2&gt;

&lt;p&gt;Some exam questions ask something like:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You have two jobs and an app.
You need to deploy the app to both environments.
You need to deploy only one job to development.
Minimize administrative effort.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This points to target-specific configuration.&lt;/p&gt;

&lt;p&gt;The answer is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use a targets node in databricks.yml.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because &lt;code&gt;targets&lt;/code&gt; lets you define different deployment behavior for different environments.&lt;/p&gt;

&lt;p&gt;A simplified example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;job_a&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;job_a&lt;/span&gt;

    &lt;span class="na"&gt;job_b&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;job_b&lt;/span&gt;

  &lt;span class="na"&gt;apps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;my_app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my_app&lt;/span&gt;

&lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;dev&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;job_a&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;job_a_dev&lt;/span&gt;

  &lt;span class="na"&gt;prod&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;job_a&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;job_a_prod&lt;/span&gt;
        &lt;span class="na"&gt;job_b&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;job_b_prod&lt;/span&gt;
      &lt;span class="na"&gt;apps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;my_app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my_app_prod&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The exact syntax depends on the project, but the concept is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;targets control environment-specific deployment behavior.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. Databricks CLI and bundles
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Databricks CLI&lt;/strong&gt; is the standard tool used to work with bundles.&lt;/p&gt;

&lt;p&gt;Common commands include:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;databricks bundle validate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;databricks bundle deploy &lt;span class="nt"&gt;--target&lt;/span&gt; dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;databricks bundle run &amp;lt;job-name&amp;gt; &lt;span class="nt"&gt;--target&lt;/span&gt; dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Microsoft documentation says you use Databricks CLI bundle commands to create, validate, deploy, run, and destroy bundles.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Deploy Declarative Automation Bundles = Databricks CLI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;not:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Jobs UI
Git folders only
Databricks SDK for Python
Azure CLI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Those tools may be useful in other scenarios, but the standard bundle deployment tool is the Databricks CLI.&lt;/p&gt;


&lt;h2&gt;
  
  
  9. &lt;code&gt;databricks bundle deploy --target dev&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;One common exam question asks how to complete the command for deploying a bundle to the &lt;code&gt;dev&lt;/code&gt; environment.&lt;/p&gt;

&lt;p&gt;The correct command is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;databricks bundle deploy &lt;span class="nt"&gt;--target&lt;/span&gt; dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The Databricks CLI bundle command documentation says that to deploy a bundle to a specific target, you can use the &lt;code&gt;-t&lt;/code&gt; or &lt;code&gt;--target&lt;/code&gt; option.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deploy bundle to dev&lt;/td&gt;
&lt;td&gt;&lt;code&gt;databricks bundle deploy --target dev&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validate bundle&lt;/td&gt;
&lt;td&gt;&lt;code&gt;databricks bundle validate&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run bundle workflow&lt;/td&gt;
&lt;td&gt;&lt;code&gt;databricks bundle run&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  10. Git folders in Azure Databricks
&lt;/h2&gt;

&lt;p&gt;Azure Databricks Git folders integrate notebooks and source files with Git repositories.&lt;/p&gt;

&lt;p&gt;They allow teams to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clone repositories&lt;/li&gt;
&lt;li&gt;create branches&lt;/li&gt;
&lt;li&gt;commit changes&lt;/li&gt;
&lt;li&gt;push changes&lt;/li&gt;
&lt;li&gt;pull changes&lt;/li&gt;
&lt;li&gt;merge branches&lt;/li&gt;
&lt;li&gt;resolve conflicts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Microsoft documentation describes Git folders as supporting repository cloning, branch management, commits, merge conflict resolution, and Git CLI commands.&lt;/p&gt;

&lt;p&gt;For DP-750, Git folders are often tested through basic Git operations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;merge&lt;/li&gt;
&lt;li&gt;pull&lt;/li&gt;
&lt;li&gt;push&lt;/li&gt;
&lt;li&gt;rebase&lt;/li&gt;
&lt;li&gt;conflict resolution&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  11. Merge vs rebase vs pull vs push
&lt;/h2&gt;

&lt;p&gt;A common DP-750 question asks:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;From the main branch, you create Branch1 and commit changes to Branch1.
You need to incorporate the changes from Branch1 into main.
The solution must preserve commit history.
Which Git operation should you use?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The correct answer is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;merge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Microsoft documentation says the merge function in Azure Databricks Git folders uses &lt;code&gt;git merge&lt;/code&gt; to combine the commit history from one branch into another. It also recommends merge instead of rebase for Git beginners because merge does not rewrite commit history.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Git operation&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;merge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Combine changes from one branch into another while preserving history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rebase&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Replay commits on top of another branch; can rewrite history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pull&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fetch and integrate remote changes into current branch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;push&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Send local commits to remote repository&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If the question says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;preserve commit history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;choose:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;merge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  12. Merge conflicts
&lt;/h2&gt;

&lt;p&gt;A merge conflict happens when Git cannot automatically combine changes.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You changed &lt;code&gt;Notebook1&lt;/code&gt; in &lt;code&gt;Branch1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Another user changed the same part of &lt;code&gt;Notebook1&lt;/code&gt; in &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You try to merge &lt;code&gt;Branch1&lt;/code&gt; into &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Git cannot decide which version to keep.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this case, you must resolve the conflict manually.&lt;/p&gt;

&lt;p&gt;Databricks documentation says that to manually resolve conflicts, you edit the file contents, select the lines you want to preserve, remove merge conflict markers, and mark the conflict as resolved.&lt;/p&gt;

&lt;p&gt;For DP-750, the best answer pattern is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Apply the main branch changes to Branch1 and resolve the conflicts.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This lets you include all changes from both branches before merging.&lt;/p&gt;


&lt;h2&gt;
  
  
  13. Why not clone a new repository?
&lt;/h2&gt;

&lt;p&gt;Some wrong answers suggest cloning the main branch or feature branch as a new repository.&lt;/p&gt;

&lt;p&gt;That does not solve the merge conflict.&lt;/p&gt;

&lt;p&gt;A conflict is about combining changes in the same repository history.&lt;/p&gt;

&lt;p&gt;Creating a new clone may give you another working copy, but it does not automatically integrate both sets of changes into &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Merge conflict = resolve conflict
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;not:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clone a new repository
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  14. Git folders vs Declarative Automation Bundles
&lt;/h2&gt;

&lt;p&gt;Git folders and bundles are related, but they are not the same.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Git folders&lt;/td&gt;
&lt;td&gt;Source control and collaboration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Declarative Automation Bundles&lt;/td&gt;
&lt;td&gt;Define and deploy Databricks resources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Databricks CLI&lt;/td&gt;
&lt;td&gt;Execute bundle commands such as validate/deploy/run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Targets&lt;/td&gt;
&lt;td&gt;Environment-specific deployment configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A strong production ALM pattern usually combines them:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Code and bundle files stored in Git.
Bundle defines jobs, pipelines, apps, and configuration.
Databricks CLI deploys the bundle to dev/test/prod.
CI/CD system automates the deployment.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Git alone is not enough for repeatable environment deployment.
Bundles alone without Git are weaker for source control.
Bundles in Git is the best ALM pattern.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  15. Declarative Automation Bundles vs Terraform
&lt;/h2&gt;

&lt;p&gt;Terraform can manage Databricks resources, and it can be useful for infrastructure-as-code scenarios.&lt;/p&gt;

&lt;p&gt;However, DP-750 questions about notebooks, workflows, jobs, target environment parameterization, and repeatable project deployment often expect:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Declarative Automation Bundles in Git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is because bundles are specifically designed for Databricks project deployment and CI/CD.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Best answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deploy notebooks, workflows, and jobs as a project&lt;/td&gt;
&lt;td&gt;Declarative Automation Bundles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source control project files&lt;/td&gt;
&lt;td&gt;Git&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parameterize target environment&lt;/td&gt;
&lt;td&gt;Bundle targets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deploy bundle&lt;/td&gt;
&lt;td&gt;Databricks CLI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manage lower-level cloud infrastructure&lt;/td&gt;
&lt;td&gt;Terraform may be relevant, but not usually the DP-750 bundle answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  16. DP-750 decision table for bundles, Git, and ALM
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario in the question&lt;/th&gt;
&lt;th&gt;Best answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Repeatable deployment of notebooks, workflows, and jobs&lt;/td&gt;
&lt;td&gt;Declarative Automation Bundles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source control for Databricks project&lt;/td&gt;
&lt;td&gt;Git&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parameterize dev/test/prod&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;targets&lt;/code&gt; in &lt;code&gt;databricks.yml&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deploy bundle to dev&lt;/td&gt;
&lt;td&gt;&lt;code&gt;databricks bundle deploy --target dev&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool used to deploy bundles&lt;/td&gt;
&lt;td&gt;Databricks CLI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bundle contains two jobs and an app with environment-specific deployment&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;targets&lt;/code&gt; node&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preserve commit history when combining branches&lt;/td&gt;
&lt;td&gt;Merge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merge fails because of conflicts&lt;/td&gt;
&lt;td&gt;Apply main changes to branch and resolve conflicts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clone new repository to solve conflict&lt;/td&gt;
&lt;td&gt;Wrong&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manual workspace export/import for ALM&lt;/td&gt;
&lt;td&gt;Weak / not preferred&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Real Exam Questions
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Question 12
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks solution that was developed by multiple engineers and deployed to development, test, and production environments.&lt;/p&gt;

&lt;p&gt;You need to implement an application lifecycle management, ALM, process that meets the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Deploys and provides source control for Databricks notebooks, workflows, and jobs in a consistent and repeatable way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Parameterizes the target deployment environment.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What should you include in the solution?&lt;/p&gt;

&lt;p&gt;A. the export and import of Databricks workspaces&lt;/p&gt;

&lt;p&gt;B. Databricks resources managed by using the Databricks Terraform provider&lt;/p&gt;

&lt;p&gt;C. Git folders and manual promotion&lt;/p&gt;

&lt;p&gt;D. Declarative Automation Bundles in Git ✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 62
&lt;/h2&gt;

&lt;p&gt;You use Databricks Asset Bundles to manage two jobs and an app.&lt;/p&gt;

&lt;p&gt;You need to deploy the bundle to development and production environments.&lt;/p&gt;

&lt;p&gt;The solution must meet the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Deploy the app to both environments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deploy only one job to development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Minimize administrative effort.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What should you use?&lt;/p&gt;

&lt;p&gt;A. separate databricks.yml files for each environment&lt;/p&gt;

&lt;p&gt;B. a variables node in a databricks.yml file&lt;/p&gt;

&lt;p&gt;C. a resources node in a databricks.yml file&lt;/p&gt;

&lt;p&gt;D. a targets node in a databricks.yml file ✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 66
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that contains a Git folder and uses an Azure Repos Git repository.&lt;/p&gt;

&lt;p&gt;From the main branch, you create a branch named Branch1 and commit changes to Branch1.&lt;/p&gt;

&lt;p&gt;You need to incorporate the changes from Branch1 into main. The solution must preserve the commit history in the repository.&lt;/p&gt;

&lt;p&gt;Which Git operation should you use?&lt;/p&gt;

&lt;p&gt;A. rebase&lt;/p&gt;

&lt;p&gt;B. pull&lt;/p&gt;

&lt;p&gt;C. merge ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;D. push&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 67
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace named Workspace1 that uses a Git repository. The repository contains a Databricks notebook named Notebook1.&lt;/p&gt;

&lt;p&gt;From the main branch, you create a feature branch named Branch1 and commit changes to Notebook1. Another user commits changes to Notebook1 in main.&lt;/p&gt;

&lt;p&gt;When you attempt to merge Branch1 into main, the merge fails due to conflicts.&lt;/p&gt;

&lt;p&gt;You need to merge Branch1 into the main branch. The solution must ensure that Notebook1 includes all the changes from both the branches.&lt;/p&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;p&gt;A. From Workspace1, clone the main branch as a new repository.&lt;/p&gt;

&lt;p&gt;B. Apply the main branch changes to Branch1 and resolve the conflicts. ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;C. From Workspace1, clone Branch1 as a new repository.&lt;/p&gt;

&lt;p&gt;D. Apply the changes directly to the main branch.&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 73
&lt;/h2&gt;

&lt;p&gt;You need to deploy Databricks Asset Bundles to a development environment. The solution must support automated and repeatable deployments across environments.&lt;/p&gt;

&lt;p&gt;What should you use?&lt;/p&gt;

&lt;p&gt;A. Git folders&lt;/p&gt;

&lt;p&gt;B. the Databricks CLI ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;C. the Databricks SDK for Python&lt;/p&gt;

&lt;p&gt;D. the Jobs UI&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 80
&lt;/h2&gt;

&lt;p&gt;You have a Declarative Automation Bundle.&lt;/p&gt;

&lt;p&gt;You plan to use the Databricks CLI to deploy the bundle to an environment named dev.&lt;/p&gt;

&lt;p&gt;How should you complete the CLI command?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dropdown 1&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;databricks bundle&lt;/code&gt; ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dropdown 2&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;deploy --target dev&lt;/code&gt; ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Completed command:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;databricks bundle deploy &lt;span class="nt"&gt;--target&lt;/span&gt; dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Question 81
&lt;/h2&gt;

&lt;p&gt;You need to deploy Declarative Automation Bundles to a development environment. The solution must support automated and repeatable deployments across environments.&lt;/p&gt;

&lt;p&gt;What should you use?&lt;/p&gt;

&lt;p&gt;A. the Databricks CLI ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;B. Git folders&lt;/p&gt;

&lt;p&gt;C. the Azure Developer CLI, azd&lt;/p&gt;

&lt;p&gt;D. the Azure Command-Line Interface, CLI&lt;/p&gt;


&lt;h1&gt;
  
  
  Key takeaways
&lt;/h1&gt;

&lt;p&gt;For DP-750, Databricks Asset Bundles, Git, and ALM questions usually test whether you know how to deploy Databricks projects repeatably across environments.&lt;/p&gt;

&lt;p&gt;Remember these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Declarative Automation Bundles are the modern Databricks project deployment mechanism.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many exam questions still call them Databricks Asset Bundles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bundle configuration is usually stored in &lt;code&gt;databricks.yml&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;resources&lt;/code&gt; define deployable objects such as jobs, pipelines, and apps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;targets&lt;/code&gt; define environment-specific deployment settings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Databricks CLI is used to validate, deploy, and run bundles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To deploy to dev, use &lt;code&gt;databricks bundle deploy --target dev&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git folders provide source control and collaboration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code&gt;merge&lt;/code&gt; to incorporate one branch into another while preserving commit history.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If a merge conflict happens, apply the latest main branch changes to the feature branch and resolve the conflict.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git folders alone are not the same as a full ALM deployment strategy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bundles in Git provide source-controlled, repeatable, environment-aware Databricks deployment.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can separate &lt;strong&gt;source control&lt;/strong&gt;, &lt;strong&gt;deployment configuration&lt;/strong&gt;, &lt;strong&gt;environment targets&lt;/strong&gt;, and &lt;strong&gt;Git branch operations&lt;/strong&gt;, these DP-750 ALM questions become much easier.&lt;/p&gt;


&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>databricks</category>
      <category>certification</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Azure Databricks: Fix “DataFrame Object Has No Attribute write”</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Tue, 11 Aug 2026 08:00:07 +0000</pubDate>
      <link>https://dev.to/luca1iu/azure-databricks-fix-dataframe-object-has-no-attribute-write-2dd6</link>
      <guid>https://dev.to/luca1iu/azure-databricks-fix-dataframe-object-has-no-attribute-write-2dd6</guid>
      <description>&lt;p&gt;While writing data from an Azure Databricks notebook to SQL Server, I encountered the following error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AttributeError: 'DataFrame' object has no attribute 'write'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The notebook was running on &lt;strong&gt;Azure Databricks Serverless Compute&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The error occurred because the DataFrame was created with pandas, but the code attempted to use the PySpark &lt;code&gt;.write&lt;/code&gt; API.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Suppose we have a Pandas DataFrame:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Product&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Laptop&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mouse&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Keyboard&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Monitor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Headset&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Webcam&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;USB Hub&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Laptop&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mouse&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Monitor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Region&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;North&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;South&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;East&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;West&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;North&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;East&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;South&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;West&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;North&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;East&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Units_Sold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Revenue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="mi"&gt;22500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1260&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1875&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="mi"&gt;850&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;33000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1140&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4000&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We then try to write the DataFrame to SQL Server:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sqlserver&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;options&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;SQL_OPTIONS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dbtable&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test_table&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;overwrite&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The operation fails with:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpvk5jl39u4e5gxtxbfit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpvk5jl39u4e5gxtxbfit.png" width="799" height="374"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why This Error Happens
&lt;/h2&gt;

&lt;p&gt;The variable &lt;code&gt;df&lt;/code&gt; is a &lt;strong&gt;Pandas DataFrame&lt;/strong&gt;, not a &lt;strong&gt;PySpark DataFrame&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can confirm this by checking its type:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The result will be similar to:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;class 'pandas.core.frame.DataFrame'&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pandas and PySpark both use the name &lt;code&gt;DataFrame&lt;/code&gt;, but they are different Python classes with different APIs.&lt;/p&gt;

&lt;p&gt;A Pandas DataFrame provides writing methods such as:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_csv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_excel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_parquet&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_sql&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It does not provide the Spark &lt;code&gt;.write&lt;/code&gt; property.&lt;/p&gt;

&lt;p&gt;The following syntax belongs to the PySpark DataFrame API:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(...).&lt;/span&gt;&lt;span class="nf"&gt;options&lt;/span&gt;&lt;span class="p"&gt;(...).&lt;/span&gt;&lt;span class="nf"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;(...).&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For a PySpark DataFrame, &lt;code&gt;.write&lt;/code&gt; returns a &lt;code&gt;DataFrameWriter&lt;/code&gt;, which is responsible for writing data to external storage systems and databases.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;Convert the Pandas DataFrame to a PySpark DataFrame before calling &lt;code&gt;.write&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createDataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After the conversion, the write operation works:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sqlserver&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;options&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;SQL_OPTIONS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dbtable&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test_table&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;overwrite&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;spark.createDataFrame()&lt;/code&gt; can create a PySpark DataFrame directly from a Pandas DataFrame. Spark converts the local Pandas data into a Spark DataFrame and infers the column schema when no schema is provided.&lt;/p&gt;
&lt;h2&gt;
  
  
  Complete Working Example
&lt;/h2&gt;

&lt;p&gt;Using different variable names makes it clear which DataFrame type is being used:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi20ixk7pp9n1pj8db4eo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi20ixk7pp9n1pj8db4eo.png" width="589" height="694"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The error is caused by using a PySpark method on a Pandas DataFrame.&lt;/p&gt;


&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>dataanalyst</category>
      <category>pandas</category>
      <category>pyspark</category>
      <category>database</category>
    </item>
    <item>
      <title>DP-750: Slowly Changing Dimensions and Data Quality Expectations Explained and with Real Exam Questions</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Mon, 10 Aug 2026 12:02:13 +0000</pubDate>
      <link>https://dev.to/luca1iu/dp-750-slowly-changing-dimensions-and-data-quality-expectations-explained-and-with-real-exam-27nj</link>
      <guid>https://dev.to/luca1iu/dp-750-slowly-changing-dimensions-and-data-quality-expectations-explained-and-with-real-exam-27nj</guid>
      <description>&lt;p&gt;When preparing for &lt;strong&gt;DP-750: Microsoft Certified: Azure Databricks Data Engineer Associate&lt;/strong&gt;, you need to understand two related but different topics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slowly Changing Dimensions&lt;/strong&gt;, SCD&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data quality expectations&lt;/strong&gt; in Lakeflow Spark Declarative Pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SCD is about how to model changes in dimension data over time.&lt;/p&gt;

&lt;p&gt;Data quality expectations are about validating records as they flow through a pipeline.&lt;/p&gt;

&lt;p&gt;The related questions in your DP-750 question bank are Q36, Q55, Q57, Q76, Q77, and Q78.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. What is a Slowly Changing Dimension?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Slowly Changing Dimension&lt;/strong&gt;, or &lt;strong&gt;SCD&lt;/strong&gt;, is a data modeling pattern used when dimension records change over time.&lt;/p&gt;

&lt;p&gt;A dimension table usually stores descriptive business data, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;customer profile&lt;/li&gt;
&lt;li&gt;equipment metadata&lt;/li&gt;
&lt;li&gt;product information&lt;/li&gt;
&lt;li&gt;employee information&lt;/li&gt;
&lt;li&gt;supplier information&lt;/li&gt;
&lt;li&gt;IoT sensor ownership&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;equipment_id = E001
equipment_name = Turbine A
manufacturer = Contoso Energy
owner = Team West
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Over time, some values may change:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;owner = Team Central
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Should we overwrite the old value, or should we keep the full history?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is where SCD types are used.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. SCD Type 1
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SCD Type 1&lt;/strong&gt; overwrites existing values.&lt;/p&gt;

&lt;p&gt;It does not preserve historical versions.&lt;/p&gt;

&lt;p&gt;Example before update:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;equipment_id&lt;/th&gt;
&lt;th&gt;equipment_name&lt;/th&gt;
&lt;th&gt;manufacturer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;E001&lt;/td&gt;
&lt;td&gt;Turbine A&lt;/td&gt;
&lt;td&gt;Contoso Energy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Example after correction:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;equipment_id&lt;/th&gt;
&lt;th&gt;equipment_name&lt;/th&gt;
&lt;th&gt;manufacturer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;E001&lt;/td&gt;
&lt;td&gt;Turbine Alpha&lt;/td&gt;
&lt;td&gt;Contoso Energy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The old value, &lt;code&gt;Turbine A&lt;/code&gt;, is replaced.&lt;/p&gt;

&lt;p&gt;Use SCD Type 1 when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the old value is not needed&lt;/li&gt;
&lt;li&gt;the change is a correction&lt;/li&gt;
&lt;li&gt;the previous value was a data-entry mistake&lt;/li&gt;
&lt;li&gt;only the latest value matters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Databricks documentation describes SCD Type 1 as history tracking off: outdated records are overwritten when they are updated or deleted in the source.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Historical values are NOT required = SCD Type 1
Data-entry mistake correction = SCD Type 1
Overwrite existing values = SCD Type 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. SCD Type 2
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SCD Type 2&lt;/strong&gt; keeps history.&lt;/p&gt;

&lt;p&gt;Instead of overwriting the old row, it creates a new row and marks which version is current.&lt;/p&gt;

&lt;p&gt;Example before ownership change:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;sensor_id&lt;/th&gt;
&lt;th&gt;owner&lt;/th&gt;
&lt;th&gt;valid_from&lt;/th&gt;
&lt;th&gt;valid_to&lt;/th&gt;
&lt;th&gt;is_current&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;S001&lt;/td&gt;
&lt;td&gt;Team West&lt;/td&gt;
&lt;td&gt;2025-01-01&lt;/td&gt;
&lt;td&gt;null&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Example after ownership change:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;sensor_id&lt;/th&gt;
&lt;th&gt;owner&lt;/th&gt;
&lt;th&gt;valid_from&lt;/th&gt;
&lt;th&gt;valid_to&lt;/th&gt;
&lt;th&gt;is_current&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;S001&lt;/td&gt;
&lt;td&gt;Team West&lt;/td&gt;
&lt;td&gt;2025-01-01&lt;/td&gt;
&lt;td&gt;2026-03-01&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S001&lt;/td&gt;
&lt;td&gt;Team Central&lt;/td&gt;
&lt;td&gt;2026-03-01&lt;/td&gt;
&lt;td&gt;null&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use SCD Type 2 when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;business users need historical tracking&lt;/li&gt;
&lt;li&gt;analysts need to know what was true at a previous time&lt;/li&gt;
&lt;li&gt;ownership changes over time&lt;/li&gt;
&lt;li&gt;full history must be preserved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Databricks documentation describes SCD Type 2 as history tracking on: the ingestion pipeline keeps the old row, adds the update as a new row, and marks the old row as inactive.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Track full history = SCD Type 2
Ownership changes over time = SCD Type 2
Keep old row and add new row = SCD Type 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. SCD Type 1 vs SCD Type 2
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;SCD type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Correct data-entry mistakes&lt;/td&gt;
&lt;td&gt;Type 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Historical values are not required&lt;/td&gt;
&lt;td&gt;Type 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Only latest value matters&lt;/td&gt;
&lt;td&gt;Type 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overwrite existing values&lt;/td&gt;
&lt;td&gt;Type 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Track ownership changes over time&lt;/td&gt;
&lt;td&gt;Type 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keep full history&lt;/td&gt;
&lt;td&gt;Type 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add a new row for each change&lt;/td&gt;
&lt;td&gt;Type 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support historical analysis&lt;/td&gt;
&lt;td&gt;Type 2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is one of the most important DP-750 decision patterns.&lt;/p&gt;

&lt;p&gt;If the question says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Historical values are NOT required.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;choose &lt;strong&gt;Type 1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If the question says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Analysts must track the full history.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;choose &lt;strong&gt;Type 2&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  5. SCD Type 2 and Lakeflow
&lt;/h2&gt;

&lt;p&gt;Lakeflow Spark Declarative Pipelines can support CDC and SCD patterns.&lt;/p&gt;

&lt;p&gt;Databricks documentation shows that Lakeflow SDP can create a Type 2 SCD table to track all changes, and uses &lt;code&gt;AUTO CDC ... INTO&lt;/code&gt; to apply changes into the final table.&lt;/p&gt;

&lt;p&gt;In Lakeflow SQL, SCD Type 2 can be expressed with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;STORED&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;SCD&lt;/span&gt; &lt;span class="k"&gt;TYPE&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In Python, it can be expressed with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;stored_as_scd_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, you usually do not need to memorize all syntax details. The most important concept is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SCD Type 2 = persistent record-level history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Delta Lake time travel vs SCD Type 2
&lt;/h2&gt;

&lt;p&gt;Delta Lake time travel and SCD Type 2 are related, but they are not the same thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delta Lake time travel&lt;/strong&gt; lets you query earlier table versions by timestamp or version number. Databricks documentation says time travel supports querying previous table versions based on timestamp or table version recorded in the transaction log.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customer_profiles&lt;/span&gt; &lt;span class="k"&gt;VERSION&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="k"&gt;OF&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;SCD Type 2&lt;/strong&gt; stores business history directly in the table as rows.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;customer_id&lt;/th&gt;
&lt;th&gt;status&lt;/th&gt;
&lt;th&gt;valid_from&lt;/th&gt;
&lt;th&gt;valid_to&lt;/th&gt;
&lt;th&gt;is_current&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C001&lt;/td&gt;
&lt;td&gt;Silver&lt;/td&gt;
&lt;td&gt;2025-01-01&lt;/td&gt;
&lt;td&gt;2026-01-01&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C001&lt;/td&gt;
&lt;td&gt;Gold&lt;/td&gt;
&lt;td&gt;2026-01-01&lt;/td&gt;
&lt;td&gt;null&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Best answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Maintain persistent historical record changes&lt;/td&gt;
&lt;td&gt;SCD Type 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query earlier Delta table versions&lt;/td&gt;
&lt;td&gt;Delta Lake time travel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Correct wrong values without keeping history&lt;/td&gt;
&lt;td&gt;SCD Type 1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  7. What are data quality expectations?
&lt;/h2&gt;

&lt;p&gt;In Lakeflow Spark Declarative Pipelines, &lt;strong&gt;expectations&lt;/strong&gt; are data quality constraints.&lt;/p&gt;

&lt;p&gt;They validate records as data flows through the pipeline.&lt;/p&gt;

&lt;p&gt;An expectation is usually written as a Boolean condition, such as:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;amount &amp;gt; 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;transaction_id IS NOT NULL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Databricks documentation says expectations apply quality constraints that validate data as it flows through ETL pipelines. They can provide metrics, drop invalid records, or fail updates when invalid records are detected.&lt;/p&gt;

&lt;p&gt;For DP-750, expectations usually appear in questions about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validating records&lt;/li&gt;
&lt;li&gt;dropping invalid records&lt;/li&gt;
&lt;li&gt;failing pipeline updates&lt;/li&gt;
&lt;li&gt;collecting data quality metrics&lt;/li&gt;
&lt;li&gt;preventing bad records from being written&lt;/li&gt;
&lt;li&gt;quarantining invalid records&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  8. Expectation actions
&lt;/h2&gt;

&lt;p&gt;There are three main expectation behaviors.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Behavior&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Retain invalid records&lt;/td&gt;
&lt;td&gt;Keep records, but collect metrics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Drop invalid records&lt;/td&gt;
&lt;td&gt;Do not write invalid records to the target&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fail on invalid records&lt;/td&gt;
&lt;td&gt;Stop the update when invalid data is detected&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In current Lakeflow documentation, expectation decorators are in the &lt;code&gt;pyspark.pipelines&lt;/code&gt; module, commonly imported as &lt;code&gt;dp&lt;/code&gt;. The exam questions may still use the older &lt;code&gt;dlt&lt;/code&gt; naming, but the behavior is the important part. Databricks documentation lists decorators such as &lt;code&gt;expect&lt;/code&gt;, &lt;code&gt;expect_or_drop&lt;/code&gt;, and &lt;code&gt;expect_or_fail&lt;/code&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  9. &lt;code&gt;expect&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;expect&lt;/code&gt; validates data and records metrics, but it does not drop or fail invalid records.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@dlt.expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;valid_amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount &amp;gt; 0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Behavior:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Valid records are written.
Invalid records are also written.
Metrics are collected.
Pipeline continues.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use this when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you want to monitor data quality&lt;/li&gt;
&lt;li&gt;invalid records can remain in the target&lt;/li&gt;
&lt;li&gt;you only need metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Collect metrics only = expect
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. &lt;code&gt;expect_or_drop&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;expect_or_drop&lt;/code&gt; drops invalid records before they are written to the target.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@dlt.expect_or_drop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;valid_amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount &amp;gt; 0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Behavior:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Valid records are written.
Invalid records are dropped.
Metrics are collected.
Pipeline continues.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Databricks documentation says &lt;code&gt;expect_or_drop&lt;/code&gt; prevents further processing of invalid records, and records that violate the expectation are dropped from the target dataset.&lt;/p&gt;

&lt;p&gt;Use this when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;invalid records must not be written&lt;/li&gt;
&lt;li&gt;the pipeline should continue&lt;/li&gt;
&lt;li&gt;you want expectation metrics&lt;/li&gt;
&lt;li&gt;you do not need to preserve invalid records in the same target table&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Invalid records must NOT be written, but pipeline continues = expect_or_drop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  11. &lt;code&gt;expect_or_fail&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;expect_or_fail&lt;/code&gt; fails the update when invalid records are detected.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@dlt.expect_or_fail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rule1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount &amp;gt; 0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Behavior:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If invalid records are detected, the update fails.
The transaction is rolled back.
Invalid data is not committed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Databricks documentation says &lt;code&gt;expect_or_fail&lt;/code&gt; stops execution immediately when a record fails validation. If the operation is a table update, the system atomically rolls back the transaction.&lt;/p&gt;

&lt;p&gt;Use this when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;invalid records are unacceptable&lt;/li&gt;
&lt;li&gt;the target table must not be updated&lt;/li&gt;
&lt;li&gt;the update must not be committed if invalid data exists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prevent update from being committed = expect_or_fail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  12. Expectation metrics
&lt;/h2&gt;

&lt;p&gt;Lakeflow expectations can produce data quality metrics.&lt;/p&gt;

&lt;p&gt;Databricks documentation says metrics for &lt;code&gt;warn&lt;/code&gt; or &lt;code&gt;drop&lt;/code&gt; actions can be viewed from the pipeline UI, and the Data quality tab is available in the pipeline UI for pipeline datasets with expectations. It also says expectation metrics can be queried from the Lakeflow Spark Declarative Pipelines event log.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Review expectation metrics with minimal effort&lt;/td&gt;
&lt;td&gt;Pipeline Data Quality tab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query metrics programmatically&lt;/td&gt;
&lt;td&gt;Pipeline event log&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invalid records fail update&lt;/td&gt;
&lt;td&gt;Metrics may not be recorded because update fails&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  13. Quarantine invalid records
&lt;/h2&gt;

&lt;p&gt;A quarantine pattern means invalid records are preserved somewhere for review.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;valid_records      -&amp;gt; target table
invalid_records    -&amp;gt; quarantine table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is different from simply dropping invalid records.&lt;/p&gt;

&lt;p&gt;If the requirement says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Invalid records must NOT be written to Table1.
Invalid records must be preserved for review.
Pipeline must continue.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then &lt;code&gt;expect_or_drop&lt;/code&gt; alone is not enough, because it drops invalid records and does not preserve them as reviewable records.&lt;/p&gt;

&lt;p&gt;The answer is usually to implement a quarantine pattern, such as writing invalid records to a separate quarantine table.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Drop invalid records from target + preserve invalid records = quarantine logic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  14. Expectations vs table constraints
&lt;/h2&gt;

&lt;p&gt;Expectations and table constraints both validate data, but they are used differently.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Typical use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lakeflow expectations&lt;/td&gt;
&lt;td&gt;Validate records during pipeline processing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;NOT NULL&lt;/code&gt; constraint&lt;/td&gt;
&lt;td&gt;Enforce non-null values at table write time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;CHECK&lt;/code&gt; constraint&lt;/td&gt;
&lt;td&gt;Enforce Boolean rule at table write time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quarantine logic&lt;/td&gt;
&lt;td&gt;Preserve invalid records for review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;amount &amp;gt; 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;could be implemented as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;an expectation in a Lakeflow pipeline&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;a &lt;code&gt;CHECK&lt;/code&gt; constraint on a Delta table&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the exam context matters.&lt;/p&gt;

&lt;p&gt;If the question says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Lakeflow Spark Declarative Pipelines pipeline
rule1
expectation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then use expectation decorators.&lt;/p&gt;

&lt;p&gt;If the question says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;table-level data quality enforcement
invalid records must be rejected when written to the table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then use table constraints.&lt;/p&gt;


&lt;h2&gt;
  
  
  15. DP-750 decision table for SCD and expectations
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario in the question&lt;/th&gt;
&lt;th&gt;Best answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Correct data-entry mistake&lt;/td&gt;
&lt;td&gt;SCD Type 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Historical values are not required&lt;/td&gt;
&lt;td&gt;SCD Type 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overwrite name and address values&lt;/td&gt;
&lt;td&gt;SCD Type 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Track ownership changes over time&lt;/td&gt;
&lt;td&gt;SCD Type 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keep full history of profile changes&lt;/td&gt;
&lt;td&gt;SCD Type 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query earlier Delta table versions&lt;/td&gt;
&lt;td&gt;Delta Lake time travel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitor data quality only&lt;/td&gt;
&lt;td&gt;&lt;code&gt;expect&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Drop invalid records and continue&lt;/td&gt;
&lt;td&gt;&lt;code&gt;expect_or_drop&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fail update when invalid data exists&lt;/td&gt;
&lt;td&gt;&lt;code&gt;expect_or_fail&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prevent table update from being committed&lt;/td&gt;
&lt;td&gt;&lt;code&gt;expect_or_fail&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preserve invalid records for review&lt;/td&gt;
&lt;td&gt;Quarantine logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View expectation metrics with minimal effort&lt;/td&gt;
&lt;td&gt;Pipeline Data Quality tab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query expectation metrics&lt;/td&gt;
&lt;td&gt;Pipeline event log&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Real Exam Questions
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Question 36
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Useful case information
&lt;/h3&gt;

&lt;p&gt;Contoso identifies the following data modeling and optimization requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overwrite equipment metadata attributes, such as name, manufacturer, model, and commissioning date, when the attributes change. Historical values are NOT required.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoso also has the following governance issue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ownership of the IoT sensors changes over time, and analysts must track the full history of the ownership.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Occasionally, equipment manufacturers must correct data-entry mistakes in equipment names. Historical values are NOT required.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which SCD type should you use to support the planned data modeling changes?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data-entry mistakes by the equipment manufacturers&lt;/td&gt;
&lt;td&gt;Type 1 ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changes to IoT Sensor ownership&lt;/td&gt;
&lt;td&gt;Type 2 ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 55
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a managed Delta table named &lt;code&gt;Table1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Table1&lt;/code&gt; stores customer profile data.&lt;/p&gt;

&lt;p&gt;Business users must analyze how customer profile records change over time. They must also be able to query earlier versions of the table.&lt;/p&gt;

&lt;p&gt;You need to implement a solution that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Maintains persistent historical versions of customer profile records for long-term analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allows users to query earlier versions of the Delta table.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Minimizes maintenance effort.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;To record historical changes&lt;/td&gt;
&lt;td&gt;Implement a Type 2 slowly changing dimension, SCD ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;To support temporal analysis&lt;/td&gt;
&lt;td&gt;Use Delta Lake time travel ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 57
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a Delta table named Table1. Table1 is used as a dimension table and contains the following columns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;id&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;name&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;address&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You need to apply a Type 1 slowly changing dimension, SCD, approach when updates are processed in the name and address columns.&lt;/p&gt;

&lt;p&gt;What will occur when an update is processed?&lt;/p&gt;

&lt;p&gt;A. A new row will be added for each change to a name and address.&lt;/p&gt;

&lt;p&gt;B. The value of the id column will be updated.&lt;/p&gt;

&lt;p&gt;C. The existing name and address values will be overwritten. ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;D. Historical versions of the row and its effective dates will be retained.&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 76
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You have a Lakeflow Spark Declarative Pipelines, SDP, pipeline that writes numerical data to a table named Table1 by using a data quality validation rule named rule1.&lt;/p&gt;

&lt;p&gt;You need to modify rule1 to meet the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ensure that amount is always greater than 0.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prevent an update to Table1 from being committed when data that violates rule1 is detected.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which statement should you execute?&lt;/p&gt;

&lt;p&gt;A. &lt;code&gt;@dlt.expect_or_fail("rule1", "amount &amp;gt; 0")&lt;/code&gt; ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;B. &lt;code&gt;@dlt.expect("rule1", "amount &amp;gt; 0")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;C. &lt;code&gt;@dlt.expect_all_or_drop({"rule1": "amount &amp;gt; 0"})&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;D. &lt;code&gt;@dlt.expect_or_drop("rule1", "amount &amp;gt; 0")&lt;/code&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 77
&lt;/h2&gt;

&lt;p&gt;You have a Lakeflow Spark Declarative Pipelines, SDP, pipeline in Azure Databricks. The pipeline ingests transaction data into a table named Table1.&lt;/p&gt;

&lt;p&gt;You need to ensure that in the event of an invalid record, the pipeline continues to run.&lt;/p&gt;

&lt;p&gt;The solution must meet the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Invalid records must NOT be written to Table1.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Invalid records must be preserved for review.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Minimize development effort.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;p&gt;A. Add a CHECK constraint to Table1.&lt;/p&gt;

&lt;p&gt;B. Run WHERE clauses in downstream queries to filter out invalid records.&lt;/p&gt;

&lt;p&gt;C. Define a pipeline expectation.&lt;/p&gt;

&lt;p&gt;D. Implement advanced logic to quarantine the invalid records. ✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 78
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You have a Lakeflow Spark Declarative Pipelines, SDP, pipeline that writes records to a Delta table named Table1 by using a data quality rule named rule1.&lt;/p&gt;

&lt;p&gt;You need to meet the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Records that violate rule1 must NOT be written to Table1, but the pipeline must continue processing valid records.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data engineers must be able to review expectation metrics by using minimal development effort.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Set action for rule1 to&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;dlt.expect_or_drop&lt;/code&gt; ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View expectation metrics in&lt;/td&gt;
&lt;td&gt;The Data Quality tab of the pipeline ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Key takeaways
&lt;/h1&gt;

&lt;p&gt;For DP-750, SCD and expectation questions are mainly decision-pattern questions.&lt;/p&gt;

&lt;p&gt;Remember these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SCD Type 1&lt;/strong&gt; overwrites existing values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SCD Type 1&lt;/strong&gt; is used when historical values are not required.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SCD Type 1&lt;/strong&gt; is good for correcting data-entry mistakes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SCD Type 2&lt;/strong&gt; keeps historical versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SCD Type 2&lt;/strong&gt; is used when analysts must track full history.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Delta Lake time travel&lt;/strong&gt; lets users query earlier table versions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;expect&lt;/code&gt; keeps invalid records and records metrics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;expect_or_drop&lt;/code&gt; drops invalid records and continues processing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;expect_or_fail&lt;/code&gt; fails the update and prevents the transaction from being committed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If invalid records must be preserved for review, use a quarantine pattern.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Expectation metrics can be reviewed in the pipeline Data Quality tab or queried from the event log.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In current Lakeflow documentation, the decorators use &lt;code&gt;dp&lt;/code&gt;, but many exam-style questions still show &lt;code&gt;dlt&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can separate &lt;strong&gt;overwrite vs history&lt;/strong&gt;, and &lt;strong&gt;monitor vs drop vs fail vs quarantine&lt;/strong&gt;, these DP-750 questions become much easier.&lt;/p&gt;


&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>databricks</category>
      <category>certification</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>DP-750: Delta Lake Performance Optimization Explained and with Real Exam Questions</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Thu, 06 Aug 2026 06:59:55 +0000</pubDate>
      <link>https://dev.to/luca1iu/dp-750-delta-lake-performance-optimization-explained-and-with-real-exam-questions-254p</link>
      <guid>https://dev.to/luca1iu/dp-750-delta-lake-performance-optimization-explained-and-with-real-exam-questions-254p</guid>
      <description>&lt;p&gt;When preparing for &lt;strong&gt;DP-750: Microsoft Certified: Azure Databricks Data Engineer Associate&lt;/strong&gt;, you need to understand how to keep Delta table performance stable as data grows.&lt;/p&gt;

&lt;p&gt;This article focuses on three common DP-750 performance topics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;liquid clustering&lt;/li&gt;
&lt;li&gt;deletion vectors&lt;/li&gt;
&lt;li&gt;partitioning decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The related questions in your DP-750 question bank are Q9 and Q58.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1. Why Delta Lake performance optimization matters
&lt;/h2&gt;

&lt;p&gt;Delta tables often start small, but production tables can grow quickly.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100 GB
500 GB
1 TB
10 TB
100 TB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;As the table grows, query performance can become unstable if data is not organized well.&lt;/p&gt;

&lt;p&gt;Common symptoms include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;queries become slower over time&lt;/li&gt;
&lt;li&gt;filters scan too much data&lt;/li&gt;
&lt;li&gt;update and delete operations take too long&lt;/li&gt;
&lt;li&gt;partitioning becomes difficult to manage&lt;/li&gt;
&lt;li&gt;too many small partitions appear&lt;/li&gt;
&lt;li&gt;table maintenance becomes expensive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For DP-750, the key question is usually:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which Delta table optimization feature should you use for this workload?&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. What is data layout?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Data layout&lt;/strong&gt; means how data is physically organized in storage.&lt;/p&gt;

&lt;p&gt;Even if users query a table logically like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;events&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;event_time&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="s1"&gt;'2026-01-01'&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="s1"&gt;'2026-01-31'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;the query engine still needs to find the relevant files in storage.&lt;/p&gt;

&lt;p&gt;If the table is organized well, Databricks can skip irrelevant files and scan less data.&lt;/p&gt;

&lt;p&gt;If the table is organized poorly, Databricks may scan too many files, which increases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;query duration&lt;/li&gt;
&lt;li&gt;compute cost&lt;/li&gt;
&lt;li&gt;latency&lt;/li&gt;
&lt;li&gt;storage I/O&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For DP-750, data layout is mainly tested through:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;liquid clustering
partitioning
Z-ORDER, mostly as background knowledge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. What is liquid clustering?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Liquid clustering&lt;/strong&gt; is a Delta Lake data layout optimization technique.&lt;/p&gt;

&lt;p&gt;Azure Databricks documentation describes liquid clustering as a data layout optimization technique that replaces table partitioning and ZORDER, simplifying table management and improving query performance. It is designed for tables that grow over time and need flexible layout optimization.&lt;/p&gt;

&lt;p&gt;In simple terms:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Liquid clustering organizes data based on clustering columns so that Databricks can skip more irrelevant data during queries.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;events&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;event_id&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;event_time&lt;/span&gt; &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;event_type&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;CLUSTER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event_time&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or for an existing table:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;events&lt;/span&gt;
&lt;span class="k"&gt;CLUSTER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event_time&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, if a large table is frequently filtered by a column such as &lt;code&gt;event_time&lt;/code&gt;, and the question wants to avoid over-partitioning, the answer is usually:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Liquid clustering
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Why liquid clustering is preferred over fixed partitioning
&lt;/h2&gt;

&lt;p&gt;Traditional partitioning physically separates data into directory-like groups.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/event_date=2026-01-01/
/event_date=2026-01-02/
/event_date=2026-01-03/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Partitioning can be useful, but it can also create problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;too many small partitions&lt;/li&gt;
&lt;li&gt;uneven partition sizes&lt;/li&gt;
&lt;li&gt;high metadata overhead&lt;/li&gt;
&lt;li&gt;hard-to-change layout&lt;/li&gt;
&lt;li&gt;poor performance if query patterns change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Azure Databricks documentation now recommends liquid clustering for all new Delta tables and managed Iceberg tables, and the SQL &lt;code&gt;CLUSTER BY&lt;/code&gt; documentation recommends automatic liquid clustering and predictive optimization for Unity Catalog managed tables.&lt;br&gt;&lt;br&gt;
For DP-750, this is very important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Large growing table + filter columns + avoid over-partitioning = liquid clustering&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. Liquid clustering vs partitioning
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Liquid clustering&lt;/th&gt;
&lt;th&gt;Traditional partitioning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Main purpose&lt;/td&gt;
&lt;td&gt;Flexible data layout optimization&lt;/td&gt;
&lt;td&gt;Directory-level data organization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Good for growing tables&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Sometimes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avoids over-partitioning&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Easy to adapt to query patterns&lt;/td&gt;
&lt;td&gt;Better&lt;/td&gt;
&lt;td&gt;Harder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replaces ZORDER for many use cases&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recommended for new Delta tables&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Not usually the first choice&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For DP-750, partitioning is usually wrong when the question says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;avoid over-partitioning
remain efficient as data volume grows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This wording strongly points to &lt;strong&gt;liquid clustering&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. Choosing clustering columns
&lt;/h2&gt;

&lt;p&gt;A clustering column should usually be a column frequently used in filters.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;event_time&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;CustomerId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;EventDate&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If a table is frequently queried by filtering on:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CustomerId
EventDate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then those are strong candidates for liquid clustering.&lt;/p&gt;

&lt;p&gt;If a table is frequently queried by filtering on:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;event_time
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then &lt;code&gt;event_time&lt;/code&gt; is a strong clustering column.&lt;/p&gt;

&lt;p&gt;For DP-750, the exact syntax is less important than the decision pattern:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Choose the layout strategy that matches common query filters.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. What are deletion vectors?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Deletion vectors&lt;/strong&gt; are a Delta Lake storage optimization feature that accelerates row-level table modifications.&lt;/p&gt;

&lt;p&gt;Azure Databricks documentation says deletion vectors accelerate &lt;code&gt;DELETE&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, and &lt;code&gt;MERGE&lt;/code&gt; operations. Without deletion vectors, deleting a single row requires rewriting the entire Parquet file that contains the record. With deletion vectors enabled, Databricks can mark rows as modified without immediately rewriting the whole Parquet file.&lt;/p&gt;

&lt;p&gt;This matters when a table has frequent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deletes&lt;/li&gt;
&lt;li&gt;updates&lt;/li&gt;
&lt;li&gt;merges&lt;/li&gt;
&lt;li&gt;compliance-related removal requests&lt;/li&gt;
&lt;li&gt;row-level changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For DP-750, if the question says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rows are frequently updated and deleted.
The solution must minimize update and deletion effort.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then the answer is usually:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Enable deletion vectors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. Why deletion vectors help with updates and deletes
&lt;/h2&gt;

&lt;p&gt;Without deletion vectors, a small update or delete can be expensive.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;One Parquet file contains 1,000,000 rows.
You delete 10 rows.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Without deletion vectors, the system may need to rewrite the file without those 10 rows.&lt;/p&gt;

&lt;p&gt;With deletion vectors, Databricks can record which rows are deleted or changed without immediately rewriting the full file.&lt;/p&gt;

&lt;p&gt;This reduces the cost of row-level operations.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Improve filtering performance as table grows&lt;/td&gt;
&lt;td&gt;Liquid clustering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Minimize update/delete effort&lt;/td&gt;
&lt;td&gt;Deletion vectors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequent compliance deletes&lt;/td&gt;
&lt;td&gt;Deletion vectors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avoid over-partitioning&lt;/td&gt;
&lt;td&gt;Liquid clustering&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  9. Deletion vectors and table properties
&lt;/h2&gt;

&lt;p&gt;For Delta Lake tables, deletion vectors can be enabled with the table property:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="k"&gt;table_name&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;TBLPROPERTIES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'delta.enableDeletionVectors'&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Databricks documentation notes that deletion vectors are not automatically enabled for every Delta table in every situation, and that they can be enabled using the &lt;code&gt;enableDeletionVectors&lt;/code&gt; table property. Enabling deletion vectors upgrades the table protocol, so client compatibility should be considered.&lt;/p&gt;

&lt;p&gt;For DP-750, you usually do not need to worry about protocol details unless the question explicitly mentions compatibility with older clients.&lt;/p&gt;

&lt;p&gt;The exam pattern is simpler:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frequent UPDATE / DELETE / MERGE = enable deletion vectors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. Liquid clustering and deletion vectors together
&lt;/h2&gt;

&lt;p&gt;Liquid clustering and deletion vectors solve different problems.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;th&gt;Best feature&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Query performance with filters&lt;/td&gt;
&lt;td&gt;Liquid clustering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Growing table performance&lt;/td&gt;
&lt;td&gt;Liquid clustering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avoid over-partitioning&lt;/td&gt;
&lt;td&gt;Liquid clustering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequent row updates&lt;/td&gt;
&lt;td&gt;Deletion vectors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequent deletes&lt;/td&gt;
&lt;td&gt;Deletion vectors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compliance delete requests&lt;/td&gt;
&lt;td&gt;Deletion vectors&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In Q9, both issues appear:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The table is queried frequently by filtering on &lt;code&gt;CustomerId&lt;/code&gt; and &lt;code&gt;EventDate&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The table is frequently updated and deleted for compliance.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So the solution includes both:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Liquid clustering
Deletion vectors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  11. What about OPTIMIZE?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;OPTIMIZE&lt;/code&gt; rewrites data files to improve file layout. Azure Databricks documentation says the &lt;code&gt;OPTIMIZE&lt;/code&gt; command rewrites data files to improve layout for Delta Lake and Apache Iceberg tables. For liquid clustered tables, &lt;code&gt;OPTIMIZE&lt;/code&gt; clusters the data according to the clustering columns.&lt;/p&gt;

&lt;p&gt;For DP-750, &lt;code&gt;OPTIMIZE&lt;/code&gt; is more often tested in table maintenance or retention questions.&lt;/p&gt;

&lt;p&gt;In the performance questions from this article, the correct answers focus on:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;liquid clustering
deletion vectors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;not manual partitioning or fixed partition counts.&lt;/p&gt;


&lt;h2&gt;
  
  
  12. What about ZORDER?
&lt;/h2&gt;

&lt;p&gt;ZORDER was historically used to colocate related data and improve data skipping.&lt;/p&gt;

&lt;p&gt;However, current Azure Databricks documentation describes liquid clustering as replacing table partitioning and ZORDER for Delta table layout optimization.&lt;/p&gt;

&lt;p&gt;For DP-750, if the answer options include &lt;strong&gt;liquid clustering&lt;/strong&gt;, and the question asks for a modern data layout strategy for a growing table, liquid clustering is usually the stronger answer.&lt;/p&gt;


&lt;h2&gt;
  
  
  13. Common DP-750 traps
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Trap 1: Partition by event_time
&lt;/h3&gt;

&lt;p&gt;If the table is huge and queries filter on ranges in &lt;code&gt;event_time&lt;/code&gt;, it may seem natural to partition by &lt;code&gt;event_time&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But if &lt;code&gt;event_time&lt;/code&gt; has high cardinality or fine granularity, partitioning can create too many partitions.&lt;/p&gt;

&lt;p&gt;If the question says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;avoids over-partitioning
remains efficient as data volume grows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;choose liquid clustering.&lt;/p&gt;


&lt;h3&gt;
  
  
  Trap 2: Fixed number of partitions
&lt;/h3&gt;

&lt;p&gt;A fixed number of partitions based on table size sounds controlled, but it is not a query-aware layout strategy.&lt;/p&gt;

&lt;p&gt;It does not directly optimize filtering on &lt;code&gt;event_time&lt;/code&gt;, &lt;code&gt;CustomerId&lt;/code&gt;, or &lt;code&gt;EventDate&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For DP-750, if the requirement is query performance for specific filter columns, use liquid clustering.&lt;/p&gt;


&lt;h3&gt;
  
  
  Trap 3: Partition by low-value column
&lt;/h3&gt;

&lt;p&gt;If a table has only a few values in &lt;code&gt;event_type&lt;/code&gt;, partitioning by &lt;code&gt;event_type&lt;/code&gt; may not help range filters on &lt;code&gt;event_time&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;event_time&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="s1"&gt;'2026-01-01'&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="s1"&gt;'2026-01-31'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Partitioning by &lt;code&gt;event_type&lt;/code&gt; does not directly align with this filter.&lt;/p&gt;

&lt;p&gt;For DP-750, match the layout to the query filter columns.&lt;/p&gt;


&lt;h3&gt;
  
  
  Trap 4: Use only deletion vectors for query filters
&lt;/h3&gt;

&lt;p&gt;Deletion vectors help with row-level modifications, not primary data layout for filtering.&lt;/p&gt;

&lt;p&gt;If the problem is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;frequent queries filter by CustomerId and EventDate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;you need liquid clustering.&lt;/p&gt;

&lt;p&gt;If the problem is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;frequent updates and deletes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;you need deletion vectors.&lt;/p&gt;

&lt;p&gt;If the question has both, use both.&lt;/p&gt;


&lt;h2&gt;
  
  
  14. DP-750 decision table for Delta performance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario in the question&lt;/th&gt;
&lt;th&gt;Best answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Large table grows over time&lt;/td&gt;
&lt;td&gt;Liquid clustering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequent filters on one or more columns&lt;/td&gt;
&lt;td&gt;Liquid clustering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avoid over-partitioning&lt;/td&gt;
&lt;td&gt;Liquid clustering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Range filters on &lt;code&gt;event_time&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Liquid clustering on &lt;code&gt;event_time&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequent filters on &lt;code&gt;CustomerId&lt;/code&gt; and &lt;code&gt;EventDate&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Liquid clustering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequent updates and deletes&lt;/td&gt;
&lt;td&gt;Enable deletion vectors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compliance deletes&lt;/td&gt;
&lt;td&gt;Enable deletion vectors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Minimize update/delete effort&lt;/td&gt;
&lt;td&gt;Enable deletion vectors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed partitions by total table size&lt;/td&gt;
&lt;td&gt;Usually wrong&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Partition by high-cardinality timestamp&lt;/td&gt;
&lt;td&gt;Risk of over-partitioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Partition by unrelated column&lt;/td&gt;
&lt;td&gt;Does not match filter pattern&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Real Exam Questions
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Question 9
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a managed Delta table named Table1.&lt;/p&gt;

&lt;p&gt;Table1 is written by batch jobs every hour and is queried frequently by filtering two columns named CustomerId and EventDate.&lt;/p&gt;

&lt;p&gt;You expect Table1 to grow significantly over time.&lt;/p&gt;

&lt;p&gt;The rows in Table1 are frequently updated and deleted to support compliance requests.&lt;/p&gt;

&lt;p&gt;You need to keep query performance consistent as Table1 grows. The solution must minimize update and deletion effort.&lt;/p&gt;

&lt;p&gt;What should you include in the solution? To answer, select the appropriate options in the answer area.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data layout strategy&lt;/td&gt;
&lt;td&gt;Liquid clustering ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update and deletion optimization&lt;/td&gt;
&lt;td&gt;Enable deletion vectors ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 58
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a Delta table named Table1.&lt;/p&gt;

&lt;p&gt;Table1 contains approximately 1.5 TB of data and the following columns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;event_time&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;event_type&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Queries against Table1 frequently filter on ranges in event_time.&lt;/p&gt;

&lt;p&gt;You need to implement a data layout strategy that improves query performance for filters on event_time, avoids over-partitioning, and remains efficient as the data volume grows over time.&lt;/p&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;p&gt;A. Implement liquid clustering on Table1. ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;B. Create a fixed number of partitions based on the total table size.&lt;/p&gt;

&lt;p&gt;C. Partition Table1 by using the event_type column.&lt;/p&gt;

&lt;p&gt;D. Partition Table1 by using the event_time column.&lt;/p&gt;


&lt;h1&gt;
  
  
  Key takeaways
&lt;/h1&gt;

&lt;p&gt;For DP-750, Delta Lake performance optimization questions usually test whether you can identify the right feature for the right performance problem.&lt;/p&gt;

&lt;p&gt;Remember these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Liquid clustering&lt;/strong&gt; improves data layout for query filtering.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Liquid clustering&lt;/strong&gt; is preferred for growing Delta tables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Liquid clustering&lt;/strong&gt; helps avoid over-partitioning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deletion vectors&lt;/strong&gt; optimize row-level updates, deletes, and merges.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Frequent compliance deletes point to deletion vectors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Range filters on a large timestamp-based table point to liquid clustering.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not choose fixed partitions just because the table is large.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not partition by a column that does not match the query filter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the question mentions both query filters and frequent deletes, use both liquid clustering and deletion vectors.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can separate &lt;strong&gt;query layout optimization&lt;/strong&gt; from &lt;strong&gt;row-level modification optimization&lt;/strong&gt;, these DP-750 questions become much easier.&lt;/p&gt;


&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>databricks</category>
      <category>certification</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>DP-750: Delta Lake Table Operations Explained and with Real Exam Questions</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Wed, 05 Aug 2026 04:59:56 +0000</pubDate>
      <link>https://dev.to/luca1iu/dp-750-delta-lake-table-operations-explained-and-with-real-exam-questions-4egk</link>
      <guid>https://dev.to/luca1iu/dp-750-delta-lake-table-operations-explained-and-with-real-exam-questions-4egk</guid>
      <description>&lt;p&gt;When preparing for &lt;strong&gt;DP-750: Microsoft Certified: Azure Databricks Data Engineer Associate&lt;/strong&gt;, you need to understand common Delta Lake and Spark table operations.&lt;/p&gt;

&lt;p&gt;This article focuses on operations that appear frequently in DP-750 questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;INSERT INTO&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;INSERT OVERWRITE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;table constraints&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NOT NULL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CHECK&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;INTERSECT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;append writes&lt;/li&gt;
&lt;li&gt;PySpark null filtering&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dropna&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fillna&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The related questions in your DP-750 question bank are Q40, Q41, Q42, Q45, Q49–52, and Q53.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why table operations matter in DP-750
&lt;/h2&gt;

&lt;p&gt;Many DP-750 questions are not about advanced Spark optimization. They test whether you understand the basic behavior of table operations.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;table2&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;table1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This preserves existing rows and adds new rows.&lt;/p&gt;

&lt;p&gt;But:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="n"&gt;OVERWRITE&lt;/span&gt; &lt;span class="n"&gt;table2&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;table1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;replaces existing data.&lt;/p&gt;

&lt;p&gt;Similarly, in PySpark:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dropna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order_amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;removes rows where &lt;code&gt;order_amount&lt;/code&gt; is null, while:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fillna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order_amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;does not remove rows. It replaces null values with &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;These details are simple, but they are very common exam traps.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. &lt;code&gt;INSERT INTO&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;INSERT INTO&lt;/code&gt; inserts new rows into a table. Azure Databricks documentation describes &lt;code&gt;INSERT&lt;/code&gt; as a statement that inserts new rows into a table, using either value expressions or the result of a query.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table2&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This means:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Take rows from table1 and append them to table2.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; delete existing rows from &lt;code&gt;table2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;INSERT INTO&lt;/code&gt; when the requirement says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;preserve existing data&lt;/li&gt;
&lt;li&gt;add new rows&lt;/li&gt;
&lt;li&gt;append new records&lt;/li&gt;
&lt;li&gt;load current-year data into historical table&lt;/li&gt;
&lt;li&gt;daily file contains new records only&lt;/li&gt;
&lt;li&gt;minimize processing effort&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Preserve existing data + add new rows = &lt;code&gt;INSERT INTO&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. &lt;code&gt;INSERT OVERWRITE&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;INSERT OVERWRITE&lt;/code&gt; replaces existing data in the target table or partition.&lt;/p&gt;

&lt;p&gt;This is different from &lt;code&gt;INSERT INTO&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="n"&gt;OVERWRITE&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table2&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This means:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Replace the existing data in table2 with the query result.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In DP-750, if the question says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Preserve any existing data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then &lt;code&gt;INSERT OVERWRITE&lt;/code&gt; is usually wrong.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;INSERT OVERWRITE&lt;/code&gt; only when the requirement is to replace existing data.&lt;/p&gt;


&lt;h2&gt;
  
  
  4. &lt;code&gt;CREATE TABLE AS SELECT&lt;/code&gt; vs &lt;code&gt;CREATE OR REPLACE TABLE AS SELECT&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;These commands are also common traps.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table2&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;creates a new table from query results.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table2&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;creates a table or replaces the existing table.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Correct pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Add rows to an existing table&lt;/td&gt;
&lt;td&gt;&lt;code&gt;INSERT INTO&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replace existing table definition and data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CREATE OR REPLACE TABLE AS SELECT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create a new table from query result&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CREATE TABLE AS SELECT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preserve existing data&lt;/td&gt;
&lt;td&gt;Avoid &lt;code&gt;INSERT OVERWRITE&lt;/code&gt; and &lt;code&gt;CREATE OR REPLACE&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If the target table already exists and you need to preserve existing data, &lt;code&gt;INSERT INTO&lt;/code&gt; is the safest answer.&lt;/p&gt;


&lt;h2&gt;
  
  
  5. Table constraints
&lt;/h2&gt;

&lt;p&gt;Azure Databricks supports table constraints for data quality. Microsoft documentation says constraints can define and enforce data quality rules, including &lt;code&gt;NOT NULL&lt;/code&gt; and &lt;code&gt;CHECK&lt;/code&gt; constraints. &lt;code&gt;NOT NULL&lt;/code&gt; means values in specific columns cannot be null, and &lt;code&gt;CHECK&lt;/code&gt; means a specified Boolean expression must be true for each row.&lt;/p&gt;

&lt;p&gt;Common examples:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;transaction_id&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CHECK&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use constraints when the requirement says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;table-level data quality enforcement&lt;/li&gt;
&lt;li&gt;invalid records must be rejected during writes&lt;/li&gt;
&lt;li&gt;a column must never be null&lt;/li&gt;
&lt;li&gt;a numeric value must be greater than zero&lt;/li&gt;
&lt;li&gt;enforce the rule when data is written&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reject invalid records at table write time = table constraints&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. &lt;code&gt;NOT NULL&lt;/code&gt; constraint
&lt;/h2&gt;

&lt;p&gt;A &lt;code&gt;NOT NULL&lt;/code&gt; constraint prevents a column from containing null values.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;Sales&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;transaction_id&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;transaction_date&lt;/span&gt; &lt;span class="nb"&gt;DATE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="nb"&gt;DECIMAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If a write tries to insert a row where &lt;code&gt;transaction_id&lt;/code&gt; is null, the write fails.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;transaction_id must never be null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;means:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add a NOT NULL constraint to transaction_id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. &lt;code&gt;CHECK&lt;/code&gt; constraint
&lt;/h2&gt;

&lt;p&gt;A &lt;code&gt;CHECK&lt;/code&gt; constraint requires a Boolean expression to be true.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;Sales&lt;/span&gt;
&lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="k"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="n"&gt;valid_amount&lt;/span&gt; &lt;span class="k"&gt;CHECK&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If a write tries to insert a row where &lt;code&gt;amount &amp;lt;= 0&lt;/code&gt;, the write fails.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;amount must be greater than 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;means:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add a CHECK constraint to amount
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Do not use a view or a &lt;code&gt;WHERE&lt;/code&gt; clause if the requirement is to reject invalid records during table writes. A view only changes what users see when querying. It does not enforce the rule at write time.&lt;/p&gt;


&lt;h2&gt;
  
  
  8. &lt;code&gt;INTERSECT&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;INTERSECT&lt;/code&gt; returns rows that appear in both query results. Azure Databricks documentation describes &lt;code&gt;INTERSECT&lt;/code&gt; as one of the supported set operators used to combine query results. Both subqueries must have the same number of columns and compatible types.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;Column1&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Table1&lt;/span&gt;
&lt;span class="k"&gt;INTERSECT&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;Column2&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Table2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This returns values that appear in both result sets.&lt;/p&gt;

&lt;p&gt;Now look at this pattern:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;Column1&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Table1&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;Column1&lt;/span&gt;
&lt;span class="k"&gt;HAVING&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="k"&gt;INTERSECT&lt;/span&gt;

&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;Column2&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Table2&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;Column2&lt;/span&gt;
&lt;span class="k"&gt;HAVING&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The first query returns values that appear more than once in &lt;code&gt;Table1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The second query returns values that appear more than once in &lt;code&gt;Table2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;INTERSECT&lt;/code&gt; returns only values that appear in both results.&lt;/p&gt;

&lt;p&gt;So the final result is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Values that appear more than once in both tables.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. PySpark null filtering
&lt;/h2&gt;

&lt;p&gt;In PySpark, null handling is a common exam trap.&lt;/p&gt;

&lt;p&gt;To keep only rows where a column is not null, use:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_amount&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isNotNull&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Spark documentation says &lt;code&gt;Column.isNotNull()&lt;/code&gt; returns true if the current expression is not null.&lt;/p&gt;

&lt;p&gt;You can also use:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dropna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order_amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Spark documentation says &lt;code&gt;DataFrame.dropna()&lt;/code&gt; returns a new DataFrame omitting rows with null or NaN values.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Exclude rows where &lt;code&gt;order_amount&lt;/code&gt; is null = &lt;code&gt;isNotNull()&lt;/code&gt; or &lt;code&gt;dropna(subset=[...])&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  10. &lt;code&gt;fillna&lt;/code&gt; does not remove rows
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;fillna&lt;/code&gt; replaces null values. It does not remove rows.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fillna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order_amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If a row has:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;order_amount = null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then after &lt;code&gt;fillna&lt;/code&gt;, it becomes:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;order_amount = 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Spark documentation says &lt;code&gt;DataFrame.fillna()&lt;/code&gt; returns a new DataFrame where null values are filled with a new value.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Requirement: exclude rows where &lt;code&gt;order_amount&lt;/code&gt; is null&lt;br&gt;&lt;br&gt;
&lt;code&gt;fillna(0)&lt;/code&gt; = wrong&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because replacing null with &lt;code&gt;0&lt;/code&gt; is not the same as excluding the row.&lt;/p&gt;


&lt;h2&gt;
  
  
  11. Why &lt;code&gt;df.order_amount != None&lt;/code&gt; is wrong
&lt;/h2&gt;

&lt;p&gt;This is another common Spark trap.&lt;/p&gt;

&lt;p&gt;In normal Python, you might write:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;But Spark DataFrame columns are not normal Python values. They are distributed column expressions. Null comparison in Spark SQL follows SQL null semantics, and comparisons with null do not behave like normal Boolean comparisons.&lt;/p&gt;

&lt;p&gt;So this expression is not the correct exam answer:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_amount&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_amount&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isNotNull&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dropna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order_amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Null filtering in Spark = use &lt;code&gt;isNotNull()&lt;/code&gt; or &lt;code&gt;dropna()&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  12. Writing DataFrames to Delta
&lt;/h2&gt;

&lt;p&gt;A common PySpark write pattern is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delta&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;append&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This means:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.format("delta")&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Write data in Delta format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.mode("append")&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Add rows to existing data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.save(path)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Save to the target path&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For DP-750, if the source is CSV and the target is an existing Delta table or Delta path, the pattern is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delta&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;append&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use append when the requirement says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;each new CSV file must be added&lt;/li&gt;
&lt;li&gt;existing Delta table must be preserved&lt;/li&gt;
&lt;li&gt;new rows only&lt;/li&gt;
&lt;li&gt;no updates to existing rows&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  13. Append vs overwrite
&lt;/h2&gt;

&lt;p&gt;This is the same idea as &lt;code&gt;INSERT INTO&lt;/code&gt; vs &lt;code&gt;INSERT OVERWRITE&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SQL&lt;/th&gt;
&lt;th&gt;PySpark write mode&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;INSERT INTO&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.mode("append")&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Add new rows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;INSERT OVERWRITE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.mode("overwrite")&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Replace existing data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For DP-750:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Preserve existing data = append
Replace existing data = overwrite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  14. DP-750 decision table for table operations
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario in the question&lt;/th&gt;
&lt;th&gt;Best answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Preserve existing data and add rows&lt;/td&gt;
&lt;td&gt;&lt;code&gt;INSERT INTO&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Daily file contains new records only&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;INSERT INTO&lt;/code&gt; or append mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replace existing data&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;INSERT OVERWRITE&lt;/code&gt; or overwrite mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create a new table from query result&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CREATE TABLE AS SELECT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recreate existing table from query result&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CREATE OR REPLACE TABLE AS SELECT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;transaction_id&lt;/code&gt; must never be null&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;NOT NULL&lt;/code&gt; constraint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;amount&lt;/code&gt; must be greater than 0&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;CHECK&lt;/code&gt; constraint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invalid records must be rejected on write&lt;/td&gt;
&lt;td&gt;Table constraints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Values appear more than once in both tables&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;GROUP BY&lt;/code&gt; + &lt;code&gt;HAVING COUNT(*) &amp;gt; 1&lt;/code&gt; + &lt;code&gt;INTERSECT&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exclude rows where column is null&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;isNotNull()&lt;/code&gt; or &lt;code&gt;dropna(subset=[...])&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replace nulls with zero&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fillna(0)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add new CSV data to Delta path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.format("delta").mode("append")&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Real Exam Questions
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Question 40
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a managed Delta table named Sales. Sales stores transaction data and contains the following columns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;transaction_id, string&lt;/li&gt;
&lt;li&gt;transaction_date, date&lt;/li&gt;
&lt;li&gt;amount, decimal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You need to implement the following data quality requirements by using table-level data quality enforcement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;amount must be greater than 0.&lt;/li&gt;
&lt;li&gt;transaction_id must never be null.&lt;/li&gt;
&lt;li&gt;Invalid records must be rejected when data is written to the Sales table.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;p&gt;A. Use a SELECT statement with WHERE conditions to validate the data before querying.&lt;/p&gt;

&lt;p&gt;B. Create a view that filters out rows where transaction_id is null or amount is less than or equal to 0.&lt;/p&gt;

&lt;p&gt;C. Add a NOT NULL constraint to transaction_id and a CHECK constraint to amount. ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;D. Configure row-level security, RLS, where transaction_id is null or amount is less than or equal to 0.&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 41
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains two Delta tables named Table1 and Table2 of the same data type.&lt;/p&gt;

&lt;p&gt;Table1 contains a column named Column1. Table2 contains a column named Column2.&lt;/p&gt;

&lt;p&gt;You run the following query.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;Column1&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Table1&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;Column1&lt;/span&gt;
&lt;span class="k"&gt;HAVING&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="k"&gt;INTERSECT&lt;/span&gt;

&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;Column2&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Table2&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;Column2&lt;/span&gt;
&lt;span class="k"&gt;HAVING&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;What occurs when you run the query?&lt;/p&gt;

&lt;p&gt;A. Values appear in both tables more than once. ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;B. Values appear in either table more than once.&lt;/p&gt;

&lt;p&gt;C. Values appear in Table2 but NOT Table1.&lt;/p&gt;

&lt;p&gt;D. Values appear in Table1 more than once.&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 42
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains two managed Delta tables named &lt;code&gt;sales.schema1.table1&lt;/code&gt; and &lt;code&gt;sales.schema1.table2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sales.schema1.table1&lt;/code&gt; contains sales data from the current year. &lt;code&gt;sales.schema1.table2&lt;/code&gt; contains historical data.&lt;/p&gt;

&lt;p&gt;You need to load all the rows from &lt;code&gt;sales.schema1.table1&lt;/code&gt; into &lt;code&gt;sales.schema1.table2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The solution must preserve any existing data in &lt;code&gt;sales.schema1.table2&lt;/code&gt; and minimize processing effort.&lt;/p&gt;

&lt;p&gt;Which command should you run?&lt;/p&gt;

&lt;p&gt;A. &lt;code&gt;INSERT OVERWRITE sales.schema1.table2 SELECT * FROM sales.schema1.table1;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;B. &lt;code&gt;CREATE TABLE sales.schema1.table2 AS SELECT * FROM sales.schema1.table1;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;C. &lt;code&gt;INSERT INTO sales.schema1.table2 SELECT * FROM sales.schema1.table1;&lt;/code&gt; ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;D. &lt;code&gt;CREATE OR REPLACE TABLE sales.schema1.table2 AS SELECT * FROM sales.schema1.table1;&lt;/code&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 45
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a Delta table named &lt;code&gt;Sales_orders&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Sales_orders&lt;/code&gt; stores historical sales data.&lt;/p&gt;

&lt;p&gt;You receive a daily CSV file daily that contains new sales records only. The file does NOT contain updates to existing rows.&lt;/p&gt;

&lt;p&gt;You need to load the daily data into &lt;code&gt;Sales_orders&lt;/code&gt;. The solution must meet the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Preserve the existing data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add only the new records.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Minimize processing effort.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which command should include in the loading strategy?&lt;/p&gt;

&lt;p&gt;A. UPDATE&lt;/p&gt;

&lt;p&gt;B. INSERT OVERWRITE&lt;/p&gt;

&lt;p&gt;C. INSERT INTO ✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 49
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a Delta table named Orders.&lt;/p&gt;

&lt;p&gt;You load the Orders table into an Apache Spark DataFrame named &lt;code&gt;df&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You need to create a DataFrame that excludes rows where the order amount is null.&lt;/p&gt;

&lt;p&gt;Solution: You run the following expression.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fillna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order_amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Does this meet the goal?&lt;/p&gt;

&lt;p&gt;A. Yes&lt;/p&gt;

&lt;p&gt;B. No ✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 50
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a Delta table named Orders.&lt;/p&gt;

&lt;p&gt;You load the Orders table into an Apache Spark DataFrame named &lt;code&gt;df&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You need to create a DataFrame that excludes rows where the order amount is null.&lt;/p&gt;

&lt;p&gt;Solution: You run the following expression.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_amount&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isNotNull&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Does this meet the goal?&lt;/p&gt;

&lt;p&gt;A. Yes ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;B. No&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 51
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a Delta table named Orders.&lt;/p&gt;

&lt;p&gt;You load the Orders table into an Apache Spark DataFrame named &lt;code&gt;df&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You need to create a DataFrame that excludes rows where the order amount is null.&lt;/p&gt;

&lt;p&gt;Solution: You run the following expression.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dropna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order_amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Does this meet the goal?&lt;/p&gt;

&lt;p&gt;A. Yes ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;B. No&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 52
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a Delta table named Orders.&lt;/p&gt;

&lt;p&gt;You load the Orders table into an Apache Spark DataFrame named &lt;code&gt;df&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You need to create a DataFrame that excludes rows where the order amount is null.&lt;/p&gt;

&lt;p&gt;Solution: You run the following expression.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_amount&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Does this meet the goal?&lt;/p&gt;

&lt;p&gt;A. Yes&lt;/p&gt;

&lt;p&gt;B. No ✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 53
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace.&lt;/p&gt;

&lt;p&gt;You have an Azure Data Lake Storage Gen2 account named account1.&lt;/p&gt;

&lt;p&gt;You need to use a Databricks notebook to read CSV files from account1. The data from each new CSV file must be added to an existing Delta table named customer.&lt;/p&gt;

&lt;p&gt;How should you complete the PySpark code segment?&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;basePath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;abfss://data@storage1.dfs.core.windows.net/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;header&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;basePath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delta&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;append&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;basePath&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delta/customers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;✅ Correct Answer&lt;/p&gt;


&lt;h1&gt;
  
  
  Key takeaways
&lt;/h1&gt;

&lt;p&gt;For DP-750, Delta Lake table operation questions usually test basic but important behavior.&lt;/p&gt;

&lt;p&gt;Remember these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;INSERT INTO&lt;/code&gt; adds rows and preserves existing data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;INSERT OVERWRITE&lt;/code&gt; replaces existing data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;.mode("append")&lt;/code&gt; adds data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;.mode("overwrite")&lt;/code&gt; replaces data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;NOT NULL&lt;/code&gt; prevents null values in a column.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;CHECK&lt;/code&gt; enforces a Boolean condition such as &lt;code&gt;amount &amp;gt; 0&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Views and &lt;code&gt;WHERE&lt;/code&gt; clauses do not enforce table-level write rules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;INTERSECT&lt;/code&gt; returns values that appear in both query results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;fillna()&lt;/code&gt; replaces nulls; it does not remove rows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;isNotNull()&lt;/code&gt; keeps only non-null rows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;dropna(subset=[...])&lt;/code&gt; removes rows with nulls in the specified column.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;df.order_amount != None&lt;/code&gt; is not the correct Spark null-filtering pattern.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you understand the difference between &lt;strong&gt;append vs overwrite&lt;/strong&gt;, &lt;strong&gt;query filtering vs write enforcement&lt;/strong&gt;, and &lt;strong&gt;null replacement vs null exclusion&lt;/strong&gt;, these DP-750 table operation questions become much easier.&lt;/p&gt;


&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>databricks</category>
      <category>certification</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>DP-750: Structured Streaming, Checkpointing, Schema Evolution, and Change Data Feed Explained and with Real Exam Questions</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Tue, 04 Aug 2026 04:59:55 +0000</pubDate>
      <link>https://dev.to/luca1iu/dp-750-structured-streaming-checkpointing-schema-evolution-and-change-data-feed-explained-and-3omd</link>
      <guid>https://dev.to/luca1iu/dp-750-structured-streaming-checkpointing-schema-evolution-and-change-data-feed-explained-and-3omd</guid>
      <description>&lt;p&gt;When preparing for &lt;strong&gt;DP-750: Microsoft Certified: Azure Databricks Data Engineer Associate&lt;/strong&gt;, you need to understand how Azure Databricks handles streaming and incremental data processing.&lt;/p&gt;

&lt;p&gt;This topic includes several important concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apache Spark Structured Streaming&lt;/li&gt;
&lt;li&gt;checkpointing&lt;/li&gt;
&lt;li&gt;exactly-once processing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;availableNow&lt;/code&gt; trigger&lt;/li&gt;
&lt;li&gt;schema drift and schema evolution&lt;/li&gt;
&lt;li&gt;Auto Loader schema evolution modes&lt;/li&gt;
&lt;li&gt;Delta table streaming reads and writes&lt;/li&gt;
&lt;li&gt;Change Data Feed, CDF&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The related questions in your DP-750 question bank are Q8, Q43, Q47, Q48, Q54, Q59, and Q71.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. What is Structured Streaming?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Apache Spark Structured Streaming&lt;/strong&gt; is Spark’s stream processing engine. In Azure Databricks, it is commonly used to process data continuously or incrementally from sources such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cloud storage files&lt;/li&gt;
&lt;li&gt;Delta tables&lt;/li&gt;
&lt;li&gt;Event Hubs&lt;/li&gt;
&lt;li&gt;Kafka&lt;/li&gt;
&lt;li&gt;Auto Loader&lt;/li&gt;
&lt;li&gt;streaming tables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In DP-750, Structured Streaming often appears in questions about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;avoiding duplicate processing after failure&lt;/li&gt;
&lt;li&gt;writing to Delta tables&lt;/li&gt;
&lt;li&gt;checkpoint locations&lt;/li&gt;
&lt;li&gt;schema changes&lt;/li&gt;
&lt;li&gt;Event Hubs ingestion&lt;/li&gt;
&lt;li&gt;streaming recovery&lt;/li&gt;
&lt;li&gt;change data capture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For exam purposes, the most important idea is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Structured Streaming needs checkpointing to remember progress and recover after failures.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. What is checkpointing?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;checkpoint&lt;/strong&gt; stores streaming query progress and metadata.&lt;/p&gt;

&lt;p&gt;For example, if a streaming job has already processed files or events, the checkpoint helps the job remember what has already been processed.&lt;/p&gt;

&lt;p&gt;A checkpoint location is usually configured like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;checkpointLocation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;checkpoint_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Azure Databricks documentation states that &lt;code&gt;checkpointLocation&lt;/code&gt; is required for fault tolerance and exactly-once processing guarantees, and each streaming query must use a unique checkpoint location.&lt;/p&gt;

&lt;p&gt;For DP-750, the key pattern is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Streaming job reprocesses old data after restart = missing or wrong checkpoint location.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So if the question says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;After the cluster restarts, the streaming job reprocesses previously ingested data.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;the answer is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Configure a checkpoint location for the streaming query.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Exactly-once processing
&lt;/h2&gt;

&lt;p&gt;Exactly-once processing means each record is processed into the target exactly once, even if there is a failure and restart.&lt;/p&gt;

&lt;p&gt;In Databricks, exactly-once behavior is usually achieved through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured Streaming&lt;/li&gt;
&lt;li&gt;checkpointing&lt;/li&gt;
&lt;li&gt;Delta Lake transaction log&lt;/li&gt;
&lt;li&gt;idempotent writes&lt;/li&gt;
&lt;li&gt;unique checkpoint location per query&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Databricks documentation says Delta Lake is deeply integrated with Structured Streaming and that the Delta transaction log guarantees exactly-once processing when writing data into a Delta table using Structured Streaming.&lt;/p&gt;

&lt;p&gt;For DP-750, remember:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Streaming + Delta target + checkpointLocation = fault tolerance / no reprocessing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Checkpoint location vs schema location
&lt;/h2&gt;

&lt;p&gt;When using &lt;strong&gt;Auto Loader&lt;/strong&gt;, you often see both:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cloudFiles.schemaLocation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/cloud/schema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;checkpointLocation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/data/checkpoint&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;They are not the same thing.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;checkpointLocation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stores streaming progress and state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cloudFiles.schemaLocation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stores inferred schema information for Auto Loader&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Auto Loader documentation says specifying &lt;code&gt;cloudFiles.schemaLocation&lt;/code&gt; enables schema inference and evolution. The same directory can be used for &lt;code&gt;checkpointLocation&lt;/code&gt;, but the two options serve different purposes.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If the issue is &lt;strong&gt;reprocessing after restart&lt;/strong&gt;, choose &lt;code&gt;checkpointLocation&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the issue is &lt;strong&gt;schema inference or schema evolution&lt;/strong&gt;, choose &lt;code&gt;cloudFiles.schemaLocation&lt;/code&gt; or schema evolution settings.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  5. Schema drift and schema evolution
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Schema drift&lt;/strong&gt; means the source data structure changes over time.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sensor_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"S001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"temperature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;21.5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Later, the source sends a new column:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sensor_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"S001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"temperature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;21.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"humidity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If the pipeline cannot handle the new column, it may fail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schema evolution&lt;/strong&gt; allows the target schema to evolve when new columns appear.&lt;/p&gt;

&lt;p&gt;Databricks documentation says Auto Loader supports column changes and type widening, and schema evolution can be configured with &lt;code&gt;cloudFiles.schemaEvolutionMode&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;New columns are added to the source and pipeline writes fail = enable schema evolution.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Do not choose row filters. Row filters control which rows users can see; they do not solve schema drift.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. &lt;code&gt;mergeSchema&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;When writing to Delta, &lt;code&gt;mergeSchema&lt;/code&gt; allows additive schema changes, such as adding new columns.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mergeSchema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is commonly used when incoming data may contain new columns that should be added to the target Delta table.&lt;/p&gt;

&lt;p&gt;In the DP-750 question bank, Q43 uses:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mergeSchema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This means new columns from incoming JSON payloads can be added automatically to the target Delta table.&lt;/p&gt;


&lt;h2&gt;
  
  
  7. Auto Loader schema evolution mode: &lt;code&gt;failOnNewColumns&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Auto Loader has several schema evolution modes.&lt;/p&gt;

&lt;p&gt;One of them is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cloudFiles.schemaEvolutionMode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failOnNewColumns&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This mode can be confusing.&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;failOnNewColumns&lt;/code&gt;, when Auto Loader detects new columns, the stream fails so that the schema can evolve. After restart, the evolved schema is used. Databricks documentation describes this pattern: new columns fail the stream and evolve the schema, and the stream can then be restarted with the updated inferred schema.&lt;/p&gt;

&lt;p&gt;For DP-750, if a question asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When a new element is found in the source data, will the element be written successfully?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and the code uses:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cloudFiles.schemaEvolutionMode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failOnNewColumns&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then the answer is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Because the stream fails when it detects the new column.&lt;/p&gt;


&lt;h2&gt;
  
  
  8. &lt;code&gt;availableNow&lt;/code&gt; trigger
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;availableNow&lt;/code&gt; trigger processes all available data as an incremental batch and then stops.&lt;/p&gt;

&lt;p&gt;It is useful when you want streaming-style incremental processing without keeping the stream running forever.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;availableNow&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, &lt;code&gt;availableNow&lt;/code&gt; is commonly used with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto Loader&lt;/li&gt;
&lt;li&gt;file ingestion&lt;/li&gt;
&lt;li&gt;incremental batch processing&lt;/li&gt;
&lt;li&gt;structured streaming jobs that should process currently available data and then stop&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the exam, if the code uses:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;availableNow&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;outputMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;append&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then it does not mean each batch overwrites the target table. With &lt;code&gt;append&lt;/code&gt; mode, new records are appended.&lt;/p&gt;


&lt;h2&gt;
  
  
  9. Delta table as streaming target
&lt;/h2&gt;

&lt;p&gt;A common Structured Streaming write pattern is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writeStream&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delta&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;checkpointLocation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;checkpoint_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mergeSchema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;availableNow&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_events&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, remember:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Code option&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Write to Delta table&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.format("delta")&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resume after failure without reprocessing&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.option("checkpointLocation", checkpoint_path)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add new columns automatically&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.option("mergeSchema", "true")&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Process available data and stop&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.trigger(availableNow=True)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  10. Change Data Feed, CDF
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Change Data Feed&lt;/strong&gt;, or &lt;strong&gt;CDF&lt;/strong&gt;, lets you track row-level changes from a Delta table.&lt;/p&gt;

&lt;p&gt;It is useful when downstream pipelines need to consume:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inserts&lt;/li&gt;
&lt;li&gt;updates&lt;/li&gt;
&lt;li&gt;deletes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Databricks documentation describes Change Data Feed as a feature used to track row-level changes for Delta Lake and Apache Iceberg v3 tables.&lt;/p&gt;

&lt;p&gt;A streaming read from a Delta table’s change feed can look like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readStream&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delta&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;readChangeFeed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;db1.sales_orders&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, if the requirement says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ingest all changes from a Delta table, including inserts, updates, and deletes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then the key option is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;readChangeFeed = true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  11. &lt;code&gt;skipChangeCommits&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;When streaming from Delta tables, some options control how to handle source table updates and deletes.&lt;/p&gt;

&lt;p&gt;One important option is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;skipChangeCommits&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;false&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For the DP-750 question in your bank, the correct dropdown combination is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;readChangeFeed = true
skipChangeCommits = false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This means the stream reads the change feed rather than skipping commits that contain changes.&lt;/p&gt;

&lt;p&gt;For exam purposes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Read CDF changes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;readChangeFeed&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Do not skip change commits&lt;/td&gt;
&lt;td&gt;&lt;code&gt;skipChangeCommits = false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  12. Checkpointing vs watermarking vs CDF
&lt;/h2&gt;

&lt;p&gt;These options solve different problems.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;What it solves&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Checkpointing&lt;/td&gt;
&lt;td&gt;Recovery and progress tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Watermarking&lt;/td&gt;
&lt;td&gt;Late data handling in stateful aggregations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change Data Feed&lt;/td&gt;
&lt;td&gt;Read inserts, updates, and deletes from Delta table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trigger interval&lt;/td&gt;
&lt;td&gt;How often micro-batches run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema evolution&lt;/td&gt;
&lt;td&gt;Handles new columns or schema changes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Reprocessing after restart → checkpointing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New columns causing failure → schema evolution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Need inserts, updates, deletes → CDF&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Late arriving event-time data → watermarking&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  13. DP-750 decision table for streaming
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario in the question&lt;/th&gt;
&lt;th&gt;Best answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Streaming job reprocesses data after restart&lt;/td&gt;
&lt;td&gt;Configure checkpoint location&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Job must resume from failure point&lt;/td&gt;
&lt;td&gt;Implement checkpointing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need exactly-once write to Delta&lt;/td&gt;
&lt;td&gt;Structured Streaming + Delta + checkpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New source columns cause write failure&lt;/td&gt;
&lt;td&gt;Enable schema evolution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto Loader code uses &lt;code&gt;failOnNewColumns&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;New column fails the stream initially&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code uses &lt;code&gt;mergeSchema=true&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;New columns can be added to target&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code uses &lt;code&gt;outputMode("append")&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;New data is appended, not overwritten&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need to ingest inserts, updates, deletes from Delta&lt;/td&gt;
&lt;td&gt;Read Change Data Feed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CDF streaming option&lt;/td&gt;
&lt;td&gt;&lt;code&gt;readChangeFeed = true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write stream to Delta&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.format("delta")&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure recovery option&lt;/td&gt;
&lt;td&gt;&lt;code&gt;checkpointLocation&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Process available data then stop&lt;/td&gt;
&lt;td&gt;&lt;code&gt;availableNow=True&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Real Exam Questions
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Question 8
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You have an Apache Spark Structured Streaming job that writes data to a Delta table.&lt;/p&gt;

&lt;p&gt;After the cluster restarts, the streaming job reprocesses previously ingested data.&lt;/p&gt;

&lt;p&gt;You need to prevent the streaming job from reprocessing the data after the cluster restarts.&lt;/p&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;p&gt;A. Configure a checkpoint location for the streaming query. ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;B. Increase the trigger interval of the streaming query.&lt;/p&gt;

&lt;p&gt;C. Enable change data feed, CDF, for the target table.&lt;/p&gt;

&lt;p&gt;D. Configure a watermark for the streaming query.&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 43
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You plan to run the following PySpark code.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writeStream&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delta&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;checkpointLocation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CHECKPOINT_LOCATION&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;outputMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;append&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mergeSchema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;availableNow&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BRONZE_TABLE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For each of the following statements, select Yes if the statement is true. Otherwise, select No.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Statement&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;New columns from incoming JSON payload will be added automatically to the target Delta table.&lt;/td&gt;
&lt;td&gt;Yes ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Previously processed data will not be reprocessed if the pipeline fails.&lt;/td&gt;
&lt;td&gt;Yes ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Each new batch of telemetry data will overwrite the existing data in the target Delta table.&lt;/td&gt;
&lt;td&gt;No ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 47
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a Delta table named &lt;code&gt;db1.sales_orders&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;db1.sales_orders&lt;/code&gt; is updated nightly and has change data feed, CDF, enabled.&lt;/p&gt;

&lt;p&gt;You need to ingest all the changes from the &lt;code&gt;db1.sales_orders&lt;/code&gt; table, including inserts, updates, and deletes, into a downstream pipeline.&lt;/p&gt;

&lt;p&gt;How should you complete the PySpark code segment?&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readStream&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delta&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;______&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;______&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;false&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;db1.sales_orders&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;First dropdown&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;"readChangeFeed"&lt;/code&gt; ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second dropdown&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;"skipChangeCommits"&lt;/code&gt; ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 48
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that uses Unity Catalog.&lt;/p&gt;

&lt;p&gt;You have a Lakeflow Spark Declarative Pipelines, SDP, pipeline that ingests data into a managed Delta table named Table1. Table1 is used for analytics.&lt;/p&gt;

&lt;p&gt;New columns are added to the source data, causing pipeline failures during writes to Table1.&lt;/p&gt;

&lt;p&gt;You need to prevent the pipeline failures. The solution must ensure that schema changes are detected and handled.&lt;/p&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;p&gt;A. Disable schema enforcement for Table1.&lt;/p&gt;

&lt;p&gt;B. Use row filters to exclude records that have new columns.&lt;/p&gt;

&lt;p&gt;C. Enable schema evolution. ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;D. Create a separate table for each schema version.&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 54
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You plan to run the following PySpark code.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readStream&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cloudFiles&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cloudFiles.format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cloudFiles.schemaLocation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/cloud/schema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cloudFiles.schemaEvolutionMode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failOnNewColumns&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/data/source&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writeStream&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;checkpointLocation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/data/checkpoint&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;table1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For each of the following statements, select Yes if the statement is true. Otherwise, select No.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Statement&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;When a new element is found in the source data, the element will be written to table1 successfully.&lt;/td&gt;
&lt;td&gt;No ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The streaming process will resume from a failure without data loss.&lt;/td&gt;
&lt;td&gt;Yes ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data will be written to a JSON file.&lt;/td&gt;
&lt;td&gt;No ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 59
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Useful case information
&lt;/h3&gt;

&lt;p&gt;Contoso identifies the following data ingestion and processing requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Handle schema drift for the maintenance and telemetry data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Store all the ingested data in a format that supports incremental processing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support the continuous ingestion of telemetry data from the event hubs by using exactly-once semantics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure that the Apache Spark Structured Streaming pipelines reading from the event hubs write the data into a managed Delta table named &lt;code&gt;telemetry.raw_events&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The pipelines must support schema drift and resume processing after failures without reprocessing the data.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You need to complete the PySpark code for the Spark Structured Streaming pipelines. The solution must meet the data ingestion and processing requirements.&lt;/p&gt;

&lt;p&gt;How should you complete the code segment?&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;telemetry_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;abfss://telemetry@contosodata.dfs.core.windows.net/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;checkpoint_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;abfss://telemetry@contosodata.dfs.core.windows.net/checkpoints/raw_events&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;raw_events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;analytics.telemetry.raw_events&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readStream&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;telemetry_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writeStream&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;______&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;______&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mergeSchema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;availableNow&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_events&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;First dropdown&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;"delta"&lt;/code&gt; ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second dropdown&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;("checkpointLocation", checkpoint_path)&lt;/code&gt; ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 71
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace.&lt;/p&gt;

&lt;p&gt;You have an Apache Spark Structured Streaming job named Job1 that processes data continuously and fails periodically due to transient errors.&lt;/p&gt;

&lt;p&gt;You need to ensure that Job1 meets the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Resumes processing from the point that Job1 failed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Minimizes how long it takes to restart Job1&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Minimizes the costs to restart Job1&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;p&gt;A. Decrease the retry interval.&lt;/p&gt;

&lt;p&gt;B. Increase the minimum number of nodes in the cluster.&lt;/p&gt;

&lt;p&gt;C. Add an alert and manually restart Job1.&lt;/p&gt;

&lt;p&gt;D. Implement checkpointing. ✅ Correct Answer&lt;/p&gt;


&lt;h1&gt;
  
  
  Key takeaways
&lt;/h1&gt;

&lt;p&gt;For DP-750, Structured Streaming questions are usually about &lt;strong&gt;recovery&lt;/strong&gt;, &lt;strong&gt;incremental processing&lt;/strong&gt;, and &lt;strong&gt;schema changes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Remember these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Checkpointing&lt;/strong&gt; prevents reprocessing after restart.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;checkpointLocation&lt;/code&gt; is required for fault tolerance and exactly-once guarantees.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Each streaming query should use a unique checkpoint location.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Delta tables&lt;/strong&gt; are the normal target for reliable streaming writes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;mergeSchema=true&lt;/code&gt; allows new incoming columns to be added.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Schema evolution&lt;/strong&gt; handles new source columns.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;failOnNewColumns&lt;/code&gt; causes the stream to fail when new columns appear, so the schema can evolve.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;availableNow=True&lt;/code&gt; processes available data and then stops.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;outputMode("append")&lt;/code&gt; appends data; it does not overwrite existing records.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Change Data Feed&lt;/strong&gt; is used to ingest inserts, updates, and deletes from a Delta table.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For CDF streaming reads, use &lt;code&gt;readChangeFeed=true&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can identify whether the issue is &lt;strong&gt;failure recovery&lt;/strong&gt;, &lt;strong&gt;schema drift&lt;/strong&gt;, &lt;strong&gt;Delta change capture&lt;/strong&gt;, or &lt;strong&gt;output behavior&lt;/strong&gt;, you can usually choose the correct DP-750 streaming answer quickly.&lt;/p&gt;


&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>databricks</category>
      <category>certification</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>DP-750: Data Ingestion Patterns Explained and with Real Exam Questions</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Mon, 03 Aug 2026 06:59:56 +0000</pubDate>
      <link>https://dev.to/luca1iu/dp-750-data-ingestion-patterns-explained-and-with-real-exam-questions-111k</link>
      <guid>https://dev.to/luca1iu/dp-750-data-ingestion-patterns-explained-and-with-real-exam-questions-111k</guid>
      <description>&lt;p&gt;When preparing for &lt;strong&gt;DP-750: Microsoft Certified: Azure Databricks Data Engineer Associate&lt;/strong&gt;, you need to know how to choose the right ingestion pattern for different data sources.&lt;/p&gt;

&lt;p&gt;This is a common exam topic because Azure Databricks supports several ingestion options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Auto Loader&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;COPY INTO&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lakeflow Connect&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apache Spark Structured Streaming&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Databricks notebooks&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lakeflow Jobs triggers&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The related questions in your DP-750 question bank are Q37, Q44, Q46, and Q56.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why data ingestion patterns matter in DP-750
&lt;/h2&gt;

&lt;p&gt;Data ingestion means loading data from source systems into the lakehouse.&lt;/p&gt;

&lt;p&gt;In DP-750, the source system is often one of these:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Source type&lt;/th&gt;
&lt;th&gt;Typical ingestion pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Files in cloud storage&lt;/td&gt;
&lt;td&gt;Auto Loader or COPY INTO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequently arriving files&lt;/td&gt;
&lt;td&gt;Auto Loader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Simple SQL-based file loading&lt;/td&gt;
&lt;td&gt;COPY INTO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SaaS applications or databases&lt;/td&gt;
&lt;td&gt;Lakeflow Connect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Azure Event Hubs&lt;/td&gt;
&lt;td&gt;Spark Structured Streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;REST API&lt;/td&gt;
&lt;td&gt;Databricks notebook or custom code&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The exam usually gives you requirements such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;minimize custom code&lt;/li&gt;
&lt;li&gt;handle schema drift&lt;/li&gt;
&lt;li&gt;process new files incrementally&lt;/li&gt;
&lt;li&gt;support near-real-time ingestion&lt;/li&gt;
&lt;li&gt;ingest from operational databases&lt;/li&gt;
&lt;li&gt;read streaming events&lt;/li&gt;
&lt;li&gt;preserve existing table data&lt;/li&gt;
&lt;li&gt;use Unity Catalog governance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your job is to match the requirement to the right ingestion tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Auto Loader
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Auto Loader&lt;/strong&gt; is one of the most important ingestion features for DP-750.&lt;/p&gt;

&lt;p&gt;Auto Loader incrementally discovers and processes new files as they arrive in cloud object storage. Databricks documentation describes Auto Loader as a way to incrementally and efficiently process new data files as they arrive in cloud storage. It can load files into Delta tables and supports both Python and SQL.&lt;/p&gt;

&lt;p&gt;Auto Loader is commonly used with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spark.readStream.format("cloudFiles")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readStream&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cloudFiles&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cloudFiles.format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/path/to/source&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use Auto Loader when the question says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;new files arrive frequently&lt;/li&gt;
&lt;li&gt;data must be available in near-real time&lt;/li&gt;
&lt;li&gt;minimize custom code&lt;/li&gt;
&lt;li&gt;handle large-scale file ingestion&lt;/li&gt;
&lt;li&gt;support schema drift or schema evolution&lt;/li&gt;
&lt;li&gt;ingest JSON, CSV, Parquet, or other file-based data&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  3. Auto Loader and schema drift
&lt;/h2&gt;

&lt;p&gt;Schema drift means the source data structure changes over time.&lt;/p&gt;

&lt;p&gt;For example, today’s JSON files contain:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sensor_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"S001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"temperature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;21.5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Tomorrow’s JSON files contain a new field:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sensor_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"S001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"temperature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;21.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"humidity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is common in IoT telemetry and operational logs.&lt;/p&gt;

&lt;p&gt;Auto Loader supports schema inference and schema evolution. Databricks documentation says Auto Loader can automatically detect the schema of loaded data and supports schema evolution options such as &lt;code&gt;cloudFiles.schemaEvolutionMode&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;File-based ingestion + schema drift + minimal operational effort = Auto Loader&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. COPY INTO
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;COPY INTO&lt;/code&gt; is a SQL command for loading files from cloud storage into a Delta table.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="s1"&gt;'abfss://raw@storage1.dfs.core.windows.net/orders/'&lt;/span&gt;
&lt;span class="n"&gt;FILEFORMAT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Databricks documentation says &lt;code&gt;COPY INTO&lt;/code&gt; can load data incrementally and idempotently from cloud storage into a Delta table. It is often used for incremental or bulk loading from cloud object storage.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;COPY INTO&lt;/code&gt; when the question says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;load files into an existing table&lt;/li&gt;
&lt;li&gt;use SQL&lt;/li&gt;
&lt;li&gt;load incrementally&lt;/li&gt;
&lt;li&gt;minimize processing effort&lt;/li&gt;
&lt;li&gt;source is cloud object storage&lt;/li&gt;
&lt;li&gt;source files are CSV, JSON, Parquet, Avro, ORC, text, or similar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;SQL-based incremental file loading = COPY INTO&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. COPY INTO vs Auto Loader
&lt;/h2&gt;

&lt;p&gt;Both Auto Loader and &lt;code&gt;COPY INTO&lt;/code&gt; can load files from cloud storage, but they are used in slightly different situations.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Better choice&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Near-real-time file ingestion&lt;/td&gt;
&lt;td&gt;Auto Loader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequently arriving files&lt;/td&gt;
&lt;td&gt;Auto Loader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large-scale file discovery&lt;/td&gt;
&lt;td&gt;Auto Loader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema drift handling&lt;/td&gt;
&lt;td&gt;Auto Loader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQL-based incremental loading&lt;/td&gt;
&lt;td&gt;COPY INTO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Simple one-command file ingestion&lt;/td&gt;
&lt;td&gt;COPY INTO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thousands of files&lt;/td&gt;
&lt;td&gt;COPY INTO can be suitable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Millions of files or advanced ingestion&lt;/td&gt;
&lt;td&gt;Auto Loader is usually better&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Databricks documentation says &lt;code&gt;COPY INTO&lt;/code&gt; works well for data sources that contain thousands of files, while Auto Loader is recommended for loading millions of files and advanced use cases.&lt;/p&gt;

&lt;p&gt;For DP-750, if the question says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;New rows are appended frequently and must be available near-real-time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;choose &lt;strong&gt;Auto Loader&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If the question says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Complete the SQL statement to incrementally load CSV files.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;choose &lt;strong&gt;COPY INTO&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. Lakeflow Connect
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Lakeflow Connect&lt;/strong&gt; is used to ingest data from systems such as SaaS applications, databases, cloud storage, and message buses.&lt;/p&gt;

&lt;p&gt;Databricks documentation describes Lakeflow Connect as a set of connectors for ingesting data from local files, enterprise applications, databases, cloud storage, message buses, and more. Managed connectors are governed by Unity Catalog, powered by serverless compute and Lakeflow Spark Declarative Pipelines, and support efficient incremental reads and writes.&lt;/p&gt;

&lt;p&gt;Use Lakeflow Connect when the question says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ingest from an operational database&lt;/li&gt;
&lt;li&gt;ingest from SQL Server&lt;/li&gt;
&lt;li&gt;ingest from Salesforce, ServiceNow, Google Analytics, or supported applications&lt;/li&gt;
&lt;li&gt;minimize custom ingestion code&lt;/li&gt;
&lt;li&gt;use a managed connector&lt;/li&gt;
&lt;li&gt;load data into the lakehouse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Structured operational database ingestion + managed connector = Lakeflow Connect&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. Lakeflow Connect vs foreign catalog
&lt;/h2&gt;

&lt;p&gt;This is an important distinction.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Correct choice&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ingest data from external system into Databricks&lt;/td&gt;
&lt;td&gt;Lakeflow Connect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query external database tables without copying data&lt;/td&gt;
&lt;td&gt;Foreign catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data should appear in Unity Catalog but remain in source system&lt;/td&gt;
&lt;td&gt;Foreign catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data should be loaded into lakehouse tables&lt;/td&gt;
&lt;td&gt;Lakeflow Connect&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In the previous article, we used &lt;strong&gt;foreign catalog&lt;/strong&gt; for read-only federation.&lt;/p&gt;

&lt;p&gt;In this article, Lakeflow Connect is about &lt;strong&gt;ingestion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If data is copied or ingested into Databricks, think Lakeflow Connect.&lt;br&gt;&lt;br&gt;
If data is not copied and only queried externally, think foreign catalog.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. Azure Event Hubs ingestion
&lt;/h2&gt;

&lt;p&gt;Azure Event Hubs is used for streaming event data.&lt;/p&gt;

&lt;p&gt;In Azure Databricks, Event Hubs data can be read with Spark Structured Streaming. A common pattern is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readStream&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eventhubs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eventhubs.connectionString&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;auth_value&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Event Hubs event payloads are stored in the &lt;code&gt;body&lt;/code&gt; field, so you commonly convert the body to a string:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;selectExpr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CAST(body AS STRING) AS payload&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Microsoft documentation for Azure Event Hubs with Databricks describes using Structured Streaming to ingest Event Hubs data into raw landing tables. Databricks also documents Event Hubs as a pipeline data source for Lakeflow pipelines.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Event Hubs + streaming ingestion = Spark Structured Streaming&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And for the PySpark code:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Connection option = "eventhubs.connectionString"
Payload expression = "CAST(body AS STRING) AS payload"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. REST API ingestion
&lt;/h2&gt;

&lt;p&gt;Some data sources do not have a managed connector.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;external weather API&lt;/li&gt;
&lt;li&gt;custom business API&lt;/li&gt;
&lt;li&gt;third-party REST endpoint&lt;/li&gt;
&lt;li&gt;internal HTTP service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In these cases, a &lt;strong&gt;Databricks notebook&lt;/strong&gt; is often the simplest answer.&lt;/p&gt;

&lt;p&gt;The notebook can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;call the REST API&lt;/li&gt;
&lt;li&gt;parse the JSON response&lt;/li&gt;
&lt;li&gt;convert it into a DataFrame&lt;/li&gt;
&lt;li&gt;write it to a Delta table&lt;/li&gt;
&lt;li&gt;run on a schedule through Lakeflow Jobs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For DP-750, if the source is an external REST API and no managed connector option is available, the answer is often:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A Databricks notebook&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is especially true when the question says the external data is retrieved from a REST API and written to cloud storage or Delta tables.&lt;/p&gt;


&lt;h2&gt;
  
  
  10. Incremental processing and Delta tables
&lt;/h2&gt;

&lt;p&gt;DP-750 often includes the requirement:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Store all ingested data in a format that supports incremental processing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer is usually &lt;strong&gt;Delta Lake&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Delta tables support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ACID transactions&lt;/li&gt;
&lt;li&gt;scalable metadata&lt;/li&gt;
&lt;li&gt;time travel&lt;/li&gt;
&lt;li&gt;streaming reads and writes&lt;/li&gt;
&lt;li&gt;change data feed&lt;/li&gt;
&lt;li&gt;incremental processing patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For ingestion questions, this means the target should usually be a &lt;strong&gt;Delta table&lt;/strong&gt;, especially a managed Delta table when Unity Catalog is enabled.&lt;/p&gt;


&lt;h2&gt;
  
  
  11. DP-750 decision table for ingestion patterns
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario in the question&lt;/th&gt;
&lt;th&gt;Best answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ingest new files from cloud storage with minimal effort&lt;/td&gt;
&lt;td&gt;Auto Loader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Files arrive frequently and near-real-time is required&lt;/td&gt;
&lt;td&gt;Auto Loader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File-based telemetry with schema drift&lt;/td&gt;
&lt;td&gt;Auto Loader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintenance logs with unstructured files&lt;/td&gt;
&lt;td&gt;Auto Loader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Simple SQL command to load CSV files incrementally&lt;/td&gt;
&lt;td&gt;COPY INTO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complete SQL statement: &lt;code&gt;[?] table [?] path FILEFORMAT = CSV&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;COPY INTO table FROM path&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational database ingestion&lt;/td&gt;
&lt;td&gt;Lakeflow Connect managed connector&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQL Server ingestion into lakehouse&lt;/td&gt;
&lt;td&gt;Lakeflow Connect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External database query without copying data&lt;/td&gt;
&lt;td&gt;Foreign catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External REST API&lt;/td&gt;
&lt;td&gt;Databricks notebook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Azure Event Hubs streaming&lt;/td&gt;
&lt;td&gt;Spark Structured Streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Event Hubs authentication option&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"eventhubs.connectionString"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Event Hubs payload column&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"CAST(body AS STRING) AS payload"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Real Exam Questions
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Question 37
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Useful case information
&lt;/h3&gt;

&lt;p&gt;Contoso ingests the following operational and business data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Telemetry data: More than 40,000 IoT sensors across 28 sites emit JSON telemetry events every few seconds. Each site sends the events to the nearest event hub, which writes the data into the corresponding Data Lake Storage Gen2 account. These files frequently experience schema drift.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintenance logs: Maintenance systems generate historical repair logs, daily incremental updates, technician notes, and unstructured attachments that are stored in the Data Lake Storage Gen2 accounts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Operational maintenance data: Structured operational maintenance data is stored on the Azure Database for PostgreSQL server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;External weather data: Hourly weather forecasts are retrieved from a REST API and written to the Data Lake Storage Gen2 accounts.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoso identifies the following data ingestion and processing requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-scale ingestion pipelines to handle bursty workloads.&lt;/li&gt;
&lt;li&gt;Handle schema drift for the maintenance and telemetry data.&lt;/li&gt;
&lt;li&gt;Ingest file-based telemetry data by using minimal operational effort.&lt;/li&gt;
&lt;li&gt;Store all the ingested data in a format that supports incremental processing.&lt;/li&gt;
&lt;li&gt;Support the ingestion of the structured maintenance data from the Azure Database for PostgreSQL server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which ingestion option should you recommend for each data source?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data source&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Telemetry Data&lt;/td&gt;
&lt;td&gt;Auto Loader ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational maintenance data&lt;/td&gt;
&lt;td&gt;Lakeflow Connect managed connector ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintenance logs&lt;/td&gt;
&lt;td&gt;Auto Loader ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External weather data&lt;/td&gt;
&lt;td&gt;A Databricks notebook ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 44
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You plan to ingest data from CSV files stored in Azure Data Lake Storage Gen2. New rows are appended frequently.&lt;/p&gt;

&lt;p&gt;You need to implement a data ingestion solution that meets the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New data must be available in near-real-time, NRT.&lt;/li&gt;
&lt;li&gt;The data must be stored in managed Delta tables.&lt;/li&gt;
&lt;li&gt;The solution must minimize custom code and maintenance effort.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What should you include in the solution?&lt;/p&gt;

&lt;p&gt;A. scheduled Apache Spark batch jobs&lt;br&gt;
B. an Azure Data Factory pipeline&lt;br&gt;
C. Auto Loader ✅ Correct Answer&lt;br&gt;
D. an external table that references the CSV files&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 46
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace.&lt;/p&gt;

&lt;p&gt;You need to ingest streaming data from Azure Event Hubs by using Apache Spark Structured Streaming. The solution must authenticate to Event Hubs and read the event payload.&lt;/p&gt;

&lt;p&gt;How should you complete the PySpark code segment?&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readStream&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eventhubs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;______&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;auth_value&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;selectExpr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;______&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;First dropdown&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;"eventhubs.connectionString"&lt;/code&gt; ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second dropdown&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;"CAST(body AS STRING) AS payload"&lt;/code&gt; ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 56
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You need to ingest data from the CSV files stored in an external Azure Data Lake Storage Gen2 container into a managed Delta table. The solution must meet the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Load data incrementally as new files arrive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Minimize custom code and operational effort.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How should you complete the SQL statement?&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Dropdown&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Dropdown&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="s1"&gt;'abfss://raw@storage1.dfs.core.windows.net/orders/'&lt;/span&gt;

&lt;span class="n"&gt;FILEFORMAT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CSV&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dropdown 1&lt;/td&gt;
&lt;td&gt;COPY INTO ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dropdown 2&lt;/td&gt;
&lt;td&gt;FROM ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Completed statement:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="s1"&gt;'abfss://raw@storage1.dfs.core.windows.net/orders/'&lt;/span&gt;
&lt;span class="n"&gt;FILEFORMAT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CSV&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Key takeaways
&lt;/h1&gt;

&lt;p&gt;For DP-750, ingestion questions are mostly about matching the source and requirement to the right tool.&lt;/p&gt;

&lt;p&gt;Remember these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Auto Loader&lt;/strong&gt; is best for incremental cloud file ingestion, especially near-real-time ingestion and schema drift.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;COPY INTO&lt;/strong&gt; is a SQL-based way to load files incrementally into Delta tables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lakeflow Connect&lt;/strong&gt; is used for managed ingestion from databases and enterprise applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Foreign catalog&lt;/strong&gt; is for querying external databases without copying data, not ingestion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Databricks notebooks&lt;/strong&gt; are useful for custom ingestion, especially REST APIs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Azure Event Hubs&lt;/strong&gt; streaming ingestion uses Spark Structured Streaming.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Event Hubs payload is in the &lt;code&gt;body&lt;/code&gt; column.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code&gt;"eventhubs.connectionString"&lt;/code&gt; for the Event Hubs connection option.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code&gt;"CAST(body AS STRING) AS payload"&lt;/code&gt; to extract the event payload.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can identify whether the source is &lt;strong&gt;cloud files&lt;/strong&gt;, &lt;strong&gt;operational database&lt;/strong&gt;, &lt;strong&gt;Event Hubs&lt;/strong&gt;, or &lt;strong&gt;REST API&lt;/strong&gt;, you can usually choose the correct DP-750 ingestion pattern quickly.&lt;/p&gt;


&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>databricks</category>
      <category>certification</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>DP-750: External Data Access Explained and with Real Exam Questions</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Sun, 02 Aug 2026 19:59:56 +0000</pubDate>
      <link>https://dev.to/luca1iu/dp-750-external-data-access-explained-and-with-real-exam-questions-3e34</link>
      <guid>https://dev.to/luca1iu/dp-750-external-data-access-explained-and-with-real-exam-questions-3e34</guid>
      <description>&lt;p&gt;When preparing for &lt;strong&gt;DP-750: Microsoft Certified: Azure Databricks Data Engineer Associate&lt;/strong&gt;, you need to understand how Azure Databricks accesses data outside managed Delta tables.&lt;/p&gt;

&lt;p&gt;This topic includes several important Unity Catalog concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;storage credentials&lt;/li&gt;
&lt;li&gt;external locations&lt;/li&gt;
&lt;li&gt;external volumes&lt;/li&gt;
&lt;li&gt;Databricks access connector&lt;/li&gt;
&lt;li&gt;managed identity&lt;/li&gt;
&lt;li&gt;Key Vault-backed secret scopes&lt;/li&gt;
&lt;li&gt;foreign catalogs&lt;/li&gt;
&lt;li&gt;&lt;code&gt;COPY INTO&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The related questions in your DP-750 question bank are Q16, Q18, Q25, Q26–29, and Q32.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why external data access matters in DP-750
&lt;/h2&gt;

&lt;p&gt;Not all data is stored directly inside Databricks-managed tables.&lt;/p&gt;

&lt;p&gt;In real projects, data may live in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure Data Lake Storage Gen2&lt;/li&gt;
&lt;li&gt;Azure Blob Storage&lt;/li&gt;
&lt;li&gt;SQL Server&lt;/li&gt;
&lt;li&gt;Azure SQL Database&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;external file systems&lt;/li&gt;
&lt;li&gt;operational databases&lt;/li&gt;
&lt;li&gt;third-party systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unity Catalog provides governed ways to access this data. For DP-750, the exam often asks you to choose the right access pattern while following &lt;strong&gt;least privilege&lt;/strong&gt; and avoiding unnecessary data movement.&lt;/p&gt;

&lt;p&gt;The most important distinction is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cloud storage files       -&amp;gt; storage credential + external location / volume
External databases        -&amp;gt; connection + foreign catalog
Secrets in Azure Key Vault -&amp;gt; Key Vault-backed secret scope
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Storage credential
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;storage credential&lt;/strong&gt; is a Unity Catalog object that represents the identity used to access cloud storage.&lt;/p&gt;

&lt;p&gt;For Azure Databricks on Azure, this identity is often based on a &lt;strong&gt;managed identity&lt;/strong&gt; through a &lt;strong&gt;Databricks access connector&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Microsoft documentation explains that Unity Catalog can use Azure managed identities to access Azure storage, and that managed identities remove the need to maintain credentials or rotate secrets. To use this pattern, you create an access connector for Azure Databricks, grant its managed identity access to the storage account, and use the access connector when creating a Unity Catalog storage credential.&lt;/p&gt;

&lt;p&gt;For DP-750, remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Access connector + managed identity = preferred governed access to Azure storage without storing secrets in Databricks.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. Databricks access connector
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Databricks access connector&lt;/strong&gt; is an Azure resource that provides a managed identity for Azure Databricks.&lt;/p&gt;

&lt;p&gt;It is commonly used with Unity Catalog to access Azure Data Lake Storage Gen2.&lt;/p&gt;

&lt;p&gt;The common setup flow is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Create a Databricks access connector.
2. Assign the access connector’s managed identity permissions on the storage account.
3. Register the access connector as a Unity Catalog storage credential.
4. Use the storage credential in an external location.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For least privilege, you should assign only the required Azure role to the access connector. In many Unity Catalog external-location scenarios, this is &lt;strong&gt;Storage Blob Data Contributor&lt;/strong&gt; on the relevant storage scope, not a broad subscription-level role. Microsoft’s managed identity guidance describes creating the access connector, granting the managed identity access to the storage account, and then using that access connector for the storage credential.&lt;/p&gt;

&lt;p&gt;For DP-750, the access connector is used for storage access. It is &lt;strong&gt;not&lt;/strong&gt; used to expose SQL Server tables as Unity Catalog objects.&lt;/p&gt;


&lt;h2&gt;
  
  
  4. External location
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;external location&lt;/strong&gt; is a Unity Catalog securable object that combines:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cloud storage path + storage credential
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Databricks documentation defines an external location as a securable object that combines a storage path with a storage credential that authorizes access to that path.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;EXTERNAL&lt;/span&gt; &lt;span class="k"&gt;LOCATION&lt;/span&gt; &lt;span class="n"&gt;raw_orders&lt;/span&gt;
&lt;span class="n"&gt;URL&lt;/span&gt; &lt;span class="s1"&gt;'abfss://raw@storage1.dfs.core.windows.net/orders/'&lt;/span&gt;
&lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;STORAGE&lt;/span&gt; &lt;span class="n"&gt;CREDENTIAL&lt;/span&gt; &lt;span class="n"&gt;my_storage_credential&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;External locations are used when Databricks needs governed access to files in cloud storage.&lt;/p&gt;

&lt;p&gt;For DP-750, if a question says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A SQL statement such as &lt;code&gt;COPY INTO&lt;/code&gt; must access files in an ADLS Gen2 container.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the expected answer is often:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Configure an external location that uses a storage credential.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. External location vs external table vs volume
&lt;/h2&gt;

&lt;p&gt;These three concepts are related but different.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Storage credential&lt;/td&gt;
&lt;td&gt;Identity used to access cloud storage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External location&lt;/td&gt;
&lt;td&gt;Storage path plus storage credential&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External table&lt;/td&gt;
&lt;td&gt;Table whose data lives in an external storage path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volume&lt;/td&gt;
&lt;td&gt;Unity Catalog object for governing file access&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An external table is still a table. It is useful when you want to query structured data as a table.&lt;/p&gt;

&lt;p&gt;A volume is used for file access, including structured, semi-structured, and unstructured files. Databricks documentation describes volumes as Unity Catalog objects that represent logical storage in cloud object storage and provide governance over non-tabular datasets.&lt;/p&gt;

&lt;p&gt;For DP-750, if the question is about users accessing files directly, think about &lt;strong&gt;volumes&lt;/strong&gt; and &lt;code&gt;READ VOLUME&lt;/code&gt; / &lt;code&gt;WRITE VOLUME&lt;/code&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. External volume
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Unity Catalog volume&lt;/strong&gt; is used to govern access to files.&lt;/p&gt;

&lt;p&gt;Volumes can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;managed volumes&lt;/li&gt;
&lt;li&gt;external volumes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An external volume points to a storage location outside the Unity Catalog managed storage location. Databricks documentation says external volumes must be registered against a directory within an external location, and volumes can only be created in Unity Catalog schemas.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;EXTERNAL&lt;/span&gt; &lt;span class="n"&gt;VOLUME&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;
&lt;span class="k"&gt;LOCATION&lt;/span&gt; &lt;span class="s1"&gt;'abfss://raw@storage1.dfs.core.windows.net/files/'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, if the question says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expose files from Azure Storage&lt;/li&gt;
&lt;li&gt;authentication should not require storing credentials in Databricks&lt;/li&gt;
&lt;li&gt;users can access files but not modify files&lt;/li&gt;
&lt;li&gt;follow least privilege&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then the answer pattern is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authentication type: Databricks access connector
Permission: READ VOLUME
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;READ VOLUME&lt;/code&gt; allows read access to files in the volume. &lt;code&gt;WRITE VOLUME&lt;/code&gt; would be too broad if users must not modify files.&lt;/p&gt;


&lt;h2&gt;
  
  
  7. Key Vault-backed secret scope
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;secret scope&lt;/strong&gt; allows notebooks and jobs to retrieve secrets securely at runtime.&lt;/p&gt;

&lt;p&gt;Azure Databricks supports Azure Key Vault-backed secret scopes. Microsoft documentation explains that a Key Vault-backed scope references secrets stored in Azure Key Vault, and secrets must be managed in Azure Key Vault.&lt;/p&gt;

&lt;p&gt;The notebook retrieves the value with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;dbutils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;scope-name&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;secret-name&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Microsoft’s secret workflow documentation says to use the &lt;code&gt;dbutils.secrets&lt;/code&gt; utility to access secrets in an Azure Databricks notebook.&lt;/p&gt;

&lt;p&gt;For DP-750, if the question says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the secret value is managed by a security team in Azure Key Vault&lt;/li&gt;
&lt;li&gt;Databricks must always retrieve the latest value&lt;/li&gt;
&lt;li&gt;least privilege is required&lt;/li&gt;
&lt;li&gt;notebook must retrieve the secret at runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then the answer is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Expose the secret with a Key Vault-backed secret scope.
Retrieve it with dbutils.secrets.get.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Do not use:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spark.conf.get
dbutils.secret.list
Databricks-backed secret scope
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;because those do not meet the requirement as directly.&lt;/p&gt;


&lt;h2&gt;
  
  
  8. Foreign catalog
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;foreign catalog&lt;/strong&gt; is used for Lakehouse Federation.&lt;/p&gt;

&lt;p&gt;It mirrors an external database in Unity Catalog so that users can query external tables from Databricks without copying the data into Databricks-managed storage.&lt;/p&gt;

&lt;p&gt;Databricks documentation says a foreign catalog mirrors a database in an external data system and enables read-only queries on that data system from an Azure Databricks workspace.&lt;/p&gt;

&lt;p&gt;For DP-750, this is very important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;External database schemas and tables should appear alongside Unity Catalog objects, but data must not be copied into Databricks-managed storage = foreign catalog.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is different from Lakeflow Connect.&lt;/p&gt;


&lt;h2&gt;
  
  
  9. Foreign catalog vs Lakeflow Connect
&lt;/h2&gt;

&lt;p&gt;Lakehouse Federation and Lakeflow Connect solve different problems.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Best fit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Query external database tables without copying data&lt;/td&gt;
&lt;td&gt;Foreign catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ingest data from an external system into the lakehouse&lt;/td&gt;
&lt;td&gt;Lakeflow Connect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mirror external database metadata into Unity Catalog&lt;/td&gt;
&lt;td&gt;Foreign catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build a managed ingestion pipeline&lt;/td&gt;
&lt;td&gt;Lakeflow Connect&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Databricks documentation describes a Unity Catalog connection as a securable object that stores the path and credentials for accessing an external database system, and &lt;code&gt;CREATE FOREIGN CATALOG&lt;/code&gt; allows creating a read-only mirror of a database from that external data source.&lt;/p&gt;

&lt;p&gt;So if the requirement says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The data is NOT copied into Databricks-managed storage.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then a Lakeflow Connect pipeline is not the best answer, because Lakeflow Connect is an ingestion approach. You should choose a foreign catalog.&lt;/p&gt;


&lt;h2&gt;
  
  
  10. COPY INTO and external locations
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;COPY INTO&lt;/code&gt; is used to load files from cloud object storage into a table.&lt;/p&gt;

&lt;p&gt;For Unity Catalog, Databricks documentation describes using &lt;code&gt;COPY INTO&lt;/code&gt; to load data from an Azure Data Lake Storage container into a table in Databricks SQL, and recommends using Unity Catalog volumes to access files as part of ingestion.&lt;/p&gt;

&lt;p&gt;A typical SQL pattern is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="s1"&gt;'abfss://raw@storage1.dfs.core.windows.net/orders/'&lt;/span&gt;
&lt;span class="n"&gt;FILEFORMAT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If this statement needs to access the external ADLS Gen2 path, Databricks must have governed access to the path.&lt;/p&gt;

&lt;p&gt;For DP-750, the answer is usually:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;external location + storage credential
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;not:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;external table
Lakeflow ingestion gateway
volume only
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The key point is that the path must be authorized through Unity Catalog.&lt;/p&gt;


&lt;h2&gt;
  
  
  11. DP-750 decision table for external data access
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario in the question&lt;/th&gt;
&lt;th&gt;Best answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Access ADLS Gen2 by managed identity&lt;/td&gt;
&lt;td&gt;Databricks access connector&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avoid storing storage credentials in Databricks&lt;/td&gt;
&lt;td&gt;Managed identity / access connector&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Register cloud storage access in Unity Catalog&lt;/td&gt;
&lt;td&gt;Storage credential&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authorize a cloud storage path&lt;/td&gt;
&lt;td&gt;External location&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;COPY INTO&lt;/code&gt; must access files in ADLS Gen2&lt;/td&gt;
&lt;td&gt;External location that uses a storage credential&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Expose files from Azure Storage as a governed object&lt;/td&gt;
&lt;td&gt;External volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Users can read files but not modify them&lt;/td&gt;
&lt;td&gt;&lt;code&gt;READ VOLUME&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notebook retrieves Key Vault secret at runtime&lt;/td&gt;
&lt;td&gt;Key Vault-backed secret scope + &lt;code&gt;dbutils.secrets.get&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query external SQL Server schemas/tables without copying data&lt;/td&gt;
&lt;td&gt;Foreign catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ingest external database data into Databricks&lt;/td&gt;
&lt;td&gt;Lakeflow Connect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access connector proposed for SQL Server metadata federation&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Real Exam Questions
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Question 16
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace named Workspace1 that is attached to a Unity Catalog metastore named metastore1.&lt;/p&gt;

&lt;p&gt;You need to register an Azure Storage account named account1 that has a hierarchical namespace enabled as an external location.&lt;/p&gt;

&lt;p&gt;The external location must use a managed identity to authenticate to account1 and the solution must follow the principle of least privilege.&lt;/p&gt;

&lt;p&gt;Which three actions should you perform in sequence?&lt;/p&gt;

&lt;p&gt;Actions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Assign the Storage Blob Data Owner role to the access connector.&lt;/li&gt;
&lt;li&gt;Assign Workspace1 the Storage Blob Data Contributor role for account1.&lt;/li&gt;
&lt;li&gt;Register the access connector as a storage credential in metastore1.&lt;/li&gt;
&lt;li&gt;Create a Databricks access connector.&lt;/li&gt;
&lt;li&gt;Assign the Storage Blob Data Contributor role to the access connector.&lt;/li&gt;
&lt;li&gt;Register the access connector as a storage credential in Workspace1.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Order&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Step 1&lt;/td&gt;
&lt;td&gt;4. Create a Databricks access connector ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Step 2&lt;/td&gt;
&lt;td&gt;5. Assign the Storage Blob Data Contributor role to the access connector ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Step 3&lt;/td&gt;
&lt;td&gt;3. Register the access connector as a storage credential in metastore1 ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 18
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace.&lt;/p&gt;

&lt;p&gt;You have an Azure key vault named kv-secure that stores a secret named &lt;strong&gt;storageKey&lt;/strong&gt;. The value of storageKey is managed and updated by the cloud security team at your company.&lt;/p&gt;

&lt;p&gt;You need to enable a Databricks notebook named Notebook1 to retrieve the value of storageKey securely at runtime. The solution must follow the principle of least privilege and always retrieve the latest value.&lt;/p&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Expose storageKey to Databricks by using&lt;/td&gt;
&lt;td&gt;A Key Vault-backed secret scope ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retrieve storageKey from within Notebook1 by using&lt;/td&gt;
&lt;td&gt;dbutils.secret.get ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 25
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You need to create an external volume named Volume1 in an existing schema. Volume1 must expose files from an Azure Storage container.&lt;/p&gt;

&lt;p&gt;The solution must meet the following requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Ensure that authentication does NOT require storing credentials in Databricks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure that users can access the files, but NOT modify the files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Follow the principle of least privilege.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Which type of authentication should you configure, and which permission should you grant to the users?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Authentication type&lt;/td&gt;
&lt;td&gt;A Databricks access connector ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission&lt;/td&gt;
&lt;td&gt;READ VOLUME ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 26
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace named Workspace1 that contains a lakehouse and is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You have a connection to a Microsoft SQL Server database named DB1.&lt;/p&gt;

&lt;p&gt;You need to expose the schemas and tables of DB1 to meet the following requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The schemas and tables can be queried in Databricks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The schemas and tables appear alongside other Unity Catalog objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The data is NOT copied into Databricks-managed storage.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Solution: You create a Lakeflow Connect pipeline and connect it to DB1.&lt;/p&gt;

&lt;p&gt;Does this meet the goal?&lt;/p&gt;

&lt;p&gt;A. Yes&lt;/p&gt;

&lt;p&gt;B. No ✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 27
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace named Workspace1 that contains a lakehouse and is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You have a connection to a Microsoft SQL Server database named DB1.&lt;/p&gt;

&lt;p&gt;You need to expose the schemas and tables of DB1 to meet the following requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The schemas and tables can be queried in Databricks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The schemas and tables appear alongside other Unity Catalog objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The data is NOT copied into Databricks-managed storage.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Solution: You create a Databricks access connector.&lt;/p&gt;

&lt;p&gt;Does this meet the goal?&lt;/p&gt;

&lt;p&gt;A. Yes&lt;/p&gt;

&lt;p&gt;B. No ✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 28
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace named Workspace1 that contains a lakehouse and is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You have a connection to a Microsoft SQL Server database named DB1.&lt;/p&gt;

&lt;p&gt;You need to expose the schemas and tables of DB1 to meet the following requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The schemas and tables can be queried in Databricks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The schemas and tables appear alongside other Unity Catalog objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The data is NOT copied into Databricks-managed storage.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Solution: You create a foreign catalog in Catalog Explorer.&lt;/p&gt;

&lt;p&gt;Does this meet the goal?&lt;/p&gt;

&lt;p&gt;A. Yes ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;B. No&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 29
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace named Workspace1 that contains a lakehouse and is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You have a connection to a Microsoft SQL Server database named DB1.&lt;/p&gt;

&lt;p&gt;You need to expose the schemas and tables of DB1 to meet the following requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The schemas and tables can be queried in Databricks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The schemas and tables appear alongside other Unity Catalog objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The data is NOT copied into Databricks-managed storage.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Solution: You create a new native catalog in Unity Catalog.&lt;/p&gt;

&lt;p&gt;Does this meet the goal?&lt;/p&gt;

&lt;p&gt;A. Yes&lt;/p&gt;

&lt;p&gt;B. No ✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 32
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You have a CSV file stored in an Azure Data Lake Storage Gen2 container.&lt;/p&gt;

&lt;p&gt;You plan to ingest the data into an existing table by running the following SQL statement.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;Customer&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="s1"&gt;'abfss://container1@storageaccount.dfs.core.windows.net/data/customer'&lt;/span&gt;
&lt;span class="n"&gt;FILEFORMAT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CSV&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You need to ensure that the statement can access the data in the container.&lt;/p&gt;

&lt;p&gt;What should you configure?&lt;/p&gt;

&lt;p&gt;A. an external table named Customer in the CSV file format&lt;/p&gt;

&lt;p&gt;B. a Lakeflow ingestion gateway&lt;/p&gt;

&lt;p&gt;C. an external location that uses a storage credential ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;D. a volume in a catalog&lt;/p&gt;


&lt;h1&gt;
  
  
  Key takeaways
&lt;/h1&gt;

&lt;p&gt;For DP-750, external data access questions usually test whether you can choose the correct Unity Catalog object for the access pattern.&lt;/p&gt;

&lt;p&gt;Remember these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Storage credential&lt;/strong&gt; stores or represents the identity used to access cloud storage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Databricks access connector&lt;/strong&gt; provides managed identity-based access to Azure storage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;External location&lt;/strong&gt; combines a storage path with a storage credential.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;External volume&lt;/strong&gt; governs file access in Unity Catalog.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;READ VOLUME&lt;/strong&gt; allows users to read files without modifying them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Key Vault-backed secret scope&lt;/strong&gt; lets Databricks reference secrets stored in Azure Key Vault.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;dbutils.secrets.get&lt;/strong&gt; retrieves secrets securely in notebooks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Foreign catalog&lt;/strong&gt; exposes external database schemas and tables without copying data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lakeflow Connect&lt;/strong&gt; is for ingestion, not read-only federation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;COPY INTO&lt;/strong&gt; needs governed access to the source path, usually through an external location and storage credential.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can identify whether the source is &lt;strong&gt;cloud storage&lt;/strong&gt;, &lt;strong&gt;external files&lt;/strong&gt;, &lt;strong&gt;Key Vault secrets&lt;/strong&gt;, or an &lt;strong&gt;external database&lt;/strong&gt;, you can usually choose the correct DP-750 external access answer quickly.&lt;/p&gt;


&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>databricks</category>
      <category>certification</category>
      <category>tutorial</category>
    </item>
    <item>
      <title># DP-750: Unity Catalog Governance Explained and with Real Exam Questions</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Thu, 30 Jul 2026 05:01:32 +0000</pubDate>
      <link>https://dev.to/luca1iu/-dp-750-unity-catalog-governance-explained-and-with-real-exam-questions-3c5n</link>
      <guid>https://dev.to/luca1iu/-dp-750-unity-catalog-governance-explained-and-with-real-exam-questions-3c5n</guid>
      <description>&lt;p&gt;When preparing for &lt;strong&gt;DP-750: Microsoft Certified: Azure Databricks Data Engineer Associate&lt;/strong&gt;, Unity Catalog governance is one of the most important areas to understand.&lt;/p&gt;

&lt;p&gt;In previous articles, we covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unity Catalog object model: catalog, schema, table&lt;/li&gt;
&lt;li&gt;Unity Catalog permissions: &lt;code&gt;USE CATALOG&lt;/code&gt;, &lt;code&gt;USE SCHEMA&lt;/code&gt;, &lt;code&gt;SELECT&lt;/code&gt;, &lt;code&gt;MODIFY&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article focuses on higher-level governance features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI/BI Genie Spaces&lt;/li&gt;
&lt;li&gt;Unity Catalog data lineage&lt;/li&gt;
&lt;li&gt;attribute-based access control, ABAC&lt;/li&gt;
&lt;li&gt;governed tags&lt;/li&gt;
&lt;li&gt;column masks&lt;/li&gt;
&lt;li&gt;audit logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The related questions in your DP-750 question bank are Q14, Q17, Q19, Q23, and Q35.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. What does governance mean in Unity Catalog?
&lt;/h2&gt;

&lt;p&gt;In Azure Databricks, governance is not only about granting table permissions.&lt;/p&gt;

&lt;p&gt;Governance also includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;controlling access to sensitive data&lt;/li&gt;
&lt;li&gt;masking columns&lt;/li&gt;
&lt;li&gt;tracking data lineage&lt;/li&gt;
&lt;li&gt;auditing data access&lt;/li&gt;
&lt;li&gt;organizing metadata consistently&lt;/li&gt;
&lt;li&gt;helping users find and understand governed data&lt;/li&gt;
&lt;li&gt;applying policies centrally across many objects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unity Catalog is the central governance layer for data and AI assets in Azure Databricks. It provides a unified model for permissions, lineage, discovery, and policy enforcement across Databricks workspaces.&lt;/p&gt;

&lt;p&gt;For DP-750, you need to understand which governance feature solves which problem.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Governance feature&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Users ask natural-language questions about data&lt;/td&gt;
&lt;td&gt;AI/BI Genie Space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Business terms should map to the right table&lt;/td&gt;
&lt;td&gt;Genie instructions / knowledge store&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Track where table data came from&lt;/td&gt;
&lt;td&gt;Data lineage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review lineage visually&lt;/td&gt;
&lt;td&gt;Catalog Explorer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tag data and apply dynamic policies&lt;/td&gt;
&lt;td&gt;Governed tags + ABAC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hide part of a sensitive column&lt;/td&gt;
&lt;td&gt;Column mask&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capture data access events&lt;/td&gt;
&lt;td&gt;Audit logs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analyze logs quickly in Azure&lt;/td&gt;
&lt;td&gt;Log Analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  2. AI/BI Genie Space
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;AI/BI Genie Space&lt;/strong&gt;, now also referred to in current documentation as a &lt;strong&gt;Genie Agent&lt;/strong&gt;, allows business users to interact with data by using natural language. Domain experts configure Genie with datasets, sample queries, and text guidelines so that business questions can be translated into analytical queries.&lt;/p&gt;

&lt;p&gt;For example, users might ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me total sales by month.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How many invoices were created last quarter?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Genie then tries to generate a SQL query based on the configured data, metadata, descriptions, and instructions.&lt;/p&gt;

&lt;p&gt;For DP-750, the key idea is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Genie is scoped to a Genie Space.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If a question says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The instruction should affect only Space1 and no other Genie spaces.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;then the instruction belongs on &lt;strong&gt;Space1&lt;/strong&gt;, not on the table, schema, catalog, or notebook.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. Genie instructions and business synonyms
&lt;/h2&gt;

&lt;p&gt;A common governance problem is that business users use different terms for the same concept.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sale
transaction
event
order
invoice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Technically, these words might not all be the same. But in a specific business domain, users may use them to refer to the same sales table.&lt;/p&gt;

&lt;p&gt;Genie quality can be improved by adding examples, instructions, and knowledge store snippets. Databricks documentation says you can add example SQL queries, Unity Catalog functions, plain-text instructions, and knowledge store snippets such as table descriptions, join relationships, and SQL expressions for business semantics.&lt;/p&gt;

&lt;p&gt;So if users in &lt;code&gt;Space1&lt;/code&gt; use the words:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;transaction
event
order
invoice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;to refer to a sale, then you should add the instruction to &lt;code&gt;Space1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Do not add the instruction to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the catalog&lt;/li&gt;
&lt;li&gt;the schema&lt;/li&gt;
&lt;li&gt;the notebook&lt;/li&gt;
&lt;li&gt;all Genie spaces globally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;because the requirement says other Genie spaces must remain unaffected.&lt;/p&gt;


&lt;h2&gt;
  
  
  4. Unity Catalog data lineage
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Data lineage&lt;/strong&gt; tracks how data flows through tables, notebooks, jobs, dashboards, and queries.&lt;/p&gt;

&lt;p&gt;For example, if a pipeline reads from:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bronze.raw_events
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then writes to:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;silver.cleaned_events
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then writes to:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gold.telemetry_summary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;lineage helps you understand that relationship.&lt;/p&gt;

&lt;p&gt;Unity Catalog data lineage can be used for impact analysis, root-cause investigation, and tracking sensitive data flows. Databricks documentation says lineage is captured for queries that use Spark DataFrame or Databricks SQL interfaces such as notebooks and SQL query editor, and that tables must be registered in a Unity Catalog metastore.&lt;/p&gt;

&lt;p&gt;For DP-750, the key exam pattern is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To capture lineage, use Unity Catalog-enabled compute.&lt;br&gt;&lt;br&gt;
To review lineage, use Catalog Explorer.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. Why Catalog Explorer for lineage?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Catalog Explorer&lt;/strong&gt; is the main UI for browsing Unity Catalog objects such as catalogs, schemas, tables, views, and lineage.&lt;/p&gt;

&lt;p&gt;If a DP-750 question asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Where should you review data lineage?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the answer is usually:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Catalog Explorer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;not:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Log Analytics
Azure Data Explorer
DAG
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A DAG may show job task dependencies, but it is not the Unity Catalog lineage review tool.&lt;/p&gt;

&lt;p&gt;Log Analytics is useful for logs, not for browsing table lineage.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. Attribute-based access control, ABAC
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Attribute-based access control&lt;/strong&gt;, or &lt;strong&gt;ABAC&lt;/strong&gt;, controls access based on attributes.&lt;/p&gt;

&lt;p&gt;In Unity Catalog, ABAC uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;governed tags&lt;/li&gt;
&lt;li&gt;access policies&lt;/li&gt;
&lt;li&gt;user-defined functions, UDFs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Databricks documentation says ABAC in Unity Catalog uses governed tags, policies, and UDFs to enforce dynamic, attribute-based access control.&lt;/p&gt;

&lt;p&gt;A simple example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Table1 is tagged as sensitivity = confidential.
Only users in an approved group can see confidential data.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Instead of manually creating separate views for every access pattern, you can use governed tags and Unity Catalog access policies to apply consistent rules.&lt;/p&gt;

&lt;p&gt;For DP-750, the key pattern is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ABAC = governed tag + Unity Catalog access policy&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. Governed tags
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;governed tag&lt;/strong&gt; is an account-level tag with rules.&lt;/p&gt;

&lt;p&gt;Databricks documentation describes governed tags as account-level tags with built-in rules for consistency and control. A tag policy defines how the tag can be used, including allowed values and who can assign them.&lt;/p&gt;

&lt;p&gt;Governed tags can be used to classify objects, for example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sensitivity = public
sensitivity = internal
sensitivity = confidential
sensitivity = restricted
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data_domain = finance
data_domain = sales
data_domain = hr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, if the question says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Access must be controlled by using ABAC.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;then the correct object-level input is usually:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A governed tag
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;not:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A table privilege
A workspace permission
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A table privilege such as &lt;code&gt;SELECT&lt;/code&gt; controls direct access, but it is not ABAC. A workspace permission controls workspace objects, not dynamic data access rules.&lt;/p&gt;


&lt;h2&gt;
  
  
  8. Unity Catalog access policy
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Unity Catalog access policy&lt;/strong&gt; defines how access should be enforced based on attributes such as governed tags.&lt;/p&gt;

&lt;p&gt;Databricks documentation says ABAC policies can be used for row filtering and column masking and can be created, edited, viewed, and deleted in Catalog Explorer, SQL, or REST APIs.&lt;/p&gt;

&lt;p&gt;For DP-750, the pattern is simple:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Apply governed tag to table.
Create Unity Catalog access policy.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is different from manually granting users &lt;code&gt;SELECT&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SELECT&lt;/code&gt; allows users to query data, but it does not define an ABAC rule.&lt;/p&gt;


&lt;h2&gt;
  
  
  9. Column masks
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;column mask&lt;/strong&gt; changes what users see when they query a sensitive column.&lt;/p&gt;

&lt;p&gt;For example, a table contains:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;email_address
credit_card_number
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The business requirement says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;analysts can query all rows&lt;/li&gt;
&lt;li&gt;analysts cannot see the full email address&lt;/li&gt;
&lt;li&gt;analysts can see only the domain after &lt;code&gt;@&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;analysts can see only the last four digits of the credit card number&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a column-level data protection problem.&lt;/p&gt;

&lt;p&gt;The right solution is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Grant SELECT on the table.
Apply column masks to sensitive columns.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Databricks documentation describes row filters and column masks as Unity Catalog access controls that restrict the rows and column values a user can see at query time. It also says column masks are used for redacting sensitive column data based on identity.&lt;/p&gt;

&lt;p&gt;For DP-750:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Correct feature&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hide rows&lt;/td&gt;
&lt;td&gt;Row filter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hide or transform values in a column&lt;/td&gt;
&lt;td&gt;Column mask&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hide full email but keep domain&lt;/td&gt;
&lt;td&gt;Column mask&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hide full card number but keep last four digits&lt;/td&gt;
&lt;td&gt;Column mask&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create a separate read-only object&lt;/td&gt;
&lt;td&gt;Dynamic view&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encrypt values so users cannot query normally&lt;/td&gt;
&lt;td&gt;Not the best answer here&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  10. Column masks vs row filters
&lt;/h2&gt;

&lt;p&gt;Column masks and row filters are often tested together.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;What it controls&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Row filter&lt;/td&gt;
&lt;td&gt;Which rows users can see&lt;/td&gt;
&lt;td&gt;Analyst sees only rows for their region&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Column mask&lt;/td&gt;
&lt;td&gt;What values users see in a column&lt;/td&gt;
&lt;td&gt;Analyst sees only last four digits of card number&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If the requirement says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Business analysts can query all the rows.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then do not choose row-level filters.&lt;/p&gt;

&lt;p&gt;The problem is not which rows they can access. The problem is which column values they can see.&lt;/p&gt;

&lt;p&gt;So the correct answer is column masks.&lt;/p&gt;


&lt;h2&gt;
  
  
  11. Dynamic views vs column masks
&lt;/h2&gt;

&lt;p&gt;A dynamic view can also be used to apply filtering or masking logic, but it creates a separate view object.&lt;/p&gt;

&lt;p&gt;Databricks documentation explains that dynamic views, row filters, and column masks can all apply filtering or transformation logic at query time, but row filters and column masks apply directly to tables and keep the table name unchanged.&lt;/p&gt;

&lt;p&gt;For DP-750, if the question says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;analysts must query the table without errors&lt;/li&gt;
&lt;li&gt;analysts should see all rows&lt;/li&gt;
&lt;li&gt;only certain column values should be hidden&lt;/li&gt;
&lt;li&gt;follow least privilege&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then the best answer is usually:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Grant SELECT on the table and apply column masks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;not:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a dynamic view.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  12. Audit logs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Audit logs&lt;/strong&gt; capture important security and access events.&lt;/p&gt;

&lt;p&gt;In Azure Databricks, audit logs help answer questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who accessed this table?&lt;/li&gt;
&lt;li&gt;Who changed permissions?&lt;/li&gt;
&lt;li&gt;Which workspace generated this event?&lt;/li&gt;
&lt;li&gt;Which user ran this command?&lt;/li&gt;
&lt;li&gt;Which service principal performed this operation?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Databricks documentation provides an audit log reference for services and events, and notes that audit log availability depends on how you access logs.&lt;/p&gt;

&lt;p&gt;For DP-750, if the question says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Unity Catalog table data access events do not appear in the logs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;then you should think about audit or diagnostic logging for the &lt;strong&gt;Azure Databricks workspace&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  13. Diagnostic log delivery and Log Analytics
&lt;/h2&gt;

&lt;p&gt;Azure Databricks diagnostic log delivery is configured for workspaces through Azure diagnostic settings. Databricks documentation says to open the Azure Databricks service resource in the Azure portal, go to &lt;strong&gt;Diagnostic settings&lt;/strong&gt;, turn on diagnostics, choose the services to log, and save the configuration.&lt;/p&gt;

&lt;p&gt;Azure Monitor diagnostic settings can send resource logs to several destinations, including a Log Analytics workspace. Microsoft documentation describes Log Analytics as a destination where you can retrieve data by using log queries and workbooks and use log alerts proactively.&lt;/p&gt;

&lt;p&gt;For DP-750, if the requirement says:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The log data must be available for analysis as quickly as possible.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;then &lt;strong&gt;Log Analytics&lt;/strong&gt; is usually the best destination.&lt;/p&gt;

&lt;p&gt;Storage account is useful for archiving. Event Hubs is useful for streaming to external systems. Azure Monitor metrics is not the same as detailed audit logs.&lt;/p&gt;


&lt;h2&gt;
  
  
  14. DP-750 decision table for governance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario in the question&lt;/th&gt;
&lt;th&gt;Best answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Business users ask natural-language questions&lt;/td&gt;
&lt;td&gt;Genie Space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Business synonyms should affect only one Genie space&lt;/td&gt;
&lt;td&gt;Add instructions to that Genie Space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capture table lineage for notebooks and jobs&lt;/td&gt;
&lt;td&gt;Unity Catalog-enabled compute&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review lineage visually&lt;/td&gt;
&lt;td&gt;Catalog Explorer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Control access with ABAC&lt;/td&gt;
&lt;td&gt;Governed tag + Unity Catalog access policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mask email and credit card columns&lt;/td&gt;
&lt;td&gt;Column masks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analysts must query all rows&lt;/td&gt;
&lt;td&gt;Do not use row filters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data access events missing from logs&lt;/td&gt;
&lt;td&gt;Enable workspace audit / diagnostic logging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logs must be quickly analyzable&lt;/td&gt;
&lt;td&gt;Send to Log Analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Real Exam Questions
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Question 14
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that contains the objects shown in the following table.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Catalog 1&lt;/td&gt;
&lt;td&gt;Catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema 1&lt;/td&gt;
&lt;td&gt;Schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sales1&lt;/td&gt;
&lt;td&gt;Table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notebook1&lt;/td&gt;
&lt;td&gt;Notebook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Space1&lt;/td&gt;
&lt;td&gt;AI/BI Genie Space&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Users often use the following words to refer to a sale: transaction, event, order, and invoice.&lt;/p&gt;

&lt;p&gt;You need to create a knowledge store. The solution must ensure that when the users use any of the words in Space1, Genie queries the Sales1 table. Any other Genie spaces must remain unaffected.&lt;/p&gt;

&lt;p&gt;To which object should you add the instructions?&lt;/p&gt;

&lt;p&gt;A. Sales1&lt;br&gt;
B. Schema1&lt;br&gt;
C. Space1 ✅ Correct Answer&lt;br&gt;
D. Catalog1&lt;br&gt;
E. Notebook1&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 17
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You need to ensure that data lineage is captured and can be reviewed for tables accessed by Databricks notebooks and jobs. The solution must minimize administrative effort.&lt;/p&gt;

&lt;p&gt;Which compute configuration should you use to capture the data lineage and what should you use to review the data lineage?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Capture&lt;/td&gt;
&lt;td&gt;A Unity Catalog-enabled cluster ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review&lt;/td&gt;
&lt;td&gt;Catalog Explorer ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 19
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a catalog named Catalog1. Catalog1 contains a schema named Schema1 and a table named Table1.&lt;/p&gt;

&lt;p&gt;You need to ensure that access to the data in Table1 is controlled by using attribute-based access control, ABAC.&lt;/p&gt;

&lt;p&gt;What should you apply to Table1, and how should you control access for users?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Apply to Table1&lt;/td&gt;
&lt;td&gt;A governed tag ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;To control user access&lt;/td&gt;
&lt;td&gt;Create a Unity Catalog access policy ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 23
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a catalog named Catalog1.&lt;/p&gt;

&lt;p&gt;Catalog1 contains a table named Transactions.&lt;/p&gt;

&lt;p&gt;Transactions contains the following columns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;transaction_id&lt;/li&gt;
&lt;li&gt;customer_name&lt;/li&gt;
&lt;li&gt;email_address&lt;/li&gt;
&lt;li&gt;credit_card_number&lt;/li&gt;
&lt;li&gt;transaction_amount&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You need to ensure that business analysts can query all the rows in the Transactions table. The solution must meet the following requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Prevent the analysts from seeing the full values in the email_address and credit_card_number columns.&lt;/li&gt;
&lt;li&gt;Ensure that the analysts can see only the values after the @ character in each email address.&lt;/li&gt;
&lt;li&gt;Ensure that the analysts can see only the last four digits of each credit card number.&lt;/li&gt;
&lt;li&gt;Enable the analysts to query the table without errors.&lt;/li&gt;
&lt;li&gt;Follow the principle of least privilege.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;p&gt;A. Grant the analysts the SELECT permission for the Transactions table and apply column-level encryption.&lt;br&gt;
B. Grant the analysts the SELECT permission for columns that do NOT contain sensitive data.&lt;br&gt;
C. Grant the analysts the SELECT permission for the Transactions table and implement row-level filters.&lt;br&gt;
D. Grant the analysts the SELECT permission for the Transactions table and apply column masks to email_address and credit_card_number. ✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 35
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks account that contains a single workspace named Workspace1. Workspace1 is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You discover that data access events for Unity Catalog tables fail to appear in the logs.&lt;/p&gt;

&lt;p&gt;You need to ensure that all the data access events are captured centrally for auditing purposes. The log data must be available for analysis as quickly as possible.&lt;/p&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Enable audit logging for&lt;/td&gt;
&lt;td&gt;Workspace1 ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Send audit logs to&lt;/td&gt;
&lt;td&gt;Log Analytics ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Key takeaways
&lt;/h1&gt;

&lt;p&gt;For DP-750, Unity Catalog governance questions usually ask you to choose the correct governance feature, not just the correct SQL privilege.&lt;/p&gt;

&lt;p&gt;Remember these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Genie Space&lt;/strong&gt; is used for natural-language business questions.&lt;/li&gt;
&lt;li&gt;If synonyms or instructions must affect only one Genie Space, add them to that Genie Space.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unity Catalog lineage&lt;/strong&gt; can capture lineage for tables used by notebooks and jobs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Catalog Explorer&lt;/strong&gt; is used to review lineage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ABAC&lt;/strong&gt; uses governed tags and Unity Catalog access policies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governed tags&lt;/strong&gt; classify objects for policy-based access control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Column masks&lt;/strong&gt; hide or transform sensitive column values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Row filters&lt;/strong&gt; restrict rows, not column values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs&lt;/strong&gt; capture access and security events.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log Analytics&lt;/strong&gt; is the best option when logs must be available quickly for analysis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can identify whether the requirement is about natural-language semantics, lineage, tag-based policy, column-level masking, or logging, you can usually choose the right DP-750 governance answer quickly.&lt;/p&gt;


&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>databricks</category>
      <category>certification</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>DP-750: Unity Catalog Permissions and Least Privilege Access Explained and with Real Exam Questions</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Wed, 29 Jul 2026 20:00:50 +0000</pubDate>
      <link>https://dev.to/luca1iu/dp-750-unity-catalog-permissions-and-least-privilege-access-explained-and-with-real-exam-questions-4ial</link>
      <guid>https://dev.to/luca1iu/dp-750-unity-catalog-permissions-and-least-privilege-access-explained-and-with-real-exam-questions-4ial</guid>
      <description>&lt;p&gt;When preparing for &lt;strong&gt;DP-750: Microsoft Certified: Azure Databricks Data Engineer Associate&lt;/strong&gt;, you must understand how permissions work in Azure Databricks.&lt;/p&gt;

&lt;p&gt;Many DP-750 questions are not asking only:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which permission allows a user to read a table?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They are really testing whether you understand &lt;strong&gt;least privilege access&lt;/strong&gt; across different layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;catalog
  └── schema
        └── table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In Unity Catalog, a user usually needs permissions on multiple objects before they can actually access data. For example, to read a table, the user needs access to the table itself and usage privileges on the parent schema and catalog.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. What is least privilege?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Least privilege&lt;/strong&gt; means giving a user, group, or service principal only the permissions required to complete a task, and nothing more.&lt;/p&gt;

&lt;p&gt;For DP-750, this means you should avoid answers such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;assign workspace admin&lt;/li&gt;
&lt;li&gt;grant MANAGE when only SELECT is needed&lt;/li&gt;
&lt;li&gt;grant permissions at a broad catalog level when schema-level access is enough&lt;/li&gt;
&lt;li&gt;grant CREATE TABLE when the user only needs to update existing data&lt;/li&gt;
&lt;li&gt;grant ownership when the user only needs to query or modify data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good least-privilege answer usually gives permissions at the lowest reasonable level.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Least privilege pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Read one table&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; + &lt;code&gt;SELECT&lt;/code&gt; on the table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update one table&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; + &lt;code&gt;SELECT&lt;/code&gt; + &lt;code&gt;MODIFY&lt;/code&gt; on the table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create tables in one schema&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; + &lt;code&gt;CREATE TABLE&lt;/code&gt; on the schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run one job&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;CAN RUN&lt;/code&gt; on the job&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create unrestricted clusters&lt;/td&gt;
&lt;td&gt;Allow unrestricted cluster creation entitlement&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  2. Unity Catalog permission model
&lt;/h2&gt;

&lt;p&gt;Unity Catalog uses a hierarchical permission model. Data and metadata live in a metastore, and data objects are organized in a three-level namespace: &lt;code&gt;catalog.schema.table&lt;/code&gt;. Every object in this hierarchy is a securable object, and access is controlled by privileges such as &lt;code&gt;SELECT&lt;/code&gt;, &lt;code&gt;MODIFY&lt;/code&gt;, and &lt;code&gt;USE SCHEMA&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The main hierarchy is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;metastore
  └── catalog
        └── schema
              └── table / view / volume / function / model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The important exam point is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Permissions on a child object are not enough if the user does not also have usage permission on the parent objects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example, even if a user has &lt;code&gt;SELECT&lt;/code&gt; on a table, the user still needs:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;USE CATALOG on the parent catalog
USE SCHEMA on the parent schema
SELECT on the table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Databricks documentation explicitly says that to read from a table, a user needs &lt;code&gt;SELECT&lt;/code&gt; on the table, &lt;code&gt;USE CATALOG&lt;/code&gt; on the parent catalog, and &lt;code&gt;USE SCHEMA&lt;/code&gt; on the parent schema.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. Usage privileges are not data privileges
&lt;/h2&gt;

&lt;p&gt;This is one of the most important DP-750 exam traps.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;USE CATALOG&lt;/code&gt; and &lt;code&gt;USE SCHEMA&lt;/code&gt; are &lt;strong&gt;usage privileges&lt;/strong&gt;. They allow a user to interact with objects inside the catalog or schema, but they do not grant access to data by themselves.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`analysts`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`analysts`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This does &lt;strong&gt;not&lt;/strong&gt; allow analysts to query tables yet.&lt;/p&gt;

&lt;p&gt;They still need:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_details&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`analysts`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;So the full read pattern is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`analysts`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`analysts`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_details&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`analysts`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; = can reach the object&lt;br&gt;&lt;br&gt;
&lt;code&gt;SELECT&lt;/code&gt; = can read the data&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Databricks documentation says &lt;code&gt;USE CATALOG&lt;/code&gt; does not grant access to the catalog itself or to any specific objects within it, and &lt;code&gt;USE SCHEMA&lt;/code&gt; does not grant access to the schema itself or to any specific objects within it.&lt;/p&gt;


&lt;h2&gt;
  
  
  4. Reading data: &lt;code&gt;SELECT&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;SELECT&lt;/code&gt; privilege allows a user to select from a table, view, or materialized view. However, the user must also have &lt;code&gt;USE CATALOG&lt;/code&gt; on the parent catalog and &lt;code&gt;USE SCHEMA&lt;/code&gt; on the parent schema.&lt;/p&gt;

&lt;p&gt;For a table named:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;catalog1.schema1.table1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;the minimum read permissions are:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`group1`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`group1`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table1&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`group1`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In DP-750, when the question says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The user or service principal must query data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;you should look for:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;USE CATALOG + USE SCHEMA + SELECT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Modifying data: &lt;code&gt;MODIFY&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;MODIFY&lt;/code&gt; privilege allows a user to insert, update, and delete data in a table. Databricks documentation says that when &lt;code&gt;MODIFY&lt;/code&gt; is applied to a table, the user must also have &lt;code&gt;SELECT&lt;/code&gt; on the table, &lt;code&gt;USE SCHEMA&lt;/code&gt; on the parent schema, and &lt;code&gt;USE CATALOG&lt;/code&gt; on the parent catalog.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`data_engineers`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`data_engineers`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_details&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`data_engineers`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;MODIFY&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_details&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`data_engineers`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, when the question says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User1 can update the data in a table but cannot create new tables.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the answer should include:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;USE CATALOG on catalog
USE SCHEMA on schema
MODIFY on table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Do not choose &lt;code&gt;CREATE TABLE&lt;/code&gt;, because that would allow creating new tables.&lt;/p&gt;

&lt;p&gt;Do not choose &lt;code&gt;MANAGE&lt;/code&gt;, because that is broader than data modification and can involve managing privileges or ownership-like operations.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. Creating tables: &lt;code&gt;CREATE TABLE&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;CREATE TABLE&lt;/code&gt; privilege allows a user to create a table or view in a schema. Databricks recommends granting &lt;code&gt;CREATE TABLE&lt;/code&gt; at the schema level for least privilege. The user must also have &lt;code&gt;USE CATALOG&lt;/code&gt; on the parent catalog and &lt;code&gt;USE SCHEMA&lt;/code&gt; on the parent schema.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`group1`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`group1`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`group1`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In DP-750, when the question says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;group1 can create tables in schema1&lt;br&gt;&lt;br&gt;
group1 must not be able to grant permissions&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;you should choose:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;USE SCHEMA + CREATE TABLE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;not:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MANAGE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;because &lt;code&gt;MANAGE&lt;/code&gt; would be too broad.&lt;/p&gt;


&lt;h2&gt;
  
  
  7. &lt;code&gt;MANAGE&lt;/code&gt; vs data permissions
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;MANAGE&lt;/code&gt; privilege allows a user to manage privileges on an object, transfer ownership, and delete an object without being the owner. Databricks documentation also says users with &lt;code&gt;MANAGE&lt;/code&gt; are not automatically granted all privileges, but they can explicitly grant themselves privileges.&lt;/p&gt;

&lt;p&gt;For DP-750, this matters because:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MANAGE is not the same as SELECT.
MANAGE is not the same as MODIFY.
MANAGE is broader than normal data access.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If the requirement says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cannot grant permissions for the schema and its objects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;then do &lt;strong&gt;not&lt;/strong&gt; choose &lt;code&gt;MANAGE&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If the requirement says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can update table data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;then choose &lt;code&gt;MODIFY&lt;/code&gt;, not &lt;code&gt;MANAGE&lt;/code&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  8. Privilege inheritance
&lt;/h2&gt;

&lt;p&gt;Unity Catalog supports privilege inheritance. When a privilege is granted on a parent object, it applies to current and future child objects. For example, granting a privilege on a schema can apply to all current and future tables in that schema.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`analysts`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This can grant &lt;code&gt;SELECT&lt;/code&gt; on all current and future tables and views in that schema.&lt;/p&gt;

&lt;p&gt;This is useful when a group needs access to many tables in the same schema.&lt;/p&gt;

&lt;p&gt;But for least privilege, be careful:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Grant level&lt;/th&gt;
&lt;th&gt;Access scope&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Table level&lt;/td&gt;
&lt;td&gt;Narrowest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema level&lt;/td&gt;
&lt;td&gt;All current and future objects in one schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catalog level&lt;/td&gt;
&lt;td&gt;All current and future objects in one catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For DP-750, if the question says &lt;strong&gt;all data in Catalog1 and Catalog2&lt;/strong&gt;, granting at the catalog level might be reasonable. If the question says &lt;strong&gt;one table only&lt;/strong&gt;, grant table-level access.&lt;/p&gt;


&lt;h2&gt;
  
  
  9. Service principals and SQL warehouses
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;service principal&lt;/strong&gt; is often used by external applications, automation, or jobs.&lt;/p&gt;

&lt;p&gt;If an external application connects to a SQL warehouse and needs to query Unity Catalog data, the service principal needs the same Unity Catalog data privileges as a normal user.&lt;/p&gt;

&lt;p&gt;For example, if service principal &lt;code&gt;SP1&lt;/code&gt; must query tables in &lt;code&gt;Catalog1&lt;/code&gt; and &lt;code&gt;Catalog2&lt;/code&gt;, it needs:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;USE CATALOG
USE SCHEMA
SELECT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Authentication is not enough.&lt;br&gt;&lt;br&gt;
The service principal also needs Unity Catalog privileges.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  10. Job permissions vs Run as permissions
&lt;/h2&gt;

&lt;p&gt;Lakeflow Jobs use two permission concepts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Job privileges&lt;/strong&gt;: who can view, run, or manage the job.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Run as privileges&lt;/strong&gt;: what identity the job uses to access data and resources during execution.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Databricks documentation says job privileges are evaluated when a user performs an action on the job, such as editing or running it, while Run as privileges are evaluated during the job run.&lt;/p&gt;

&lt;p&gt;For DP-750, this means:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Permission type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;User can run a job&lt;/td&gt;
&lt;td&gt;Job permission, such as &lt;code&gt;CAN RUN&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Job can read/write data&lt;/td&gt;
&lt;td&gt;Run as user or service principal needs data privileges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User can edit job settings&lt;/td&gt;
&lt;td&gt;Higher job permission, such as manage permission&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User only needs to trigger a job&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;CAN RUN&lt;/code&gt; is usually enough&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In exam questions, if the requirement says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User1 can run Databricks jobs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the least-privilege answer is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Grant CAN RUN permissions for the jobs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Do not assign workspace admin.&lt;/p&gt;


&lt;h2&gt;
  
  
  11. Workspace entitlements vs Unity Catalog privileges
&lt;/h2&gt;

&lt;p&gt;Not every permission in Databricks is a Unity Catalog privilege.&lt;/p&gt;

&lt;p&gt;Some permissions are &lt;strong&gt;workspace entitlements&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, Databricks documentation says the &lt;strong&gt;Allow unrestricted cluster creation&lt;/strong&gt; entitlement gives users or service principals permission to create unrestricted clusters. Non-admin users are not granted this entitlement unless explicitly assigned.&lt;/p&gt;

&lt;p&gt;This is different from Unity Catalog data access.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Permission category&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Query table data&lt;/td&gt;
&lt;td&gt;Unity Catalog privileges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update table data&lt;/td&gt;
&lt;td&gt;Unity Catalog privileges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create tables in a schema&lt;/td&gt;
&lt;td&gt;Unity Catalog privileges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run a Databricks job&lt;/td&gt;
&lt;td&gt;Job permission&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create unrestricted clusters&lt;/td&gt;
&lt;td&gt;Workspace entitlement&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For DP-750, do not confuse:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;USE CATALOG / USE SCHEMA / SELECT / MODIFY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CAN RUN
Allow unrestricted cluster creation
Workspace admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;They solve different problems.&lt;/p&gt;


&lt;h2&gt;
  
  
  12. Basic GRANT syntax
&lt;/h2&gt;

&lt;p&gt;Unity Catalog privileges are usually granted with SQL.&lt;/p&gt;

&lt;p&gt;Common examples:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`group1`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`group1`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table1&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`group1`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;MODIFY&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table1&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`group1`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;`group1`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In some older exam-style options, you may see &lt;code&gt;USAGE&lt;/code&gt;. In current Databricks documentation, the Unity Catalog terminology is generally &lt;code&gt;USE CATALOG&lt;/code&gt; and &lt;code&gt;USE SCHEMA&lt;/code&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  13. DP-750 decision table for permissions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario in the question&lt;/th&gt;
&lt;th&gt;Best answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Query table data&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; + &lt;code&gt;SELECT&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query many tables in a schema&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; + &lt;code&gt;SELECT&lt;/code&gt; on schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query many tables in a catalog&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; + &lt;code&gt;SELECT&lt;/code&gt; at catalog/schema scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update table data&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; + &lt;code&gt;MODIFY&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create tables in one schema&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; + &lt;code&gt;CREATE TABLE&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cannot grant permissions&lt;/td&gt;
&lt;td&gt;Do not grant &lt;code&gt;MANAGE&lt;/code&gt; or ownership&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run Databricks jobs&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;CAN RUN&lt;/code&gt; on the job&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Provision clusters of any size&lt;/td&gt;
&lt;td&gt;Allow unrestricted cluster creation entitlement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Least privilege&lt;/td&gt;
&lt;td&gt;Avoid workspace admin, owner, broad catalog grants if narrower grants work&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Real Exam Questions
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Question 22
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains two catalogs named Catalog1 and Catalog2.&lt;/p&gt;

&lt;p&gt;An external application uses a service principal named SP1 to connect to a SQL warehouse.&lt;/p&gt;

&lt;p&gt;You need to ensure that SP1 can query the data in Catalog1 and Catalog2. The solution must follow the principle of least privilege.&lt;/p&gt;

&lt;p&gt;Which permissions should you grant to SP1 for the catalogs?&lt;/p&gt;

&lt;p&gt;A. USE SCHEMA and SELECT&lt;br&gt;
B. USE CATALOG and SELECT&lt;br&gt;
C. USE CATALOG, USE SCHEMA, and SELECT ✅ Correct Answer&lt;br&gt;
D. USE CATALOG and USE SCHEMA&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 24
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a catalog named catalog1.&lt;/p&gt;

&lt;p&gt;You have a group named group1.&lt;/p&gt;

&lt;p&gt;You plan to create a schema named schema1 in catalog1.&lt;/p&gt;

&lt;p&gt;You need to ensure that group1 meets the following requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Can create tables in schema1&lt;/li&gt;
&lt;li&gt;Can modify and query tables&lt;/li&gt;
&lt;li&gt;Cannot grant permissions for the schema and its objects&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;How should you complete the SQL statements?&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Privileges&lt;/td&gt;
&lt;td&gt;USAGE, CREATE TABLE ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Principal&lt;/td&gt;
&lt;td&gt;TO ROLE group1 ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 31
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace named Workspace1.&lt;br&gt;
You have a user named User1 that is a non-admin user for Workspace1.&lt;br&gt;
You need to ensure that User1 can perform the following tasks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Provision clusters of any size.&lt;/li&gt;
&lt;li&gt;Run Databricks jobs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The solution must follow the principle of least privilege.&lt;/p&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;p&gt;Options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Assign the workspace admins role&lt;/li&gt;
&lt;li&gt;Assign the Consumer access entitlement&lt;/li&gt;
&lt;li&gt;Grant the CAN RUN permissions for the jobs&lt;/li&gt;
&lt;li&gt;Assign the Contributor role for a resource group&lt;/li&gt;
&lt;li&gt;Assign the Allow unrestricted cluster creation entitlement&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;To ensure that User1 can provision clusters&lt;/td&gt;
&lt;td&gt;5. Assign the Allow unrestricted cluster creation entitlement ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;To ensure that User1 can run jobs&lt;/td&gt;
&lt;td&gt;3. Grant the CAN RUN permissions for the jobs ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 33
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a catalog named catalog1.&lt;/p&gt;

&lt;p&gt;You have a group named group1. Group1 already has the USE CATALOG privilege on catalog1.&lt;/p&gt;

&lt;p&gt;You create a schema named schema1 in catalog1.&lt;/p&gt;

&lt;p&gt;You need to ensure that group1 can create tables in schema1. Group1 must not be able to grant permissions on the schema or its objects. The solution must follow the principle of least privilege.&lt;/p&gt;

&lt;p&gt;How should you complete the SQL statement?&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema1&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Privileges&lt;/td&gt;
&lt;td&gt;CREATE TABLE, USE SCHEMA ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Principal&lt;/td&gt;
&lt;td&gt;TO group1 ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Question 34
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is attached to a Unity Catalog metastore named metastore1.&lt;/p&gt;

&lt;p&gt;metastore1 contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A catalog named Sales&lt;/li&gt;
&lt;li&gt;A schema named Customers in the Sales catalog&lt;/li&gt;
&lt;li&gt;A table named Customer_details in the Customers schema&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You need to ensure that a user named User1 can update the data in Customer_details.&lt;/p&gt;

&lt;p&gt;The solution must meet the following requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure that User1 cannot create new tables.&lt;/li&gt;
&lt;li&gt;Follow the principle of least privilege.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Which permission should you grant to User1 for each object?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Object&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The Sales catalog&lt;/td&gt;
&lt;td&gt;USE CATALOG ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Customers schema&lt;/td&gt;
&lt;td&gt;USE SCHEMA ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Customer_details table&lt;/td&gt;
&lt;td&gt;MODIFY ✅ Correct Answer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Key takeaways
&lt;/h1&gt;

&lt;p&gt;For DP-750, Unity Catalog permission questions usually test whether you understand the full access path.&lt;/p&gt;

&lt;p&gt;Remember these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To read data: &lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; + &lt;code&gt;SELECT&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;To update data: &lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; + &lt;code&gt;MODIFY&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;To create tables: &lt;code&gt;USE CATALOG&lt;/code&gt; + &lt;code&gt;USE SCHEMA&lt;/code&gt; + &lt;code&gt;CREATE TABLE&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;USE CATALOG&lt;/code&gt; does not mean &lt;code&gt;SELECT&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;USE SCHEMA&lt;/code&gt; does not mean &lt;code&gt;SELECT&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MODIFY&lt;/code&gt; is for data changes.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CREATE TABLE&lt;/code&gt; is for creating new tables.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MANAGE&lt;/code&gt; is broader and can allow permission management.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CAN RUN&lt;/code&gt; is for job execution, not data access.&lt;/li&gt;
&lt;li&gt;Allow unrestricted cluster creation is a workspace entitlement, not a Unity Catalog privilege.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can identify whether the question is about &lt;strong&gt;data access&lt;/strong&gt;, &lt;strong&gt;object creation&lt;/strong&gt;, &lt;strong&gt;job execution&lt;/strong&gt;, or &lt;strong&gt;cluster provisioning&lt;/strong&gt;, you can usually find the correct DP-750 permission answer quickly.&lt;/p&gt;


&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>databricks</category>
      <category>certification</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>DP-750: Unity Catalog Object Model Explained and with Real Exam Questions</title>
      <dc:creator>Jin</dc:creator>
      <pubDate>Tue, 28 Jul 2026 15:59:56 +0000</pubDate>
      <link>https://dev.to/luca1iu/dp-750-unity-catalog-object-model-explained-and-with-real-exam-questions-1pg8</link>
      <guid>https://dev.to/luca1iu/dp-750-unity-catalog-object-model-explained-and-with-real-exam-questions-1pg8</guid>
      <description>&lt;p&gt;When preparing for &lt;strong&gt;DP-750: Microsoft Certified: Azure Databricks Data Engineer Associate&lt;/strong&gt;, you must understand how Unity Catalog organizes data.&lt;/p&gt;

&lt;p&gt;Unity Catalog is not only a permission system. It is the central governance layer for data and AI assets in Azure Databricks. It provides a structured object model for organizing data, applying access control, managing metadata, and supporting governance across workspaces.&lt;/p&gt;

&lt;p&gt;For DP-750, the most important Unity Catalog structure is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;metastore
  └── catalog
        └── schema
              └── table / view / volume / function / model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Azure Databricks documentation describes catalogs as the first layer in Unity Catalog’s three-level namespace: &lt;code&gt;catalog.schema.table-etc&lt;/code&gt;. A catalog contains schemas, and schemas contain tables, views, volumes, models, and functions.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. What is a Unity Catalog metastore?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;metastore&lt;/strong&gt; is the top-level container for Unity Catalog metadata.&lt;/p&gt;

&lt;p&gt;It contains securable objects such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;catalogs&lt;/li&gt;
&lt;li&gt;schemas&lt;/li&gt;
&lt;li&gt;tables&lt;/li&gt;
&lt;li&gt;views&lt;/li&gt;
&lt;li&gt;volumes&lt;/li&gt;
&lt;li&gt;functions&lt;/li&gt;
&lt;li&gt;storage credentials&lt;/li&gt;
&lt;li&gt;external locations&lt;/li&gt;
&lt;li&gt;connections&lt;/li&gt;
&lt;li&gt;foreign catalogs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, you usually do not create a new metastore for every team or department. A metastore is often shared across a Databricks account or region, while catalogs and schemas are used to organize and isolate business domains, environments, or data products.&lt;/p&gt;

&lt;p&gt;For DP-750, when a question says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The workspace is attached to a Unity Catalog metastore.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;it means the workspace can use Unity Catalog objects such as catalogs, schemas, managed tables, external locations, and governed permissions.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. What is a catalog?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;catalog&lt;/strong&gt; is the first level of the Unity Catalog namespace.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transactions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In this name:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sales        = catalog
transactions = schema
orders       = table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A catalog is the primary unit of data organization and logical isolation in Unity Catalog. Microsoft documentation explains that catalogs often mirror organizational units or software development lifecycle scopes, such as business units, domains, or environments.&lt;/p&gt;

&lt;p&gt;Common catalog design patterns include:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dev
test
prod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sales
finance
hr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bronze
silver
gold
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;However, for governance and isolation, catalogs are often better used for &lt;strong&gt;business domains&lt;/strong&gt; or &lt;strong&gt;environments&lt;/strong&gt;, while schemas are used for more granular organization.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. What is a schema?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;schema&lt;/strong&gt; is the second level of the Unity Catalog namespace.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;finance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;procurement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;assets&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In this name:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;finance     = catalog
procurement = schema
assets      = table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A schema organizes data and AI assets into a more granular category than a catalog. Microsoft documentation says schemas typically represent a single use case, project, or team sandbox, and they help with access control and data discovery.&lt;/p&gt;

&lt;p&gt;For DP-750, schemas are often used to organize data by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;team&lt;/li&gt;
&lt;li&gt;project&lt;/li&gt;
&lt;li&gt;department area&lt;/li&gt;
&lt;li&gt;data layer&lt;/li&gt;
&lt;li&gt;sandbox&lt;/li&gt;
&lt;li&gt;curated domain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;finance.default
finance.procurement
finance.reporting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. What is a table?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;table&lt;/strong&gt; is a data object inside a schema.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;finance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;procurement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;assets&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is a fully qualified table name.&lt;/p&gt;

&lt;p&gt;For Unity Catalog, managed tables are usually the recommended default table type. Microsoft documentation says Unity Catalog managed tables are the default and recommended table type in Azure Databricks for Delta Lake and Apache Iceberg, and Unity Catalog manages read, write, storage, and optimization responsibilities for them.&lt;/p&gt;

&lt;p&gt;For DP-750, if a question asks you to create a table in a specific catalog and schema, you can either:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;use the full three-part name:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;finance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;procurement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;assets&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;asset_id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;asset_name&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;asset_type&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;set the current catalog and schema first:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="n"&gt;finance&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;procurement&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;assets&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;asset_id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;asset_name&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;asset_type&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Both approaches identify the same table location in the Unity Catalog namespace.&lt;/p&gt;


&lt;h2&gt;
  
  
  5. Three-level namespace
&lt;/h2&gt;

&lt;p&gt;Unity Catalog uses a three-level namespace:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;catalog.schema.object
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For tables, this means:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;catalog.schema.table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;finance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;procurement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;assets&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This structure matters in DP-750 because many exam questions test whether you know where an object belongs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Object&lt;/th&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Metastore&lt;/td&gt;
&lt;td&gt;Top-level metadata container&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catalog&lt;/td&gt;
&lt;td&gt;First namespace level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema&lt;/td&gt;
&lt;td&gt;Second namespace level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Table&lt;/td&gt;
&lt;td&gt;Third namespace level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View&lt;/td&gt;
&lt;td&gt;Third namespace level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volume&lt;/td&gt;
&lt;td&gt;Third namespace level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;Third namespace level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model&lt;/td&gt;
&lt;td&gt;Third namespace level&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A common exam trap is confusing &lt;strong&gt;catalog&lt;/strong&gt; and &lt;strong&gt;schema&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="n"&gt;schema2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;is wrong if the requirement is to create a schema named &lt;code&gt;schema2&lt;/code&gt; inside an existing catalog.&lt;/p&gt;

&lt;p&gt;The correct pattern is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Managed location
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;managed location&lt;/strong&gt; is a cloud storage path used by Unity Catalog to store managed objects such as managed tables and managed volumes.&lt;/p&gt;

&lt;p&gt;Managed storage can be configured at different levels:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;metastore
catalog
schema
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Microsoft documentation explains that managed tables and volumes are stored in managed storage locations, and that managed storage can be set at the metastore, catalog, or schema level. Data is stored at the lowest available location in the hierarchy.&lt;/p&gt;

&lt;p&gt;This hierarchy is important:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Schema managed location
    overrides catalog managed location

Catalog managed location
    overrides metastore managed location

Metastore managed location
    fallback default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;So if a schema has its own managed location, managed tables in that schema use the schema’s managed location.&lt;/p&gt;


&lt;h2&gt;
  
  
  7. MANAGED LOCATION vs LOCATION
&lt;/h2&gt;

&lt;p&gt;This is a very important DP-750 exam detail.&lt;/p&gt;

&lt;p&gt;For Unity Catalog schemas, if you want to specify the storage location, you should use:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;MANAGED&lt;/span&gt; &lt;span class="k"&gt;LOCATION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;not:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;LOCATION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Microsoft documentation for &lt;code&gt;CREATE SCHEMA&lt;/code&gt; states that &lt;code&gt;LOCATION&lt;/code&gt; is not supported in Unity Catalog, and if you want to specify a storage location for a schema in Unity Catalog, you must use &lt;code&gt;MANAGED LOCATION&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Correct example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema2&lt;/span&gt;
&lt;span class="n"&gt;MANAGED&lt;/span&gt; &lt;span class="k"&gt;LOCATION&lt;/span&gt; &lt;span class="s1"&gt;'abfss://container@storageaccount.dfs.core.windows.net/data'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Incorrect example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;catalog1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema2&lt;/span&gt;
&lt;span class="k"&gt;LOCATION&lt;/span&gt; &lt;span class="s1"&gt;'abfss://container@storageaccount.dfs.core.windows.net/data'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For DP-750, remember:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Unity Catalog schema storage path = &lt;code&gt;MANAGED LOCATION&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. Organizing catalogs and schemas
&lt;/h2&gt;

&lt;p&gt;Unity Catalog design is about balancing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;governance&lt;/li&gt;
&lt;li&gt;isolation&lt;/li&gt;
&lt;li&gt;discoverability&lt;/li&gt;
&lt;li&gt;naming consistency&lt;/li&gt;
&lt;li&gt;access control&lt;/li&gt;
&lt;li&gt;operational simplicity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Microsoft’s setup guidance says catalogs are the primary unit of data isolation in Unity Catalog, and all schemas, tables, volumes, views, and functions live in catalogs. It also recommends creating catalogs around logical boundaries such as business units, environments, or major data products.&lt;/p&gt;

&lt;p&gt;For example, if your company has departments such as:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sales
finance
hr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;and each department must have independently managed access and logically isolated assets, then each department can have its own catalog:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sales
finance
hr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Each catalog can then contain schemas:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sales.raw
sales.cleansed
sales.curated

finance.raw
finance.cleansed
finance.curated

hr.raw
hr.cleansed
hr.curated
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This supports centralized governance while keeping access boundaries clear.&lt;/p&gt;


&lt;h2&gt;
  
  
  9. Development area organization
&lt;/h2&gt;

&lt;p&gt;Another common DP-750 pattern is about organizing development areas.&lt;/p&gt;

&lt;p&gt;If the requirement says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;isolated development areas&lt;/li&gt;
&lt;li&gt;standard naming conventions&lt;/li&gt;
&lt;li&gt;centralized governance&lt;/li&gt;
&lt;li&gt;consistent structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then do not let every team create random objects in the default catalog and schema.&lt;/p&gt;

&lt;p&gt;A better pattern is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;development catalog
  ├── team_a_schema
  ├── team_b_schema
  └── team_c_schema
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dev.team_sales
dev.team_finance
dev.team_iot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This keeps development isolated while still enforcing a shared naming standard.&lt;/p&gt;

&lt;p&gt;In DP-750, if the case study says that naming conventions are inconsistent and development teams need isolated areas, the answer is usually:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;shared development catalog + standardized naming convention + separate schema per team&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  10. DP-750 decision table for Unity Catalog object model
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario in the question&lt;/th&gt;
&lt;th&gt;Best answer pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Need to create a schema inside catalog1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CREATE SCHEMA catalog1.schema_name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need schema-specific managed storage&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MANAGED LOCATION&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need to create a table in a specific schema&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;USE CATALOG&lt;/code&gt;, &lt;code&gt;USE SCHEMA&lt;/code&gt;, then &lt;code&gt;CREATE TABLE&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need logical isolation for departments&lt;/td&gt;
&lt;td&gt;Separate catalog per department&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need isolated development areas with standard naming&lt;/td&gt;
&lt;td&gt;Shared development catalog + schema per team&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need consistent raw, cleansed, curated organization&lt;/td&gt;
&lt;td&gt;Standard catalog/schema structure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need centralized governance&lt;/td&gt;
&lt;td&gt;Unity Catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need object name with catalog, schema, table&lt;/td&gt;
&lt;td&gt;Three-level namespace&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Real Exam Questions
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Question 4
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is attached to a Unity Catalog metastore named metastore1, metastore1 contains a catalog named catalog1.&lt;/p&gt;

&lt;p&gt;You need to create a new schema named schema2 that meets the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Is contained in catalog1&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uses abfss://&lt;a href="mailto:container@storageaccount.dfs.core.windows.net"&gt;container@storageaccount.dfs.core.windows.net&lt;/a&gt;/data as the managed location&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which SQL statement should you execute?&lt;/p&gt;

&lt;p&gt;A. CREATE SCHEMA catalog1.schema2&lt;br&gt;&lt;br&gt;
LOCATION ‘abfss://&lt;a href="mailto:container@storageaccount.dfs.core.windows.net"&gt;container@storageaccount.dfs.core.windows.net&lt;/a&gt;/data’;&lt;/p&gt;

&lt;p&gt;B. CREATE SCHEMA catalog1.schema2&lt;br&gt;&lt;br&gt;
MANAGED LOCATION ‘abfss://&lt;a href="mailto:container@storageaccount.dfs.core.windows.net"&gt;container@storageaccount.dfs.core.windows.net&lt;/a&gt;/data’; ✅ Correct Answer&lt;/p&gt;

&lt;p&gt;C. CREATE CATALOG schema2&lt;br&gt;&lt;br&gt;
MANAGED LOCATION ‘abfss://&lt;a href="mailto:container@storageaccount.dfs.core.windows.net"&gt;container@storageaccount.dfs.core.windows.net&lt;/a&gt;/data’;&lt;/p&gt;

&lt;p&gt;D. CREATE SCHEMA catalog1.schema2&lt;br&gt;&lt;br&gt;
WITH DBPROPERTIES (LOCATION-’abfss://&lt;a href="mailto:container@storageaccount.dfs.core.windows.net"&gt;container@storageaccount.dfs.core.windows.net&lt;/a&gt;/data’);&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 6
&lt;/h2&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog and contains a catalog named finance, finance contains two schemas named default and procurement.&lt;/p&gt;

&lt;p&gt;You need to create a table named assets in the procurement schema, assets must contain the following columns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;asset_id&lt;/li&gt;
&lt;li&gt;asset_type&lt;/li&gt;
&lt;li&gt;asset_name&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How should you complete the SQL statement?&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;CATALOG&lt;/span&gt; &lt;span class="n"&gt;finance&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="n"&gt;procurement&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;assets&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;asset_id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;asset_name&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;asset_type&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 15
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Useful case information
&lt;/h3&gt;

&lt;p&gt;Contoso identifies the following governance requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Centralize the metadata catalog.&lt;/li&gt;
&lt;li&gt;Provide isolated development areas that follow standard naming conventions.&lt;/li&gt;
&lt;li&gt;Establish a consistent structure for organizing raw, cleansed, and curated data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You need to organize Unity Catalog. The solution must meet the governance requirements.&lt;/p&gt;

&lt;p&gt;What should you do?&lt;/p&gt;

&lt;p&gt;A. Use a single shared schema for all the development teams and rely on table-level permissions for isolation.&lt;/p&gt;

&lt;p&gt;B. Enable the development teams to create objects directly in the default catalog and schema.&lt;/p&gt;

&lt;p&gt;C. Create a separate catalog for each development team and enable each team to choose its own schema names.&lt;/p&gt;

&lt;p&gt;D. Create a shared development catalog, enforce a standardized naming convention, and assign each development team its own schema. ✅ Correct Answer&lt;/p&gt;


&lt;h2&gt;
  
  
  Question 30
&lt;/h2&gt;

&lt;p&gt;Your company has sales, finance, and HR departments.&lt;/p&gt;

&lt;p&gt;You have an Azure Databricks workspace that is enabled for Unity Catalog.&lt;/p&gt;

&lt;p&gt;You need to implement Unity Catalog to meet the following requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Access to Unity Catalog for each department must be managed independently from that of the other departments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The data assets of each department must be isolated logically from those of the other departments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The solution must support centralized governance.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What should you do for each department?&lt;/p&gt;

&lt;p&gt;A. Create a separate Azure Data Lake Storage Gen2 account.&lt;/p&gt;

&lt;p&gt;B. Create dynamic views.&lt;/p&gt;

&lt;p&gt;C. Create a new workspace.&lt;/p&gt;

&lt;p&gt;D. Create a new catalog. ✅ Correct Answer&lt;/p&gt;


&lt;h1&gt;
  
  
  Key takeaways
&lt;/h1&gt;

&lt;p&gt;For DP-750, Unity Catalog object model questions are usually about &lt;strong&gt;where objects belong&lt;/strong&gt; and &lt;strong&gt;how to organize them for governance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Remember these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Unity Catalog uses the namespace: &lt;code&gt;catalog.schema.object&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A catalog is the first level of data organization and logical isolation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A schema is the second level and often represents a project, use case, or team sandbox.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tables, views, volumes, functions, and models live inside schemas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To create a schema inside a catalog, use &lt;code&gt;CREATE SCHEMA catalog.schema&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To specify a Unity Catalog schema storage path, use &lt;code&gt;MANAGED LOCATION&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For independent department-level access, create separate catalogs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For isolated development areas with standard naming, use one shared development catalog and one schema per team.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you understand the object model, many Unity Catalog questions become much easier because you can identify whether the answer should be at the catalog level, schema level, or table level.&lt;/p&gt;


&lt;h2&gt;
  
  
  Explore more
&lt;/h2&gt;


&lt;div class="ltag__user ltag__user__id__1230121"&gt;
    &lt;a href="/luca1iu" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1230121%2F2521cc84-ad7d-458c-99e5-b4d82f625a88.jpg" alt="luca1iu image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/luca1iu"&gt;Jin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/luca1iu"&gt;Hello there! 👋 I'm Jin, a Business Intelligence Developer with a passion for all things data. Proficient in Python, SQL, Power BI, Tableau&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/lucaliu-data" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Luca_DataTeam" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Connect with me on X&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>databricks</category>
      <category>certification</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
