<?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 Issues recreating Tables with enableRowTracking and DBR16.4 and below in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/issues-recreating-tables-with-enablerowtracking-and-dbr16-4-and/m-p/139088#M51090</link>
    <description>&lt;P&gt;We are running a Deep Clone script to copy Catalogs between Environments; this script is run through a job (run by SP) with DBR 16.4.12.&lt;/P&gt;&lt;P&gt;Some tables are Deep Cloned and other ones are Dropped and Recreated to load partial data. The ones dropped are recreated through a "SHOW CREATE TABLE" result. The issue comes with certain tables with enableRowTracking that it retrieves both '&lt;SPAN&gt;delta.rowTracking.materializedRowCommitVersionColumnName' and 'delta.rowTracking.materializedRowIdColumnName' which are table properties not allowed in creation, which results in:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;[DELTA_UNKNOWN_CONFIGURATION] Unknown configuration was specified: delta.rowTracking.materializedRowCommitVersionColumnName&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;We have most of the tables with enableRowTracking activated and it does fails only with some of thems. I attach here the CREATE statement of a failing table:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;CREATE TABLE Catalog.Schema.Table (
  XXX STRING,
  XXX STRING,
  XXX TIMESTAMP,
  XXX STRING,
  XXX STRING,
  XXX STRING,
  XXX INT,
  XXX DATE,
  XXX STRING,
  XXX STRING,
  XXX STRING,
  XXX STRING,
  XXX TIMESTAMP)
USING delta
TBLPROPERTIES (
  'delta.columnMapping.mode' = 'name',
  'delta.enableChangeDataFeed' = 'true',
  'delta.enableDeletionVectors' = 'true',
  'delta.enableRowTracking' = 'true',
  'delta.feature.appendOnly' = 'supported',
  'delta.feature.changeDataFeed' = 'supported',
  'delta.feature.columnMapping' = 'supported',
  'delta.feature.deletionVectors' = 'supported',
  'delta.feature.domainMetadata' = 'supported',
  'delta.feature.invariants' = 'supported',
  'delta.feature.rowTracking' = 'supported',
  'delta.minReaderVersion' = '3',
  'delta.minWriterVersion' = '7',
  'delta.rowTracking.materializedRowCommitVersionColumnName' = '_row-commit-version-col-UID',
  'delta.rowTracking.materializedRowIdColumnName' = '_row-id-col-UID')&lt;/LI-CODE&gt;&lt;P&gt;It's true that we have tested with DBR 17.3 and it works, since it removes those properties; but we are not yet ready to migrate to Scala 2.13 and thus we want to understand if there is some interaction into the Delta Tables features that forces this error and how to avoid.&lt;/P&gt;</description>
    <pubDate>Fri, 14 Nov 2025 12:38:22 GMT</pubDate>
    <dc:creator>DarioB</dc:creator>
    <dc:date>2025-11-14T12:38:22Z</dc:date>
    <item>
      <title>Issues recreating Tables with enableRowTracking and DBR16.4 and below</title>
      <link>https://community.databricks.com/t5/data-engineering/issues-recreating-tables-with-enablerowtracking-and-dbr16-4-and/m-p/139088#M51090</link>
      <description>&lt;P&gt;We are running a Deep Clone script to copy Catalogs between Environments; this script is run through a job (run by SP) with DBR 16.4.12.&lt;/P&gt;&lt;P&gt;Some tables are Deep Cloned and other ones are Dropped and Recreated to load partial data. The ones dropped are recreated through a "SHOW CREATE TABLE" result. The issue comes with certain tables with enableRowTracking that it retrieves both '&lt;SPAN&gt;delta.rowTracking.materializedRowCommitVersionColumnName' and 'delta.rowTracking.materializedRowIdColumnName' which are table properties not allowed in creation, which results in:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;[DELTA_UNKNOWN_CONFIGURATION] Unknown configuration was specified: delta.rowTracking.materializedRowCommitVersionColumnName&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;We have most of the tables with enableRowTracking activated and it does fails only with some of thems. I attach here the CREATE statement of a failing table:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;CREATE TABLE Catalog.Schema.Table (
  XXX STRING,
  XXX STRING,
  XXX TIMESTAMP,
  XXX STRING,
  XXX STRING,
  XXX STRING,
  XXX INT,
  XXX DATE,
  XXX STRING,
  XXX STRING,
  XXX STRING,
  XXX STRING,
  XXX TIMESTAMP)
