<?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 merge breaking persistance of dataframe in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/merge-breaking-persistance-of-dataframe/m-p/43827#M27582</link>
    <description>&lt;P&gt;Hi all&lt;BR /&gt;&lt;BR /&gt;In the minimal example below you can see that executing a merge statement trigger recomputation of a persisted dataframe. How does this happen?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;from delta.tables import DeltaTable

table_name = "hive_metastore.default.test_table"

# initialize table
data = [{"column1": 1}]
df = spark.createDataFrame(data)
df.write.saveAsTable(table_name, mode="overwrite")
dt_dummy = DeltaTable.forName(spark, table_name)

# Create new data
new_data = [{"column1": 2}]
df_new = spark.createDataFrame(new_data)

# Identify differences
df_diff = dt_dummy.toDF().join(df_new, "column1", "outer")
df_diff = df_diff.persist()
print(f"we now have {df_diff.count()} records in our data")

# Execute merge
print("executing merge")
merge_results = (
    dt_dummy.alias("deltatable")
    .merge(df_diff.alias("updates"), "updates.column1 != deltatable.column1")
    .whenMatchedUpdateAll()
).execute()
# Identify differences after merge
print(f"we now have {df_diff.count()} records in our persisted data")

# --&amp;gt; recompute of persisted dataframe happened&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="FabriceDeseyn_1-1694011507567.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/3525iF04696F08740F9BB/image-size/medium/is-moderation-mode/true?v=v2&amp;amp;px=400" role="button" title="FabriceDeseyn_1-1694011507567.png" alt="FabriceDeseyn_1-1694011507567.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is run on DBR 13.2 and 13.3 LTS.&lt;/P&gt;</description>
    <pubDate>Wed, 06 Sep 2023 14:47:11 GMT</pubDate>
    <dc:creator>FabriceDeseyn</dc:creator>
    <dc:date>2023-09-06T14:47:11Z</dc:date>
    <item>
      <title>merge breaking persistance of dataframe</title>
      <link>https://community.databricks.com/t5/data-engineering/merge-breaking-persistance-of-dataframe/m-p/43827#M27582</link>
      <description>&lt;P&gt;Hi all&lt;BR /&gt;&lt;BR /&gt;In the minimal example below you can see that executing a merge statement trigger recomputation of a persisted dataframe. How does this happen?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;from delta.tables import DeltaTable

table_name = "hive_metastore.default.test_table"

# initialize table
data = [{"column1": 1}]
df = spark.createDataFrame(data)
df.write.saveAsTable(table_name, mode="overwrite")
dt_dummy = DeltaTable.forName(spark, table_name)

# Create new data
new_data = [{"column1": 2}]
df_new = spark.createDataFrame(new_data)

# Identify differences
df_diff = dt_dummy.toDF().join(df_new, "column1", "outer")
df_diff = df_diff.persist()
print(f"we now have {df_diff.count()} records in our data")

# Execute merge
print("executing merge")
merge_results = (
    dt_dummy.alias("deltatable")
    .merge(df_diff.alias("updates"), "updates.column1 != deltatable.column1")
    .whenMatchedUpdateAll()
).execute()
# Identify differences after merge
print(f"we now have {df_diff.count()} records in our persisted data")

# --&amp;gt; recompute of persisted dataframe happened&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="FabriceDeseyn_1-1694011507567.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/3525iF04696F08740F9BB/image-size/medium/is-moderation-mode/true?v=v2&amp;amp;px=400" role="button" title="FabriceDeseyn_1-1694011507567.png" alt="FabriceDeseyn_1-1694011507567.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is run on DBR 13.2 and 13.3 LTS.&lt;/P&gt;</description>
      <pubDate>Wed, 06 Sep 2023 14:47:11 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/merge-breaking-persistance-of-dataframe/m-p/43827#M27582</guid>
      <dc:creator>FabriceDeseyn</dc:creator>
      <dc:date>2023-09-06T14:47:11Z</dc:date>
    </item>
  </channel>
</rss>

