<?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 Lakeflow Spark Declarative Pipeline in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/lakeflow-spark-declarative-pipeline/m-p/144118#M52266</link>
    <description>&lt;OL&gt;&lt;LI&gt;How we can run a SDP pipeline in parallel manner with dynamic parameter parsing on pipeline level.&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;How we can consume job level parameter in Pipeline. If similar name parameters are defined in pipeline level then job level parameters are getting overwritten.&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;Do we have to create Delta live table always?&lt;/LI&gt;&lt;/OL&gt;</description>
    <pubDate>Thu, 15 Jan 2026 07:42:36 GMT</pubDate>
    <dc:creator>Digvijay_11</dc:creator>
    <dc:date>2026-01-15T07:42:36Z</dc:date>
    <item>
      <title>Lakeflow Spark Declarative Pipeline</title>
      <link>https://community.databricks.com/t5/data-engineering/lakeflow-spark-declarative-pipeline/m-p/144118#M52266</link>
      <description>&lt;OL&gt;&lt;LI&gt;How we can run a SDP pipeline in parallel manner with dynamic parameter parsing on pipeline level.&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;How we can consume job level parameter in Pipeline. If similar name parameters are defined in pipeline level then job level parameters are getting overwritten.&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;Do we have to create Delta live table always?&lt;/LI&gt;&lt;/OL&gt;</description>
      <pubDate>Thu, 15 Jan 2026 07:42:36 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/lakeflow-spark-declarative-pipeline/m-p/144118#M52266</guid>
      <dc:creator>Digvijay_11</dc:creator>
      <dc:date>2026-01-15T07:42:36Z</dc:date>
    </item>
    <item>
      <title>Re: Lakeflow Spark Declarative Pipeline</title>
      <link>https://community.databricks.com/t5/data-engineering/lakeflow-spark-declarative-pipeline/m-p/144167#M52276</link>
      <description>&lt;P&gt;To run an &lt;STRONG&gt;SDP (Spark Declarative Pipeline)&lt;/STRONG&gt; in parallel with dynamic parameters, you need to understand that SDP is &lt;STRONG&gt;"smart"&lt;/STRONG&gt;—it builds a dependency graph and runs everything it can at the same time by default.&lt;/P&gt;&lt;P&gt;Here is a simple breakdown of how to handle your specific questions:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;1. Running in Parallel&lt;/STRONG&gt;&lt;BR /&gt;You don't actually need to write &lt;STRONG&gt;"parallel code."&lt;/STRONG&gt; Because SDP is declarative, the engine looks at your &lt;FONT face="courier new,courier"&gt;@sdp.table&lt;/FONT&gt; definitions. If &lt;FONT face="courier new,courier"&gt;Table A&lt;/FONT&gt; and &lt;FONT face="courier new,courier"&gt;Table B&lt;/FONT&gt; don't depend on each other, SDP will automatically trigger them in parallel to save time.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;2. Handling Dynamic Parameters&lt;/STRONG&gt;&lt;BR /&gt;To pass parameters into your pipeline without them getting messy or overwritten, the best way is to use Spark Configurations.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;The Overwrite Issue:&lt;/STRONG&gt; You’re right—if you use the same name at the Job and Pipeline levels, the Job level usually wins.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;3. Do you always need a Delta Live Table?&lt;/STRONG&gt;&lt;BR /&gt;Nope! While SDP is the engine behind Delta Live Tables (DLT) in Databricks, the open-source version is flexible. You can write to&lt;EM&gt; Parquet, Iceberg, or even just Temporary Views&lt;/EM&gt; if you don't want to save the data permanently.&lt;/P&gt;&lt;P&gt;However, using Delta is usually recommended because it supports &lt;STRONG&gt;"Time Travel"&lt;/STRONG&gt; and &lt;STRONG&gt;"Z-Ordering,"&lt;/STRONG&gt; which makes your queries much faster later on.&lt;/P&gt;&lt;P&gt;You can refer to the official documents for more details.&lt;/P&gt;&lt;P&gt;&lt;A href="https://docs.databricks.com/aws/en/ldp/parameters" target="_blank"&gt;https://docs.databricks.com/aws/en/ldp/parameters&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://spark.apache.org/docs/latest/declarative-pipelines-programming-guide.html" target="_blank"&gt;https://spark.apache.org/docs/latest/declarative-pipelines-programming-guide.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Jan 2026 15:34:07 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/lakeflow-spark-declarative-pipeline/m-p/144167#M52276</guid>
      <dc:creator>osingh</dc:creator>
      <dc:date>2026-01-15T15:34:07Z</dc:date>
    </item>
    <item>
      <title>Re: Lakeflow Spark Declarative Pipeline</title>
      <link>https://community.databricks.com/t5/data-engineering/lakeflow-spark-declarative-pipeline/m-p/144278#M52306</link>
      <description>&lt;P&gt;Just FYI, as of Jan 16th (the time I'm writing this answer), SDP and Delta Lake in their OSS versions don't work together yet.&lt;/P&gt;&lt;P&gt;SDP is part of Apache Spark 4.1, but Delta Lake does not support it at the moment. It's coming. No idea when it's gonna be available, though.&lt;/P&gt;</description>
      <pubDate>Fri, 16 Jan 2026 19:14:26 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/lakeflow-spark-declarative-pipeline/m-p/144278#M52306</guid>
      <dc:creator>JacekLaskowski</dc:creator>
      <dc:date>2026-01-16T19:14:26Z</dc:date>
    </item>
    <item>
      <title>Hi @Digvijay_11, Here are answers to each of your three q...</title>
      <link>https://community.databricks.com/t5/data-engineering/lakeflow-spark-declarative-pipeline/m-p/150272#M53325</link>
      <description>&lt;P&gt;Hi &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/118083"&gt;@Digvijay_11&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;Here are answers to each of your three questions about Lakeflow Spark Declarative Pipelines (SDP):&lt;/P&gt;
&lt;P&gt;1. RUNNING SDP PIPELINES IN PARALLEL WITH DYNAMIC PARAMETERS&lt;/P&gt;
&lt;P&gt;SDP automatically determines the dependency graph across your table and view definitions. If two datasets do not depend on each other, the engine will execute them in parallel without any extra configuration on your part. You do not need to write explicit parallel logic.&lt;/P&gt;
&lt;P&gt;For dynamic parameters, you define key-value pairs in the pipeline configuration (either through the UI or in your pipeline JSON definition). In Python, you reference them with spark.conf.get():&lt;/P&gt;
&lt;PRE&gt;source_catalog = spark.conf.get("my_pipeline.source_catalog")&lt;/PRE&gt;
&lt;P&gt;In SQL, you use the ${} syntax:&lt;/P&gt;
&lt;PRE&gt;SELECT * FROM ${my_pipeline.source_catalog}.schema.table&lt;/PRE&gt;
&lt;P&gt;You can set different values per environment. For example, in a JSON pipeline definition:&lt;/P&gt;
&lt;PRE&gt;{
  "name": "My Pipeline - DEV",
  "configuration": {
    "my_pipeline.source_catalog": "dev_catalog",
    "my_pipeline.start_date": "2025-01-01"
  }
}&lt;/PRE&gt;
&lt;P&gt;Note: parameter keys can contain underscores, hyphens, periods, and alphanumeric characters. Values are always strings. Avoid using reserved Spark configuration keys.&lt;/P&gt;
&lt;P&gt;Docs: &lt;A href="https://docs.databricks.com/aws/en/ldp/parameters" target="_blank"&gt;https://docs.databricks.com/aws/en/ldp/parameters&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;2. JOB-LEVEL VS PIPELINE-LEVEL PARAMETERS&lt;/P&gt;
&lt;P&gt;You are correct that when the same parameter name is defined at both the job level and the pipeline level, the pipeline-level configuration takes precedence and the job-level value gets overwritten. This is by design: the pipeline configuration is the authoritative source for pipeline parameters.&lt;/P&gt;
&lt;P&gt;The recommended approach is to use distinct naming conventions to avoid collisions. For example, prefix your pipeline parameters with a namespace like "mypipeline." (e.g., mypipeline.env, mypipeline.source_path). This keeps them separate from any job-level parameters. If you need to pass values from a job into a pipeline task, use unique parameter names that do not overlap with the pipeline's own configuration keys.&lt;/P&gt;
&lt;P&gt;Alternatively, if your pipeline is a task within a multi-task job and you need to propagate values from upstream tasks, consider using task values (dbutils.jobs.taskValues) in a notebook task that runs before the pipeline task, then reference those values through a separate mechanism rather than relying on overlapping parameter names.&lt;/P&gt;
&lt;P&gt;Docs: &lt;A href="https://docs.databricks.com/aws/en/jobs/parameters" target="_blank"&gt;https://docs.databricks.com/aws/en/jobs/parameters&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;3. DO YOU ALWAYS HAVE TO CREATE A DELTA LIVE TABLE?&lt;/P&gt;
&lt;P&gt;No, you do not always have to create a Delta table. SDP supports three dataset types:&lt;/P&gt;
&lt;P&gt;- Streaming tables: for incremental, append-only workloads (e.g., ingesting from cloud storage or message buses).&lt;BR /&gt;
- Materialized views: for batch transformations that are recomputed on each pipeline update.&lt;BR /&gt;
- Temporary views: for intermediate transformations that do not persist data. These are useful when you need a transformation step but do not want to store the result as a table.&lt;/P&gt;
&lt;P&gt;That said, streaming tables and materialized views are backed by Delta and provide benefits like ACID transactions, time travel, and schema enforcement. Temporary views are only available within the pipeline run and are not stored. Choose the dataset type based on whether you need the data to persist and be queryable outside the pipeline.&lt;/P&gt;
&lt;P&gt;In Python:&lt;/P&gt;
&lt;PRE&gt;import dlt

@dlt.view
def my_temp_view():
    return spark.read.table("source_table").filter("status = 'active'")

@dlt.table
def my_final_table():
    return dlt.read("my_temp_view").groupBy("category").count()&lt;/PRE&gt;
&lt;P&gt;In SQL:&lt;/P&gt;
&lt;PRE&gt;CREATE TEMPORARY LIVE VIEW my_temp_view AS
SELECT * FROM source_table WHERE status = 'active';

CREATE OR REFRESH LIVE TABLE my_final_table AS
SELECT category, count(*) as cnt FROM LIVE.my_temp_view GROUP BY category;&lt;/PRE&gt;
&lt;P&gt;Docs: &lt;A href="https://docs.databricks.com/aws/en/ldp/index" target="_blank"&gt;https://docs.databricks.com/aws/en/ldp/index&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;* This reply used an agent system I built to research and draft this response based on the wide set of documentation I have available and previous memory. I personally review the draft for any obvious issues and for monitoring system reliability and update it when I detect any drift, but there is still a small chance that something is inaccurate, especially if you are experimenting with brand new features.&lt;/P&gt;
&lt;P&gt;If this answer resolves your question, could you mark it as "Accept as Solution"? That helps other users quickly find the correct fix.&lt;/P&gt;</description>
      <pubDate>Mon, 09 Mar 2026 00:55:25 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/lakeflow-spark-declarative-pipeline/m-p/150272#M53325</guid>
      <dc:creator>SteveOstrowski</dc:creator>
      <dc:date>2026-03-09T00:55:25Z</dc:date>
    </item>
  </channel>
</rss>