USING delta
TBLPROPERTIES (
  'delta.columnMapping.mode' = 'name',
  'delta.enableChangeDataFeed' = 'true',
  'delta.enableDeletionVectors' = 'true',
  'delta.enableRowTracking' = 'true',
  'delta.feature.appendOnly' = 'supported',
  'delta.feature.changeDataFeed' = 'supported',
  'delta.feature.columnMapping' = 'supported',
  'delta.feature.deletionVectors' = 'supported',
  'delta.feature.domainMetadata' = 'supported',
  'delta.feature.invariants' = 'supported',
  'delta.feature.rowTracking' = 'supported',
  'delta.minReaderVersion' = '3',
  'delta.minWriterVersion' = '7',
  'delta.rowTracking.materializedRowCommitVersionColumnName' = '_row-commit-version-col-UID',
  'delta.rowTracking.materializedRowIdColumnName' = '_row-id-col-UID')&lt;/LI-CODE&gt;&lt;P&gt;It's true that we have tested with DBR 17.3 and it works, since it removes those properties; but we are not yet ready to migrate to Scala 2.13 and thus we want to understand if there is some interaction into the Delta Tables features that forces this error and how to avoid.&lt;/P&gt;</description>
      <pubDate>Fri, 14 Nov 2025 12:38:22 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/issues-recreating-tables-with-enablerowtracking-and-dbr16-4-and/m-p/139088#M51090</guid>
      <dc:creator>DarioB</dc:creator>
      <dc:date>2025-11-14T12:38:22Z</dc:date>
    </item>
    <item>
      <title>Re: Issues recreating Tables with enableRowTracking and DBR16.4 and below</title>
      <link>https://community.databricks.com/t5/data-engineering/issues-recreating-tables-with-enablerowtracking-and-dbr16-4-and/m-p/139327#M51161</link>
      <description>&lt;P&gt;Happy Monday&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/167357"&gt;@DarioB&lt;/a&gt;&amp;nbsp;, I did some digging and would like to provide you with some helpful hints/tips.&lt;/P&gt;
