<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Materialized View with Incremental Refresh - Change Data Feed required on source tables? in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/materialized-view-with-incremental-refresh-change-data-feed/m-p/174403#M56847</link>
    <description>&lt;P&gt;Question:&lt;/P&gt;&lt;P&gt;To create a &lt;U&gt;materialized view with incremental refresh&lt;/U&gt;, is the Delta Lake feature Change Data Feed required on all of the source tables that the materialized view consumes? Or, is it not required for the &lt;U&gt;creation&lt;/U&gt; of the materialized view, but for running the incremental refresh, i.e. would the materialized view created with the REFRESH POLICY = INCREMENTAL actually only perform full refresh if Change Data Feed is not enabled on at least one the source tables?&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/sql/mv-st/materialized#incremental-refresh" target="_self"&gt;This documentation&lt;/A&gt; states that Change Data Feed is only recommended (i.e. &lt;U&gt;not required&lt;/U&gt;), but I have found other sources stating that it is actually a requirement. I know that cited source is an official one, but I have found mistakes in the official Databricks documentation in the past with other topics, so I don't really trust this information.&lt;/P&gt;</description>
    <pubDate>Fri, 23 Oct 2026 08:08:03 GMT</pubDate>
    <dc:creator>johnb1</dc:creator>
    <dc:date>2026-10-23T08:08:03Z</dc:date>
    <item>
      <title>Materialized View with Incremental Refresh - Change Data Feed required on source tables?</title>
      <link>https://community.databricks.com/t5/data-engineering/materialized-view-with-incremental-refresh-change-data-feed/m-p/174403#M56847</link>
      <description>&lt;P&gt;Question:&lt;/P&gt;&lt;P&gt;To create a &lt;U&gt;materialized view with incremental refresh&lt;/U&gt;, is the Delta Lake feature Change Data Feed required on all of the source tables that the materialized view consumes? Or, is it not required for the &lt;U&gt;creation&lt;/U&gt; of the materialized view, but for running the incremental refresh, i.e. would the materialized view created with the REFRESH POLICY = INCREMENTAL actually only perform full refresh if Change Data Feed is not enabled on at least one the source tables?&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/sql/mv-st/materialized#incremental-refresh" target="_self"&gt;This documentation&lt;/A&gt; states that Change Data Feed is only recommended (i.e. &lt;U&gt;not required&lt;/U&gt;), but I have found other sources stating that it is actually a requirement. I know that cited source is an official one, but I have found mistakes in the official Databricks documentation in the past with other topics, so I don't really trust this information.&lt;/P&gt;</description>
      <pubDate>Fri, 23 Oct 2026 08:08:03 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/materialized-view-with-incremental-refresh-change-data-feed/m-p/174403#M56847</guid>
      <dc:creator>johnb1</dc:creator>
      <dc:date>2026-10-23T08:08:03Z</dc:date>
    </item>
    <item>
      <title>Re: Materialized View with Incremental Refresh - Change Data Feed required on source tables?</title>
      <link>https://community.databricks.com/t5/data-engineering/materialized-view-with-incremental-refresh-change-data-feed/m-p/174431#M56853</link>
      <description>&lt;P&gt;Hi &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/79252"&gt;@johnb1&lt;/a&gt; - Change Data Feed (CDF) is actually not an universal requirement for creating an incremental materialized view, but it will help with performance aspects for your pipeline and support on incremental strategy.&lt;BR /&gt;&lt;BR /&gt;By using&amp;nbsp;&lt;SPAN&gt;REFRESH POLICY = INCREMENTAL&lt;/SPAN&gt;&lt;SPAN&gt;, Databricks can fall back to a full refresh when incremental refresh is not possible. By contrast, you may also want use&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;REFRESH POLICY = INCREMENTAL STRICT&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;with CDF disabled to test whether the view can be refreshed incrementally without silently falling back to a full refresh.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 23 Oct 2026 13:51:59 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/materialized-view-with-incremental-refresh-change-data-feed/m-p/174431#M56853</guid>
      <dc:creator>leopedroso1909</dc:creator>
      <dc:date>2026-10-23T13:51:59Z</dc:date>
    </item>
    <item>
      <title>Re: Materialized View with Incremental Refresh - Change Data Feed required on source tables?</title>
      <link>https://community.databricks.com/t5/data-engineering/materialized-view-with-incremental-refresh-change-data-feed/m-p/174435#M56854</link>
      <description>&lt;P&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/79252"&gt;@johnb1&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tested this on Databricks with multiple runs to verify whether Change Data Feed (CDF) is required on source Delta tables for incremental Materialized View refresh.&lt;/P&gt;&lt;P&gt;I created three source configurations and tested INSERT, UPDATE, and DELETE operations against the same GROUP BY Materialized View query.&lt;/P&gt;&lt;P&gt;Source configuration&lt;/P&gt;&lt;TABLE border="1" width="99.9079754601227%"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="25%" height="30px"&gt;&lt;STRONG&gt;INSERT&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD width="25%" height="30px"&gt;&lt;STRONG&gt;UPDATE&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD width="25%" height="30px"&gt;&lt;STRONG&gt;DELETE&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="24.9079754601227%" height="58px"&gt;&lt;SPAN&gt;Row tracking ON, CDF OFF&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width="25%" height="58px"&gt;&lt;SPAN&gt;Incremental&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width="25%" height="58px"&gt;&lt;SPAN&gt;Incremental&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width="25%" height="58px"&gt;&lt;SPAN&gt;Incremental&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="24.9079754601227%" height="30px"&gt;&lt;SPAN&gt;Row tracking ON, CDF ON&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width="25%" height="30px"&gt;&lt;SPAN&gt;Incremental&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width="25%" height="30px"&gt;&lt;SPAN&gt;Incremental&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width="25%" height="30px"&gt;&lt;SPAN&gt;Incremental&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="24.9079754601227%" height="58px"&gt;&lt;SPAN&gt;Row tracking OFF, CDF OFF&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width="25%" height="58px"&gt;&lt;SPAN&gt;Incremental&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width="25%" height="58px"&gt;&lt;SPAN&gt;Incremental&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width="25%" height="58px"&gt;&lt;SPAN&gt;Incremental&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;All nine refreshes used the &lt;STRONG&gt;GROUP_AGGREGATE&lt;/STRONG&gt; incremental maintenance technique, confirmed through Lakeflow planning events and matched with the expected aggregate results.&lt;/P&gt;&lt;P&gt;An &lt;STRONG&gt;important&lt;/STRONG&gt; recent development is&lt;STRONG&gt; Automatic Change Data Feed (Auto CDF).&lt;/STRONG&gt; On supported Unity Catalog Delta tables with row tracking enabled,&lt;STRONG&gt; Databricks can compute change data automatically without explicitly setting&lt;/STRONG&gt; &lt;STRONG&gt;delta.enableChangeDataFeed=true&lt;/STRONG&gt;. This is different from legacy CDF, which requires that property.&lt;/P&gt;&lt;P&gt;Interestingly, my test also showed incremental refresh with both CDF and row tracking disabled for this particular aggregation. So e&lt;STRONG&gt;xplicit source CDF isn't a universal requirement for incremental MV refresh&lt;/STRONG&gt;, although different queries may have additional requirements.&lt;/P&gt;&lt;P&gt;Regarding refresh policies:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;INCREMENTAL prefers incremental processing but allows full-recompute fallback.&lt;/LI&gt;&lt;LI&gt;INCREMENTAL STRICT requires incrementalization for normal refreshes, initial population may still use a full computation.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;My suggestion:&lt;/STRONG&gt; Check the actual refresh technique in Lakeflow's planning events or incrementalization insights rather than assuming the presence or absence of CDF determines refresh behaviour.&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;These observations are specific to the tested query and runtime, not a guarantee for every MV definition.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 23 Oct 2026 14:49:38 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/materialized-view-with-incremental-refresh-change-data-feed/m-p/174435#M56854</guid>
      <dc:creator>data_pulse</dc:creator>
      <dc:date>2026-10-23T14:49:38Z</dc:date>
    </item>
    <item>
      <title>Re: Materialized View with Incremental Refresh - Change Data Feed required on source tables?</title>
      <link>https://community.databricks.com/t5/data-engineering/materialized-view-with-incremental-refresh-change-data-feed/m-p/174493#M56867</link>
      <description>&lt;P&gt;Hello &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/79252"&gt;@johnb1&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;Following up with the doc references behind the two answers above, and thank you for the test runs in the second one.&lt;/P&gt;
