<?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 Simple append only in DLT in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/simple-append-only-in-dlt/m-p/141162#M51639</link>
    <description>&lt;P&gt;I am facing an issue trying to find a way to insert some computed rows into a table in the context of a dlt pipeline.&lt;/P&gt;&lt;P&gt;My use case is extremely simple. Moving from bronze to silver I update several tables using a mix of streaming and materialized tables. I need also to write some rows into a silver table. I do not have a stream source to read as the rows are computed/aggregated. I tried the append_flow but that expects a stream source that I cannot provide. Using once=true works but as the param says it works only once.&amp;nbsp;&lt;/P&gt;&lt;P&gt;It seems extremely weird that DB does not support a so simple use case. Am I missing something?&lt;/P&gt;&lt;DIV&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Thu, 04 Dec 2025 13:45:07 GMT</pubDate>
    <dc:creator>andreacfm</dc:creator>
    <dc:date>2025-12-04T13:45:07Z</dc:date>
    <item>
      <title>Simple append only in DLT</title>
      <link>https://community.databricks.com/t5/data-engineering/simple-append-only-in-dlt/m-p/141162#M51639</link>
      <description>&lt;P&gt;I am facing an issue trying to find a way to insert some computed rows into a table in the context of a dlt pipeline.&lt;/P&gt;&lt;P&gt;My use case is extremely simple. Moving from bronze to silver I update several tables using a mix of streaming and materialized tables. I need also to write some rows into a silver table. I do not have a stream source to read as the rows are computed/aggregated. I tried the append_flow but that expects a stream source that I cannot provide. Using once=true works but as the param says it works only once.&amp;nbsp;&lt;/P&gt;&lt;P&gt;It seems extremely weird that DB does not support a so simple use case. Am I missing something?&lt;/P&gt;&lt;DIV&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Thu, 04 Dec 2025 13:45:07 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/simple-append-only-in-dlt/m-p/141162#M51639</guid>
      <dc:creator>andreacfm</dc:creator>
      <dc:date>2025-12-04T13:45:07Z</dc:date>
    </item>
    <item>
      <title>Re: Simple append only in DLT</title>
      <link>https://community.databricks.com/t5/data-engineering/simple-append-only-in-dlt/m-p/141167#M51642</link>
      <description>&lt;P&gt;Greetings&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/199274"&gt;@andreacfm&lt;/a&gt;,&amp;nbsp;&lt;/P&gt;
&lt;P class="p1"&gt;You’re not missing a thing. What you’re seeing is a known limitation in how DLT/Lakeflow pipelines handle &lt;SPAN class="s2"&gt;append_flow&lt;/SPAN&gt;. It really does expect a streaming source, and the &lt;SPAN class="s2"&gt;once=True&lt;/SPAN&gt; flag only fires during the first run of the pipeline or when you explicitly ask for a full refresh. So your observations line up with the intended behavior.&lt;/P&gt;
&lt;P class="p1"&gt;Let’s dig into the practical workarounds that teams typically use when they need to insert computed rows without a true streaming source.&lt;/P&gt;
&lt;H2 class="p1"&gt;Workarounds for inserting computed rows&lt;/H2&gt;
&lt;H3 class="p1"&gt;Materialized views for aggregations&lt;/H3&gt;
&lt;P class="p1"&gt;For silver-layer rollups or derived metrics, materialized views are the cleanest pattern. They’re designed for batch-style transforms, and you get predictable refresh behavior without pretending your data came from a stream.&lt;/P&gt;
&lt;P class="p1"&gt;Example:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE&gt;@dlt.table(name="silver.aggregated_metrics")
def aggregated_metrics():
    return (
        dlt.read("bronze.source_table")
            .groupBy("dimension")
            .agg(sum("metric").alias("total"))
    )&lt;/CODE&gt;&lt;/PRE&gt;
&lt;H3 class="p1"&gt;Static-lookup table pattern&lt;/H3&gt;
&lt;P class="p1"&gt;If you’re dealing with reference data — static rows, small business logic tables, etc. — define the table outside of a streaming context. DLT will treat it as a materialized view, and you can join it with streaming tables using stream-to-static joins. This preserves lineage and avoids bending the streaming model in ways it doesn’t support.&lt;/P&gt;
&lt;H3 class="p1"&gt;One-time batch append with &lt;SPAN class="s1"&gt;once=True&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P class="p1"&gt;If your logic truly needs to run only during backfills or initial ingestions, then yes, &lt;SPAN class="s1"&gt;append_flow&lt;/SPAN&gt; with &lt;SPAN class="s1"&gt;once=True&lt;/SPAN&gt; is the intended pattern. But it won’t fire repeatedly — which is exactly what you’ve run into.&lt;/P&gt;
&lt;H3 class="p1"&gt;Why the limitation exists&lt;/H3&gt;
&lt;P class="p1"&gt;DLT is deliberately built around declarative, incremental processing. It expects data to come from sources it can track over time. Arbitrary row insertion without a traceable upstream source breaks that model — especially around incremental refresh, lineage, and reproducibility. So the framework simply doesn’t allow it unless you wrap the logic in a source-driven or MV-driven construct.&lt;/P&gt;
&lt;P class="p1"&gt;Hope this helps clarify the landscape.&lt;/P&gt;
&lt;P class="p1"&gt;Regards, Louis.&lt;/P&gt;</description>
      <pubDate>Thu, 04 Dec 2025 14:31:13 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/simple-append-only-in-dlt/m-p/141167#M51642</guid>
      <dc:creator>Louis_Frolio</dc:creator>
      <dc:date>2025-12-04T14:31:13Z</dc:date>
    </item>
  </channel>
</rss>

