<?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 Adhoc Table Refresh in Lakeflow Spark Declarative Pipelines (SDP) in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/adhoc-table-refresh-in-lakeflow-spark-declarative-pipelines-sdp/m-p/159467#M54811</link>
    <description>&lt;P&gt;Hi,&lt;BR /&gt;&lt;BR /&gt;It is currently not possible to specify a list of tables to refresh and their refresh policies (full/normal) in a Lakeflow Job.&lt;BR /&gt;&lt;BR /&gt;It can be done via the REST API, but it's messy.&lt;BR /&gt;&lt;BR /&gt;For example, if you need some tables or views refreshed more regularly, the only option at the moment is to bake this into a notebook using the REST API and schedule/trigger the notebook.&lt;BR /&gt;&lt;BR /&gt;It would be useful if you could specify a list of tables in a pipeline job in the ui or DAB yaml and their refresh policy.&lt;BR /&gt;&lt;BR /&gt;Regards&lt;BR /&gt;&lt;BR /&gt;Toby&lt;/P&gt;</description>
    <pubDate>Wed, 17 Jun 2026 17:57:27 GMT</pubDate>
    <dc:creator>thedatacrew</dc:creator>
    <dc:date>2026-06-17T17:57:27Z</dc:date>
    <item>
      <title>Adhoc Table Refresh in Lakeflow Spark Declarative Pipelines (SDP)</title>
      <link>https://community.databricks.com/t5/data-engineering/adhoc-table-refresh-in-lakeflow-spark-declarative-pipelines-sdp/m-p/159467#M54811</link>
      <description>&lt;P&gt;Hi,&lt;BR /&gt;&lt;BR /&gt;It is currently not possible to specify a list of tables to refresh and their refresh policies (full/normal) in a Lakeflow Job.&lt;BR /&gt;&lt;BR /&gt;It can be done via the REST API, but it's messy.&lt;BR /&gt;&lt;BR /&gt;For example, if you need some tables or views refreshed more regularly, the only option at the moment is to bake this into a notebook using the REST API and schedule/trigger the notebook.&lt;BR /&gt;&lt;BR /&gt;It would be useful if you could specify a list of tables in a pipeline job in the ui or DAB yaml and their refresh policy.&lt;BR /&gt;&lt;BR /&gt;Regards&lt;BR /&gt;&lt;BR /&gt;Toby&lt;/P&gt;</description>
      <pubDate>Wed, 17 Jun 2026 17:57:27 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/adhoc-table-refresh-in-lakeflow-spark-declarative-pipelines-sdp/m-p/159467#M54811</guid>
      <dc:creator>thedatacrew</dc:creator>
      <dc:date>2026-06-17T17:57:27Z</dc:date>
    </item>
    <item>
      <title>Re: Adhoc Table Refresh in Lakeflow Spark Declarative Pipelines (SDP)</title>
      <link>https://community.databricks.com/t5/data-engineering/adhoc-table-refresh-in-lakeflow-spark-declarative-pipelines-sdp/m-p/160174#M54864</link>
      <description>&lt;P&gt;You’re right — this is a real gap today in Lakeflow / pipeline orchestration.&lt;/P&gt;&lt;P&gt;The current model is effectively &lt;STRONG&gt;“pipeline = unit of refresh”&lt;/STRONG&gt;, not &lt;STRONG&gt;“table/view = unit of refresh with policy”&lt;/STRONG&gt;, which makes mixed-frequency refresh use cases awkward.&lt;/P&gt;&lt;H3&gt;What people are doing today (and why it feels clunky)&lt;/H3&gt;&lt;P&gt;What you described is basically the de-facto workaround:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Maintain a list of tables&lt;/LI&gt;&lt;LI&gt;Call the &lt;STRONG&gt;REST API / pipeline refresh endpoints&lt;/STRONG&gt; programmatically&lt;/LI&gt;&lt;LI&gt;Encode &lt;STRONG&gt;full vs incremental (normal)&lt;/STRONG&gt; logic per table&lt;/LI&gt;&lt;LI&gt;Run that via a notebook/job&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;It works, but it introduces:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Operational drift&lt;/STRONG&gt; (logic hidden in notebooks instead of declarative config)&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Harder governance&lt;/STRONG&gt; (no single source of truth like DAB YAML)&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Reduced observability&lt;/STRONG&gt; (harder to map pipeline runs → table refresh behaviour)&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;So I agree — it’s “possible”, but not “productized”.&lt;/P&gt;&lt;HR /&gt;&lt;H3&gt;Why this limitation exists (likely design trade-off)&lt;/H3&gt;&lt;P&gt;Lakeflow pipelines are fundamentally designed around:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;Declarative graph execution (DAG) with dependency tracking&lt;/STRONG&gt;, not imperative per-table scheduling.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;So today:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;The system decides &lt;STRONG&gt;what needs recomputation&lt;/STRONG&gt; based on lineage&lt;/LI&gt;&lt;LI&gt;“Full vs normal refresh” is a &lt;STRONG&gt;pipeline-level override&lt;/STRONG&gt;, not a per-node (table) policy&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Adding per-table policies would effectively introduce:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Mixed &lt;STRONG&gt;execution semantics within the same DAG&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;Potential conflicts with dependency resolution (e.g., downstream tables depending on “less frequently refreshed” upstream nodes)&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;So I suspect that’s why the product hasn’t exposed this yet — it complicates the DAG contract.&lt;/P&gt;&lt;HR /&gt;&lt;H3&gt;What would actually make this usable (practical suggestion)&lt;/H3&gt;&lt;P&gt;From a platform perspective, the feature that would help most is something like:&lt;/P&gt;&lt;H4&gt;Option A: Declarative refresh policy in DAB YAML&lt;/H4&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;resources:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp; pipelines:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my_pipeline:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tables:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - name: fact_sales&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; refresh: normal&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; schedule: "*/30 * * * *"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H4&gt;Option B: Tag-based policy (more scalable)&lt;/H4&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;policies:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp; - tag: high_frequency&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; refresh: normal&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; schedule: "*/15 * * * *"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp; - tag: low_frequency&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; refresh: full&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; schedule: "0 3 * * *"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV&gt;&lt;DIV&gt;Attach tags at table level:&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN class=""&gt;CREATE OR REFRESH TABLE dim_customer&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN class=""&gt;TBLPROPERTIES ("refresh_policy" = "low_frequency")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;This avoids hardcoding table lists and scales better across pipelines.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;HR /&gt;&lt;H3&gt;What I’ve seen work reasonably well in practice&lt;/H3&gt;&lt;P&gt;Until something like this exists, a slightly cleaner pattern than raw REST-in-notebook is:&lt;/P&gt;&lt;H4&gt;1. Externalize config (don’t hardcode in notebook)&lt;/H4&gt;&lt;P&gt;Keep a config table or YAML:&lt;/P&gt;&lt;PRE&gt;table_name | refresh_type | frequency