&lt;P&gt;Change data feed is a performance recommendation. No documented check, error code or refresh rule makes it a condition for creating the view or for refreshing it incrementally. Row tracking is the property that some queries need, and the docs mark which clauses need it.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Some pointers about the source tables:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Change data feed:&lt;/STRONG&gt; &lt;A href="https://docs.databricks.com/aws/en/sql/mv-st/materialized#incremental-refresh" target="_blank"&gt;Enabling change data feed is recommended for better incremental refresh performance&lt;/A&gt;. The &lt;A href="https://docs.databricks.com/aws/en/ldp/incremental-refresh#optimize-materialized-views" target="_blank"&gt;optimisation section&lt;/A&gt; recommends deletion vectors, row tracking and change data feed on every source table "to get the best performance".&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Row tracking:&lt;/STRONG&gt; The &lt;A href="https://docs.databricks.com/aws/en/ldp/incremental-refresh#support-for-materialized-view-incremental-refresh" target="_blank"&gt;table of supported clauses&lt;/A&gt; stars the ones that need row tracking: &lt;CODE&gt;SELECT&lt;/CODE&gt; expressions, &lt;CODE&gt;UNION ALL&lt;/CODE&gt;, &lt;CODE&gt;WHERE&lt;/CODE&gt; and &lt;CODE&gt;HAVING&lt;/CODE&gt;, and the joins. &lt;CODE&gt;GROUP BY&lt;/CODE&gt; has no star. The standalone page words it more strongly and says &lt;A href="https://docs.databricks.com/aws/en/sql/mv-st/materialized#enabling-row-tracking" target="_blank"&gt;row tracking must be enabled on Delta source tables&lt;/A&gt;. Enabling it on every source covers both readings.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The failure reasons:&lt;/STRONG&gt; A refresh that cannot meet &lt;CODE&gt;INCREMENTAL STRICT&lt;/CODE&gt; fails with an error whose &lt;A href="https://docs.databricks.com/aws/en/error-messages/materialized-view-not-incrementalizable-error-class" target="_blank"&gt;reference page lists eight reasons&lt;/A&gt;. &lt;CODE&gt;ROW_TRACKING_NOT_ENABLED&lt;/CODE&gt; is one of them. None of the eight mentions change data feed.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The suggested fixes:&lt;/STRONG&gt; When a refresh falls back to a full recompute, the &lt;A href="https://docs.databricks.com/aws/en/ldp/incremental-refresh#incrementalization-insights" target="_blank"&gt;incrementalization insights&lt;/A&gt; suggest enabling row tracking or deletion vectors, rewriting an operator, or moving to serverless compute. Change data feed is not on that list.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Q1.&lt;/STRONG&gt; "To create a materialized view with incremental refresh, is the Delta Lake feature Change Data Feed required on all of the source tables that the materialized view consumes?"&lt;/P&gt;
&lt;P&gt;No. The docs recommend it on every source table for performance, and no requirement names it.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q2.&lt;/STRONG&gt; "Or, is it not required for the creation of the materialized view, but for running the incremental refresh, i.e. would the materialized view created with the REFRESH POLICY = INCREMENTAL actually only perform full refresh if Change Data Feed is not enabled on at least one the source tables?"&lt;/P&gt;
&lt;P&gt;No to both parts. Under &lt;CODE&gt;INCREMENTAL&lt;/CODE&gt;, &lt;A href="https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-syntax-ddl-create-materialized-view-refresh-policy#parameters" target="_blank"&gt;the refresh runs a full refresh in two cases&lt;/A&gt;: Incremental refresh is not available, or the view needs re-initialization, for example after a schema change. For the first case, the &lt;A href="https://docs.databricks.com/aws/en/ldp/incremental-refresh#refresh-policy" target="_blank"&gt;refresh policy section&lt;/A&gt; gives "row-tracking on a source table is turned off" as the example. No page names a missing change data feed as a cause.&lt;/P&gt;
&lt;P&gt;One detail the answers above do not cover: If the query cannot be refreshed incrementally at all, &lt;A href="https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-syntax-qry-explain-materialized-view#what-explain-reports" target="_blank"&gt;the CREATE fails&lt;/A&gt; under &lt;CODE&gt;INCREMENTAL&lt;/CODE&gt; as well as &lt;CODE&gt;INCREMENTAL STRICT&lt;/CODE&gt;. A view that you created with &lt;CODE&gt;INCREMENTAL&lt;/CODE&gt; has passed the query shape check.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;How the test above fits the docs:&lt;/STRONG&gt; The &lt;CODE&gt;GROUP BY&lt;/CODE&gt; view refreshed incrementally with row tracking set to off, and &lt;CODE&gt;GROUP BY&lt;/CODE&gt; has no star in the table. Plain column references and aggregates in a &lt;CODE&gt;GROUP BY&lt;/CODE&gt; view did not trigger the row tracking check in that test, even though the table also stars &lt;CODE&gt;SELECT&lt;/CODE&gt; expressions. One case the thread has not covered yet is a starred clause, such as a &lt;CODE&gt;WHERE&lt;/CODE&gt; filter, on a source without row tracking. For that case the docs predict a failure under &lt;CODE&gt;INCREMENTAL STRICT&lt;/CODE&gt;, with &lt;CODE&gt;ROW_TRACKING_NOT_ENABLED&lt;/CODE&gt; as the reason. &lt;A href="https://docs.databricks.com/aws/en/tables/automatic-upgrades#supported-features" target="_blank"&gt;Automatic upgrades can turn row tracking on&lt;/A&gt; for Unity Catalog managed tables, so the sketch confirms the property before it creates the view. Either result would be useful here:&lt;/P&gt;
&lt;PRE&gt;-- Source without row tracking or change data feed
CREATE TABLE main.sandbox.rt_test_src (region STRING, amount BIGINT)
TBLPROPERTIES (delta.enableRowTracking = false, delta.enableChangeDataFeed = false);