&lt;P class="qt3gz91 paragraph"&gt;Thanks for the detailed context—this is a known rough edge in DBR 16.x when recreating tables that have row tracking materialized.&lt;/P&gt;
&lt;H3 class="_7uu25p0 qt3gz9c _7pq7t612 heading3 _7uu25p1"&gt;What’s happening and why it only fails for some tables&lt;/H3&gt;
&lt;UL class="qt3gz97 qt3gz92"&gt;
&lt;LI class="qt3gz9a"&gt;
&lt;P class="qt3gz91 paragraph"&gt;The two keys you see in SHOW CREATE TABLE—&lt;STRONG&gt;delta.rowTracking.materializedRowCommitVersionColumnName&lt;/STRONG&gt; and &lt;STRONG&gt;delta.rowTracking.materializedRowIdColumnName&lt;/STRONG&gt;—are internal, auto-generated names of the materialized metadata columns used by the row tracking feature. They are not user-settable and are rejected during CREATE/REPLACE, hence the DELTA_UNKNOWN_CONFIGURATION error.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI class="qt3gz9a"&gt;
&lt;P class="qt3gz91 paragraph"&gt;In DBR 16.x, SHOW CREATE TABLE sometimes includes these internal keys in the TBLPROPERTIES output, which tempts scripts to replay them into a CREATE TABLE. That is a bug that the Delta team tracked and fixed by filtering these keys from SHOW CREATE TABLE output in newer runtimes.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI class="qt3gz9a"&gt;
&lt;P class="qt3gz91 paragraph"&gt;You only see the failure on a subset of tables because SHOW CREATE TABLE only emits these row-tracking materialization keys for tables where the row-tracking metadata columns were actually materialized (for example, after enabling row tracking and certain operations); tables that have row tracking enabled but no materialized columns won’t show them, so their recreated DDL doesn’t trip the error.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3 class="_7uu25p0 qt3gz9c _7pq7t612 heading3 _7uu25p1"&gt;Why DBR 17.3 “just works”&lt;/H3&gt;
&lt;UL class="qt3gz97 qt3gz92"&gt;
&lt;LI class="qt3gz9a"&gt;Newer DBR versions filter these internal row-tracking properties out of SHOW CREATE TABLE, so replayed DDL won’t include them and CREATE succeeds (as you observed). The intent of the fix was exactly to prevent these properties from appearing in SHOW CREATE output.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3 class="_7uu25p0 qt3gz9c _7pq7t612 heading3 _7uu25p1"&gt;Workarounds on DBR 16.4.12 (Scala 2.12), without upgrading&lt;/H3&gt;
&lt;P class="qt3gz91 paragraph"&gt;Pick one of the following approaches:&lt;/P&gt;
&lt;UL class="qt3gz97 qt3gz92"&gt;
&lt;LI class="qt3gz9a"&gt;
&lt;P class="qt3gz91 paragraph"&gt;Sanitize the SHOW CREATE TABLE output before replay:&lt;/P&gt;
&lt;UL class="qt3gz98 qt3gz92"&gt;
&lt;LI class="qt3gz9a"&gt;Strip the two internal keys from the TBLPROPERTIES block:
&lt;UL class="qt3gz99 qt3gz92"&gt;
&lt;LI class="qt3gz9a"&gt;delta.rowTracking.materializedRowCommitVersionColumnName&lt;/LI&gt;
&lt;LI class="qt3gz9a"&gt;delta.rowTracking.materializedRowIdColumnName&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI class="qt3gz9a"&gt;Keep delta.enableRowTracking='true' and other supported properties; the internal names will be auto-generated by Delta when needed, you must not set them explicitly.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI class="qt3gz9a"&gt;
&lt;P class="qt3gz91 paragraph"&gt;For external tables pointing to an existing Delta location, create the table without specifying any properties. Delta will honor the properties from the existing _delta_log at that location, avoiding the “properties mismatch” dance entirely.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI class="qt3gz9a"&gt;
&lt;P class="qt3gz91 paragraph"&gt;If you hit “[DELTA_CREATE_TABLE_WITH_DIFFERENT_PROPERTY] … do not match existing properties” when recreating over an existing location:&lt;/P&gt;
&lt;UL class="qt3gz98 qt3gz92"&gt;
&lt;LI class="qt3gz9a"&gt;Do not add the two internal row-tracking materialization keys (they’ll be rejected).&lt;/LI&gt;
&lt;LI class="qt3gz9a"&gt;Either create as EXTERNAL without properties (and let the existing log win), or avoid specifying properties that differ from the location’s metadata, since DBR 16.x strictly compares them.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="qt3gz91 paragraph"&gt;Notes and cautions:&lt;/P&gt;
&lt;UL class="qt3gz97 qt3gz92"&gt;
&lt;LI class="qt3gz9a"&gt;The DELTA_UNKNOWN_CONFIGURATION error is a Class F0000 configuration-file error in the SQLSTATE catalog (that’s why it looks like a configuration rejection rather than a parsing error).&lt;/LI&gt;
&lt;LI class="qt3gz9a"&gt;Don’t use spark.databricks.delta.allowArbitraryProperties.enabled=true to bypass this; that knob is discussed for a different config class and isn’t appropriate for internal row-tracking keys. Better to strip the keys than force acceptance of unsupported properties.&lt;/LI&gt;
&lt;LI class="qt3gz9a"&gt;The internal keys are set automatically by Delta when row tracking is enabled and certain operations (such as Liquid clustering) require them; you shouldn’t manage them yourself.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3 class="_7uu25p0 qt3gz9c _7pq7t612 heading3 _7uu25p1"&gt;Drop-in sanitizer you can put in your job&lt;/H3&gt;
&lt;P class="qt3gz91 paragraph"&gt;Here’s a small helper to remove the problematic keys from a SHOW CREATE TABLE statement before executing it:&lt;/P&gt;
&lt;DIV class="go8b9g1 _7pq7t6cl" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-python qt3gz9e hljs language-python _1ymogdh2"&gt;&lt;SPAN class="hljs-keyword"&gt;import&lt;/SPAN&gt; re

INTERNAL_RT_KEYS = [
    &lt;SPAN class="hljs-string"&gt;"delta.rowTracking.materializedRowCommitVersionColumnName"&lt;/SPAN&gt;,
    &lt;SPAN class="hljs-string"&gt;"delta.rowTracking.materializedRowIdColumnName"&lt;/SPAN&gt;,
]