-----------|--------------|-----------
fact_sales | normal       | 30 min
dim_customer| full        | daily&lt;/PRE&gt;&lt;H4&gt;2. Build a lightweight orchestration layer&lt;/H4&gt;&lt;UL&gt;&lt;LI&gt;Small driver notebook / job that:&lt;UL&gt;&lt;LI&gt;Reads config&lt;/LI&gt;&lt;LI&gt;Groups tables by refresh policy&lt;/LI&gt;&lt;LI&gt;Calls pipeline refresh selectively (or triggers separate pipelines)&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H4&gt;3. Split pipelines strategically&lt;/H4&gt;&lt;P&gt;Instead of one monolithic pipeline:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;High-frequency pipeline&lt;/STRONG&gt; (incremental tables)&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Low-frequency pipeline&lt;/STRONG&gt; (dimension / heavy recompute)&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;This aligns better with how Lakeflow is designed and reduces friction.&lt;/P&gt;&lt;HR /&gt;&lt;H3&gt;Where the real gap still is&lt;/H3&gt;&lt;P&gt;Even beyond UI/YAML convenience, I think the deeper gap is:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;No first-class concept of heterogeneous refresh SLAs within a single pipeline DAG&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;That shows up in multiple ways:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Can’t express &lt;STRONG&gt;SLA per dataset&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;Can’t optimize cost vs freshness tradeoffs cleanly&lt;/LI&gt;&lt;LI&gt;Forces either:&lt;UL&gt;&lt;LI&gt;Over-refreshing everything, or&lt;/LI&gt;&lt;LI&gt;Splitting pipelines (operational overhead)&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;HR /&gt;&lt;H3&gt;Bottom line&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;You’re correct — &lt;STRONG&gt;not supported natively today&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;REST workaround is common but &lt;STRONG&gt;non-ideal&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;Splitting pipelines + external config is the &lt;STRONG&gt;least painful current approach&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;There’s a clear product gap around &lt;STRONG&gt;per-table refresh policy + scheduling&lt;/STRONG&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;If this lands natively (especially via DAB), it would significantly improve:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Cost control&lt;/LI&gt;&lt;LI&gt;SLA-driven design&lt;/LI&gt;&lt;LI&gt;Pipeline maintainability&lt;/LI&gt;&lt;/UL&gt;</description>
      <pubDate>Tue, 23 Jun 2026 04:17:11 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/adhoc-table-refresh-in-lakeflow-spark-declarative-pipelines-sdp/m-p/160174#M54864</guid>
      <dc:creator>Mridu</dc:creator>
      <dc:date>2026-06-23T04:17:11Z</dc:date>
    </item>
    <item>
      <title>Re: Adhoc Table Refresh in Lakeflow Spark Declarative Pipelines (SDP)</title>
      <link>https://community.databricks.com/t5/data-engineering/adhoc-table-refresh-in-lakeflow-spark-declarative-pipelines-sdp/m-p/160236#M54871</link>
      <description>&lt;P&gt;Great feedback, Mridu. I think surfacing it in the job gives the most flexibility. You can do it in the pipeline refresh UI and in the REST API, so surfacing&lt;SPAN&gt;&amp;nbsp;it in the Job YAML seems like a quick win.&lt;BR /&gt;&lt;BR /&gt;i.e.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;resources:
  jobs:
    dataverse_data_job:
      name: data_load_${bundle.target}
      email_notifications:
        on_failure:
          - support@xxx.com
      max_concurrent_runs: 2
      tasks:
        - task_key: load_bronze
          pipeline_task:
            pipeline_id: ${resources.pipelines.bronze_pipeline.id}
            full_refresh: true       

        - task_key: load_silver
          depends_on:
            - task_key: load_bronze
          pipeline_task:
            pipeline_id: ${resources.pipelines.silver_pipeline.id}
            full_refresh: true
          tables:
            - name: schema.table_1
              refresh_policy: incremental or full
            - name: schema.table_2
              refresh_policy: incremental or full

      queue:
        enabled: true
      permissions:
        - service_principal_name: ${var.service_principal_pipeline_and_jobs_owner}
          level: IS_OWNER&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jun 2026 11:07:44 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/adhoc-table-refresh-in-lakeflow-spark-declarative-pipelines-sdp/m-p/160236#M54871</guid>
      <dc:creator>thedatacrew</dc:creator>
      <dc:date>2026-06-23T11:07:44Z</dc:date>
    </item>
    <item>
      <title>Re: Adhoc Table Refresh in Lakeflow Spark Declarative Pipelines (SDP)</title>
      <link>https://community.databricks.com/t5/data-engineering/adhoc-table-refresh-in-lakeflow-spark-declarative-pipelines-sdp/m-p/160240#M54873</link>
      <description>&lt;P&gt;This is a real limitation in the current Lakeflow / DLT job model.&lt;/P&gt;&lt;P&gt;Today, a pipeline is treated as the &lt;STRONG&gt;unit of refresh&lt;/STRONG&gt;, not individual tables inside it. That means:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;You can run or fully refresh a pipeline&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;But you cannot define different refresh policies per table in Jobs or DAB YAML&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The REST API does provide additional flexibility via refresh_selection and full_refresh_selection, but this is &lt;STRONG&gt;only per execution&lt;/STRONG&gt;, not something that can be declared and stored as part of a job definition.&lt;/P&gt;&lt;P&gt;Because of that, per-table scheduling or refresh policies inside a single pipeline are not supported today.&lt;/P&gt;&lt;P&gt;Common workarounds are:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Splitting pipelines by refresh frequency (high-frequency vs low-frequency tables)&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Or using external orchestration that calls the REST API to selectively refresh subsets of tables per run&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;One partial alternative worth noting: materialized views and streaming tables in Databricks SQL can be scheduled independently, since each is backed by its own pipeline. That allows per-object refresh frequency, but it does not provide heterogeneous SLAs inside a single multi-table pipeline.&lt;/P&gt;&lt;P&gt;So overall, this is a real product gap rather than something configurable in Jobs or DAB today.&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jun 2026 11:32:42 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/adhoc-table-refresh-in-lakeflow-spark-declarative-pipelines-sdp/m-p/160240#M54873</guid>
      <dc:creator>Yogasathyandrun</dc:creator>
      <dc:date>2026-06-23T11:32:42Z</dc:date>
    </item>
  </channel>
</rss>