INSERT INTO main.sandbox.rt_test_src VALUES ('EMEA', 10), ('AMER', 20);

-- Confirm row tracking is still off before you go on
SHOW TBLPROPERTIES main.sandbox.rt_test_src ('delta.enableRowTracking');

-- A starred clause (WHERE), with no fallback allowed
CREATE MATERIALIZED VIEW main.sandbox.rt_test_mv
REFRESH POLICY INCREMENTAL STRICT
AS SELECT region, amount FROM main.sandbox.rt_test_src WHERE amount &amp;gt; 5;

-- If the CREATE succeeds, change the source and refresh
INSERT INTO main.sandbox.rt_test_src VALUES ('EMEA', 15);
REFRESH MATERIALIZED VIEW main.sandbox.rt_test_mv;&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;Before you rely on this:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Testing:&lt;/STRONG&gt; I have not run this sketch. The &lt;CODE&gt;GROUP BY&lt;/CODE&gt; results above are the tested evidence in this thread.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The cost model:&lt;/STRONG&gt; Under the default &lt;CODE&gt;AUTO&lt;/CODE&gt; policy, &lt;A href="https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-syntax-qry-explain-materialized-view#eligibility-and-runtime-behavior" target="_blank"&gt;an eligible view can still get a full recompute&lt;/A&gt; when the cost model judges it cheaper. A full refresh under &lt;CODE&gt;AUTO&lt;/CODE&gt; does not prove that a requirement is missing.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Serverless:&lt;/STRONG&gt; &lt;A href="https://docs.databricks.com/aws/en/ldp/incremental-refresh#refreshes-run-on-serverless-compute" target="_blank"&gt;Incremental refresh runs on serverless compute&lt;/A&gt;. Views in pipelines that do not use serverless are always fully recomputed.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Recreated sources:&lt;/STRONG&gt; &lt;A href="https://docs.databricks.com/aws/en/sql/mv-st/materialized#enabling-row-tracking" target="_blank"&gt;Re-enable row tracking&lt;/A&gt; whenever you recreate a source table.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Enabling row tracking on a live table:&lt;/STRONG&gt; It &lt;A href="https://docs.databricks.com/aws/en/delta/row-tracking#enable-row-tracking-on-delta-lake-tables" target="_blank"&gt;assigns IDs to every existing row&lt;/A&gt;, which can take a long time, and concurrent writes fail while it runs. Pause streaming writes first.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Where "change data feed is required" may come from:&lt;/STRONG&gt; &lt;A href="https://docs.databricks.com/aws/en/ldp/cdc-advanced#read-a-change-data-feed-from-a-materialized-view" target="_blank"&gt;Reading a change data feed from a materialized view&lt;/A&gt; is a separate Beta feature with its own requirements. It covers changes that flow out of the view to downstream readers.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Reference documentation:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://docs.databricks.com/aws/en/ldp/incremental-refresh" target="_blank"&gt;Incremental refresh for materialized views&lt;/A&gt;: Covers the supported clauses and their row tracking star, the three recommended properties, refresh policies and the event log query. It does not say what change data feed changes inside a refresh.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://docs.databricks.com/aws/en/sql/mv-st/materialized" target="_blank"&gt;Use standalone materialized views&lt;/A&gt;: States that incremental refresh needs row tracking and that change data feed is recommended for performance.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-syntax-ddl-create-materialized-view-refresh-policy" target="_blank"&gt;REFRESH POLICY clause&lt;/A&gt;: Covers what each policy does at create and at refresh, and the error a strict refresh returns.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://docs.databricks.com/aws/en/error-messages/materialized-view-not-incrementalizable-error-class" target="_blank"&gt;MATERIALIZED_VIEW_NOT_INCREMENTALIZABLE error class&lt;/A&gt;: Lists eight reasons a strict refresh can fail. None is about change data feed.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://docs.databricks.com/aws/en/tables/automatic-upgrades" target="_blank"&gt;Automatic upgrades&lt;/A&gt;: Lists the features, row tracking included, that Databricks turns on for Unity Catalog managed tables, and how to spot them in the table history.&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-syntax-qry-explain-materialized-view" target="_blank"&gt;EXPLAIN CREATE MATERIALIZED VIEW&lt;/A&gt;: Reports whether a query is eligible before you create the view. The cost model can still choose a full recompute at runtime.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Happy to look at the result if you run the sketch and post it here.&lt;/P&gt;</description>
      <pubDate>Sat, 24 Oct 2026 00:47:58 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/materialized-view-with-incremental-refresh-change-data-feed/m-p/174493#M56867</guid>
      <dc:creator>LingeshK</dc:creator>
      <dc:date>2026-10-24T00:47:58Z</dc:date>
    </item>
    <item>
      <title>Re: Materialized View with Incremental Refresh - Change Data Feed required on source tables?</title>
      <link>https://community.databricks.com/t5/data-engineering/materialized-view-with-incremental-refresh-change-data-feed/m-p/174500#M56868</link>
      <description>&lt;P&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/79252"&gt;@johnb1&lt;/a&gt;&amp;nbsp;- Hello Johnb1 -&amp;nbsp;&amp;nbsp;CDF is not required, either to create the materialized view or to refresh it incrementally. The current Databricks docs (updated October 2026) list it only as a recommendation for better performance.&lt;/P&gt;&lt;P&gt;Row tracking is what can gate incremental refresh&lt;STRONG&gt;.&lt;/STRONG&gt; Operators like joins, UNION ALL, WHERE/HAVING and SELECT expressions need it on the source tables, while a plain GROUP BY does not.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Your second reading is closer to how it works:&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;CREATE ... REFRESH POLICY INCREMENTAL always succeeds, because the policy is a preference, not a guarantee.&lt;/LI&gt;&lt;LI&gt;At refresh time, INCREMENTAL falls back to a full recompute if the query plan can’t be incrementalized, for example when row tracking is missing on a source.&lt;/LI&gt;&lt;LI&gt;Fallback is per query operator, not per table feature, so a missing property only hurts if your query needs it.&lt;/LI&gt;&lt;LI&gt;Incremental refresh only runs on serverless compute. Classic compute always does a full recompute.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;To verify it yourself:&lt;/STRONG&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Run EXPLAIN CREATE MATERIALIZED VIEW ... to check whether the query is incrementalizable.&lt;/LI&gt;&lt;LI&gt;Use REFRESH POLICY INCREMENTAL STRICT, which fails instead of silently doing a full refresh. Test it with CDF off and row tracking on.&lt;/LI&gt;&lt;LI&gt;Query the pipeline event log (event_type = 'planning_information') to see whether a refresh was FULL_RECOMPUTE or incremental.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;STRONG&gt;Practical takeaway:&lt;/STRONG&gt; Enable row tracking and deletion vectors on all source tables, and treat CDF as optional. Older docs and blog posts did describe CDF as a prerequisite, which likely explains the conflicting sources you found.&lt;/P&gt;</description>
      <pubDate>Sat, 24 Oct 2026 07:07:04 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/materialized-view-with-incremental-refresh-change-data-feed/m-p/174500#M56868</guid>
      <dc:creator>indradbxlearn</dc:creator>
      <dc:date>2026-10-24T07:07:04Z</dc:date>
    </item>
  </channel>
</rss>