&lt;SPAN class="hljs-keyword"&gt;def&lt;/SPAN&gt; &lt;SPAN class="hljs-title function_"&gt;sanitize_show_create&lt;/SPAN&gt;(&lt;SPAN class="hljs-params"&gt;ddl: &lt;SPAN class="hljs-built_in"&gt;str&lt;/SPAN&gt;&lt;/SPAN&gt;) -&amp;gt; &lt;SPAN class="hljs-built_in"&gt;str&lt;/SPAN&gt;:
    &lt;SPAN class="hljs-comment"&gt;# Remove lines inside TBLPROPERTIES that set either internal RT key&lt;/SPAN&gt;
    lines = ddl.splitlines()
    cleaned = []
    &lt;SPAN class="hljs-keyword"&gt;for&lt;/SPAN&gt; ln &lt;SPAN class="hljs-keyword"&gt;in&lt;/SPAN&gt; lines:
        &lt;SPAN class="hljs-keyword"&gt;if&lt;/SPAN&gt; &lt;SPAN class="hljs-string"&gt;"TBLPROPERTIES"&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;in&lt;/SPAN&gt; ln:
            cleaned.append(ln)
            &lt;SPAN class="hljs-keyword"&gt;continue&lt;/SPAN&gt;
        &lt;SPAN class="hljs-comment"&gt;# Drop any property assignment containing those keys&lt;/SPAN&gt;
        &lt;SPAN class="hljs-keyword"&gt;if&lt;/SPAN&gt; &lt;SPAN class="hljs-built_in"&gt;any&lt;/SPAN&gt;(k &lt;SPAN class="hljs-keyword"&gt;in&lt;/SPAN&gt; ln &lt;SPAN class="hljs-keyword"&gt;for&lt;/SPAN&gt; k &lt;SPAN class="hljs-keyword"&gt;in&lt;/SPAN&gt; INTERNAL_RT_KEYS):
            &lt;SPAN class="hljs-keyword"&gt;continue&lt;/SPAN&gt;
        cleaned.append(ln)
    &lt;SPAN class="hljs-comment"&gt;# Also handle cases where properties appear comma-separated on one line&lt;/SPAN&gt;
    ddl_clean = &lt;SPAN class="hljs-string"&gt;"\n"&lt;/SPAN&gt;.join(cleaned)
    &lt;SPAN class="hljs-keyword"&gt;for&lt;/SPAN&gt; k &lt;SPAN class="hljs-keyword"&gt;in&lt;/SPAN&gt; INTERNAL_RT_KEYS:
        ddl_clean = re.sub(
            &lt;SPAN class="hljs-string"&gt;rf"(?i)\s*'&lt;SPAN class="hljs-subst"&gt;{re.escape(k)}&lt;/SPAN&gt;'\s*=\s*'[^']*'\s*,?\s*"&lt;/SPAN&gt;, 
            &lt;SPAN class="hljs-string"&gt;""&lt;/SPAN&gt;, 
            ddl_clean
        )
    &lt;SPAN class="hljs-comment"&gt;# Fix potential trailing commas before closing parenthesis&lt;/SPAN&gt;
    ddl_clean = re.sub(&lt;SPAN class="hljs-string"&gt;r",\s*)"&lt;/SPAN&gt;, &lt;SPAN class="hljs-string"&gt;")"&lt;/SPAN&gt;, ddl_clean)
    &lt;SPAN class="hljs-keyword"&gt;return&lt;/SPAN&gt; ddl_clean&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="go8b9g3 _7pq7t62y _7pq7t6cm _7pq7t6ay _7pq7t6bo"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="_7pq7t614 _7pq7t6cl wrz27r2 wrz27r0"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;H3 class="_7uu25p0 qt3gz9c _7pq7t612 heading3 _7uu25p1"&gt;If you want to be extra-safe&lt;/H3&gt;
&lt;UL class="qt3gz97 qt3gz92"&gt;
&lt;LI class="qt3gz9a"&gt;Beyond the two row-tracking materialization keys, ensure your script does not attempt to set other delta-internal metadata keys that are not meant for CREATE (SHOW CREATE in 16.x generally doesn’t emit them, but filtering by a denylist keeps you robust). The confirmed denylist for this issue remains the two row-tracking keys above.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3 class="_7uu25p0 qt3gz9c _7pq7t612 heading3 _7uu25p1"&gt;Summary&lt;/H3&gt;
&lt;UL class="qt3gz97 qt3gz92"&gt;
&lt;LI class="qt3gz9a"&gt;Root cause: SHOW CREATE TABLE on DBR 16.4 sometimes emits internal row-tracking materialization properties that are rejected at CREATE; this was fixed later by filtering them out.&lt;/LI&gt;
&lt;LI class="qt3gz9a"&gt;Best workaround on 16.4: strip those two properties from the DDL before replay, or create external tables without properties over existing locations.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Hope this helps, Louis.&lt;/P&gt;</description>
      <pubDate>Mon, 17 Nov 2025 12:10:49 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/issues-recreating-tables-with-enablerowtracking-and-dbr16-4-and/m-p/139327#M51161</guid>
      <dc:creator>Louis_Frolio</dc:creator>
      <dc:date>2025-11-17T12:10:49Z</dc:date>
    </item>
  </channel>
</rss>

