<?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 From Business Requirements to Lakeflow Pipelines: A Governed Metadata-Driven Delivery Pattern in Community Articles</title>
    <link>https://community.databricks.com/t5/community-articles/from-business-requirements-to-lakeflow-pipelines-a-governed/m-p/160710#M1323</link>
    <description>&lt;H2&gt;Introduction&lt;/H2&gt;&lt;P&gt;Different organizations use different names for these artifacts: business requirements, mapping specifications, source-to-target mappings, data contracts, transformation rules, or semantic definitions. The name matters less than the goal: capturing business intent in a structured form that can be reviewed, governed, and translated consistently into engineering assets.&lt;BR /&gt;In many enterprise data-engineering programs, building a Databricks pipeline is not the most difficult part of delivery.&lt;/P&gt;&lt;P&gt;The more difficult part often comes earlier.&lt;/P&gt;&lt;P&gt;A business rule begins in a meeting, appears in a source-to-target mapping document, gets translated into SQL or PySpark, becomes part of a data-quality rule, is repeated in test cases, and is eventually described again in technical documentation.&lt;/P&gt;&lt;P&gt;The same business definition is interpreted many times by different people and across different artifacts.&lt;/P&gt;&lt;P&gt;That repeated translation creates delivery risk:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Transformation logic can differ between a mapping document and implemented code.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Data-quality controls may not cover the actual business rule.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Documentation can drift after the pipeline changes.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;New team members need to reconstruct logic from multiple places.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Reconciliation issues take longer because the original intent is difficult to trace.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;This article proposes a practical pattern for reducing that risk:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;Treat business requirements, mapping specifications, transformation rules, and data definitions as governed metadata, then use that metadata to drive pipeline generation, data quality, documentation, and human review.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Databricks remains the execution, governance, orchestration, and observability platform. The metadata layer becomes the contract between business intent and the assets that run on the platform.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;The Practical Problem: One Rule, Many Implementations&lt;/H2&gt;&lt;P&gt;Consider a simple reporting requirement:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;“Only completed orders with a valid customer identifier should contribute to daily net revenue.”&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;That business rule may be implemented in several places:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;P&gt;A source-to-target mapping document.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A Spark SQL or PySpark transformation.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A Gold-layer aggregate table.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A data-quality expectation.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A reconciliation query.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A dashboard definition.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A technical specification.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Now imagine the SQL implementation filters COMPLETED orders, but the test case includes both COMPLETED and SHIPPED orders. Or imagine a data-quality rule checks for non-null customer IDs but does not check whether the ID exists in the customer master.&lt;/P&gt;&lt;P&gt;The pipeline may still run successfully.&lt;/P&gt;&lt;P&gt;But the business result can be wrong.&lt;/P&gt;&lt;P&gt;The issue is not that Spark, Delta, or Lakeflow failed. The issue is that the original business intent was manually rewritten in several places.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;A Better Pattern: Business Intent as Governed Metadata&lt;/H2&gt;&lt;P&gt;The proposed flow is:&lt;/P&gt;&lt;PRE&gt;Business Requirements + Mapping Specifications + Source Definitions&lt;BR /&gt;↓&lt;BR /&gt;Canonical Metadata Model&lt;BR /&gt;↓&lt;BR /&gt;Validation + Human Approval&lt;BR /&gt;↓&lt;BR /&gt;Generated SQL / PySpark / DQ Rules / Tests / Documentation&lt;BR /&gt;↓&lt;BR /&gt;Lakeflow Pipelines + Unity Catalog + Monitoring&lt;BR /&gt;↓&lt;BR /&gt;Governed Data Products&lt;/PRE&gt;&lt;P&gt;The key idea is simple:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;Do not treat the STTM as a static Word document or spreadsheet. Treat it as structured, governed engineering metadata.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;The metadata should capture enough detail to describe what is being built, why it is being built, and how it should be validated.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;A Synthetic Example: Daily Customer Revenue&lt;/H2&gt;&lt;P&gt;Assume we need a Gold-layer table called:&lt;/P&gt;&lt;PRE&gt;gold.customer_daily_revenue&lt;/PRE&gt;&lt;P&gt;The table will provide daily revenue by customer using a raw orders source.&lt;/P&gt;&lt;H3&gt;Example source-to-target mapping&lt;/H3&gt;&lt;P&gt;Target Column Source Transformation Rule Business Rule&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;revenue_date&lt;/TD&gt;&lt;TD&gt;raw.orders.order_date&lt;/TD&gt;&lt;TD&gt;Cast to date&lt;/TD&gt;&lt;TD&gt;Revenue is reported by calendar date&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;customer_id&lt;/TD&gt;&lt;TD&gt;raw.orders.customer_id&lt;/TD&gt;&lt;TD&gt;Pass through&lt;/TD&gt;&lt;TD&gt;Customer ID must be present&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;completed_order_count&lt;/TD&gt;&lt;TD&gt;raw.orders.order_id&lt;/TD&gt;&lt;TD&gt;Count distinct order ID&lt;/TD&gt;&lt;TD&gt;Include completed orders only&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;net_revenue&lt;/TD&gt;&lt;TD&gt;raw.orders.amount&lt;/TD&gt;&lt;TD&gt;Sum amount&lt;/TD&gt;&lt;TD&gt;Include completed orders with a positive amount&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;load_timestamp&lt;/TD&gt;&lt;TD&gt;System generated&lt;/TD&gt;&lt;TD&gt;Current timestamp&lt;/TD&gt;&lt;TD&gt;Technical audit field&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;The same mapping can be normalized into a canonical metadata model.&lt;/P&gt;&lt;H3&gt;Example metadata representation&lt;/H3&gt;&lt;PRE&gt;{
  "target_table": "gold.customer_daily_revenue",
  "grain": ["revenue_date", "customer_id"],
  "sources": [
    {
      "table": "bronze.orders"
    }
  ],
  "filters": [
    "order_status = 'COMPLETED'",
    "customer_id IS NOT NULL",
    "amount &amp;gt; 0"
  ],
  "columns": [
    {
      "name": "revenue_date",
      "expression": "CAST(order_date AS DATE)",
      "data_type": "DATE",
      "business_definition": "Calendar date used for revenue reporting"
    },
    {
      "name": "customer_id",
      "expression": "customer_id",
      "data_type": "STRING",
      "business_definition": "Unique identifier of the customer"
    },
    {
      "name": "completed_order_count",
      "expression": "COUNT(DISTINCT order_id)",
      "data_type": "BIGINT",
      "business_definition": "Number of completed orders"
    },
    {
      "name": "net_revenue",
      "expression": "SUM(amount)",
      "data_type": "DECIMAL(18,2)",
      "business_definition": "Revenue from completed orders with positive amount"
    }
  ],
  "quality_rules": [
    {
      "name": "valid_customer_id",
      "expression": "customer_id IS NOT NULL",
      "severity": "fail"
    },
    {
      "name": "positive_revenue",
      "expression": "net_revenue &amp;gt;= 0",
      "severity": "fail"
    }
  ],
  "owner": "Data Engineering",
  "business_owner": "Commercial Analytics",
  "approval_status": "Approved"
}&lt;/PRE&gt;&lt;P&gt;This is not intended to replace thoughtful architecture or business review.&lt;/P&gt;&lt;P&gt;It creates a structured, reviewable contract before implementation begins.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Generating a Lakeflow SQL Asset&lt;/H2&gt;&lt;P&gt;Once the mapping is approved, the transformation logic can be generated as a Lakeflow Spark Declarative Pipelines SQL asset.&lt;/P&gt;&lt;PRE&gt;CREATE OR REFRESH MATERIALIZED VIEW customer_daily_revenue
(
  CONSTRAINT valid_customer_id
  EXPECT (customer_id IS NOT NULL)
  ON VIOLATION FAIL UPDATE,

  CONSTRAINT non_negative_revenue
  EXPECT (net_revenue &amp;gt;= 0)
  ON VIOLATION FAIL UPDATE
)
AS
SELECT
    CAST(order_date AS DATE) AS revenue_date,
    customer_id,
    COUNT(DISTINCT order_id) AS completed_order_count,
    SUM(amount) AS net_revenue,
    CURRENT_TIMESTAMP() AS load_timestamp
FROM bronze.orders
WHERE order_status = 'COMPLETED'
  AND customer_id IS NOT NULL
  AND amount &amp;gt; 0
GROUP BY
    CAST(order_date AS DATE),
    customer_id;&lt;/PRE&gt;&lt;P&gt;The important point is not the amount of SQL generated.&lt;/P&gt;&lt;P&gt;The important point is traceability:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;The target grain comes from approved metadata.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;The filter logic comes from approved metadata.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;The aggregation comes from approved metadata.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;The data-quality rules come from approved metadata.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;The documentation describes the same approved definitions.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The generated code is still reviewed by an engineer before promotion.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Generating a Python Version&lt;/H2&gt;&lt;P&gt;The same approved metadata could also generate a Python implementation when the use case requires more complex transformations.&lt;/P&gt;&lt;PRE&gt;from pyspark import pipelines as dp
from pyspark.sql import functions as F


@dp.table(
    name="customer_daily_revenue",
    comment="Daily completed-order revenue by customer."
)
@dp.expect_or_fail(
    "valid_customer_id",
    "customer_id IS NOT NULL"
)
@dp.expect_or_fail(
    "non_negative_revenue",
    "net_revenue &amp;gt;= 0"
)
def customer_daily_revenue():
    return (
        spark.read.table("bronze.orders")
        .filter(
            (F.col("order_status") == "COMPLETED")
            &amp;amp; F.col("customer_id").isNotNull()
            &amp;amp; (F.col("amount") &amp;gt; 0)
        )
        .groupBy(
            F.to_date("order_date").alias("revenue_date"),
            "customer_id"
        )
        .agg(
            F.countDistinct("order_id").alias("completed_order_count"),
            F.sum("amount").alias("net_revenue")
        )
        .withColumn("load_timestamp", F.current_timestamp())
    )&lt;/PRE&gt;&lt;P&gt;The platform and language can vary.&lt;/P&gt;&lt;P&gt;The metadata contract should remain stable.&lt;/P&gt;&lt;P&gt;That is what makes the architecture reusable across SQL, PySpark, Spark SQL, dbt, Snowflake, or other delivery targets over time.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;The Canonical Metadata Model&lt;/H2&gt;&lt;P&gt;The central component of this pattern is the canonical metadata model.&lt;/P&gt;&lt;P&gt;It should not be only a list of column mappings.&lt;/P&gt;&lt;P&gt;A useful enterprise metadata model should capture at least the following.&lt;/P&gt;&lt;P&gt;Metadata Area Example Questions&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Target definition&lt;/TD&gt;&lt;TD&gt;What table, view, or dataset is being created?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Grain&lt;/TD&gt;&lt;TD&gt;What makes one output row unique?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Source lineage&lt;/TD&gt;&lt;TD&gt;Which sources and joins contribute to the target?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Transformation logic&lt;/TD&gt;&lt;TD&gt;How is each target field calculated?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Business definition&lt;/TD&gt;&lt;TD&gt;What does the metric or attribute mean?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Data-quality rule&lt;/TD&gt;&lt;TD&gt;What must be true for the data to be trusted?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Reconciliation rule&lt;/TD&gt;&lt;TD&gt;How should source and target totals be compared?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Ownership&lt;/TD&gt;&lt;TD&gt;Who owns the definition and who approves changes?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Change history&lt;/TD&gt;&lt;TD&gt;What changed, why, and when?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Delivery status&lt;/TD&gt;&lt;TD&gt;Is the asset drafted, reviewed, approved, deployed, or retired?&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;This is also where a human approval workflow matters.&lt;/P&gt;&lt;P&gt;A rule should not be generated and deployed simply because an AI model interpreted a document.&lt;/P&gt;&lt;P&gt;The metadata should move through controlled states:&lt;/P&gt;&lt;PRE&gt;Draft
→ Validated
→ Reviewed
→ Approved
→ Generated
→ Deployed
→ Monitored&lt;/PRE&gt;&lt;P&gt;That workflow provides an evidence trail for both delivery teams and governance stakeholders.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Quality Rules Should Be First-Class Metadata&lt;/H2&gt;&lt;P&gt;In many projects, data quality is added late in the delivery lifecycle.&lt;/P&gt;&lt;P&gt;The mapping is approved. Code is written. A test fails. Then someone adds a check.&lt;/P&gt;&lt;P&gt;A metadata-driven approach treats data quality as part of the original design.&lt;/P&gt;&lt;P&gt;For the revenue example, the metadata may define:&lt;/P&gt;&lt;P&gt;Rule Name Rule Expected Behavior&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;valid_customer_id&lt;/TD&gt;&lt;TD&gt;customer_id IS NOT NULL&lt;/TD&gt;&lt;TD&gt;Fail the update&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;positive_order_amount&lt;/TD&gt;&lt;TD&gt;amount &amp;gt; 0&lt;/TD&gt;&lt;TD&gt;Exclude invalid source records&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;valid_order_status&lt;/TD&gt;&lt;TD&gt;Status must be COMPLETED&lt;/TD&gt;&lt;TD&gt;Include qualifying business records only&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;daily_revenue_reconciliation&lt;/TD&gt;&lt;TD&gt;Source total equals target total within tolerance&lt;/TD&gt;&lt;TD&gt;Investigate variance&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;This can generate:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Lakeflow expectations.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Data-quality dashboards.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Reconciliation SQL.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Test scenarios.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Support runbook instructions.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Alerts or review tasks.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Instead of data quality becoming a separate spreadsheet, it becomes part of the same engineering contract.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Where Unity Catalog Fits&lt;/H2&gt;&lt;P&gt;Unity Catalog is the governance foundation around the deployed assets.&lt;/P&gt;&lt;P&gt;In this pattern, Unity Catalog is where teams can govern and discover the resulting data products, manage access, understand lineage, and locate the production datasets that were created from approved metadata.&lt;/P&gt;&lt;P&gt;The metadata-driven layer should complement—not duplicate—those governance capabilities.&lt;/P&gt;&lt;P&gt;A practical separation of responsibilities looks like this:&lt;/P&gt;&lt;P&gt;Layer Primary Responsibility&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Business and mapping artifacts&lt;/TD&gt;&lt;TD&gt;Define business intent&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Canonical metadata model&lt;/TD&gt;&lt;TD&gt;Normalize and govern transformation meaning&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Copilot or rules engine&lt;/TD&gt;&lt;TD&gt;Generate repeatable delivery artifacts&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Human approval workflow&lt;/TD&gt;&lt;TD&gt;Validate semantic correctness and exceptions&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Lakeflow pipelines&lt;/TD&gt;&lt;TD&gt;Execute and operationalize transformations&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Unity Catalog&lt;/TD&gt;&lt;TD&gt;Govern access, discovery, and lineage&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Monitoring and event data&lt;/TD&gt;&lt;TD&gt;Observe run health and quality behavior&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;The result is not a replacement for Databricks.&lt;/P&gt;&lt;P&gt;It is a stronger path into Databricks.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Why Human Approval Still Matters&lt;/H2&gt;&lt;P&gt;AI can accelerate documentation extraction, identify likely joins, draft SQL, and recommend quality rules.&lt;/P&gt;&lt;P&gt;But business semantics still require accountable review.&lt;/P&gt;&lt;P&gt;For example, “net revenue” may mean different things across organizations:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Gross sales minus returns.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Gross sales minus discounts and returns.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Recognized revenue after invoicing.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Posted revenue after settlement.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Revenue excluding cancelled orders.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;No model should silently decide that definition.&lt;/P&gt;&lt;P&gt;The role of the copilot is to make ambiguity visible, generate a structured draft, highlight missing information, and create a reviewable implementation package.&lt;/P&gt;&lt;P&gt;The role of the engineer and business owner is to approve the meaning.&lt;/P&gt;&lt;P&gt;That is the difference between simple code generation and governed engineering automation.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Implementation Approach&lt;/H2&gt;&lt;P&gt;A realistic implementation can be incremental.&lt;/P&gt;&lt;H3&gt;Phase 1: Metadata standardization&lt;/H3&gt;&lt;P&gt;Start with a defined template for:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Target table and grain.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Source tables and joins.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Column-level transformations.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Business definitions.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Data-quality rules.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Ownership.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Approval status.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;Phase 2: Validation&lt;/H3&gt;&lt;P&gt;Add deterministic validation rules:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Every target column has a data type.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every derived column has a transformation expression.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every target table has a defined grain.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every source alias resolves to a known source.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every join includes a join condition.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every critical metric has a business definition.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every production asset has an owner.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;Phase 3: Generation&lt;/H3&gt;&lt;P&gt;Generate a small, useful set of artifacts:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Lakeflow SQL or PySpark templates.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Table DDL or table specifications.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Data-quality expectation definitions.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Technical documentation.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Reconciliation queries.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Test cases.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;Phase 4: Approval and observability&lt;/H3&gt;&lt;P&gt;Track:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Who approved the metadata.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Which version generated the pipeline.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Which generated artifact was deployed.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Which quality expectations failed.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Which source-to-target definitions changed.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;This sequence creates value before attempting a fully autonomous delivery system.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Final Thought&lt;/H2&gt;&lt;P&gt;Modern data platforms have made execution, scaling, orchestration, and governance far more accessible.&lt;/P&gt;&lt;P&gt;But many delivery teams still lose time translating the same business logic across mappings, code, tests, quality checks, and documentation.&lt;/P&gt;&lt;P&gt;A governed metadata-to-pipeline pattern addresses that gap.&lt;/P&gt;&lt;P&gt;The goal is not to remove data engineers.&lt;/P&gt;&lt;P&gt;The goal is to reduce repeated interpretation work, make delivery more consistent, and allow engineers to focus on the work that requires judgment:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;architecture,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;business semantics,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;data-product design,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;performance,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;reliability,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;governance,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;and production readiness.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The future of data engineering is not just code generation.&lt;/P&gt;&lt;P&gt;It is intent-driven, reviewable, and governed delivery.&lt;/P&gt;&lt;H2&gt;About the Author&lt;/H2&gt;&lt;P&gt;Amit Kumar Singh is a data engineering leader focused on metadata-driven delivery, data quality, governance, and AI-assisted engineering workflows.&lt;/P&gt;&lt;P&gt;He is building &lt;STRONG&gt;Data Engineering Copilot&lt;/STRONG&gt;, an independent project exploring how structured business and technical metadata can support more consistent, reviewable data delivery.&lt;/P&gt;&lt;P&gt;Learn more: &lt;STRONG&gt;DataEngineeringCopilot.com&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;A href="https://www.linkedin.com/in/amit-singh-57980030/" target="_blank" rel="noopener"&gt;https://www.linkedin.com/in/amit-singh-57980030/&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;</description>
    <pubDate>Sat, 27 Jun 2026 02:42:42 GMT</pubDate>
    <dc:creator>AmitDECopilot</dc:creator>
    <dc:date>2026-06-27T02:42:42Z</dc:date>
    <item>
      <title>From Business Requirements to Lakeflow Pipelines: A Governed Metadata-Driven Delivery Pattern</title>
      <link>https://community.databricks.com/t5/community-articles/from-business-requirements-to-lakeflow-pipelines-a-governed/m-p/160710#M1323</link>
      <description>&lt;H2&gt;Introduction&lt;/H2&gt;&lt;P&gt;Different organizations use different names for these artifacts: business requirements, mapping specifications, source-to-target mappings, data contracts, transformation rules, or semantic definitions. The name matters less than the goal: capturing business intent in a structured form that can be reviewed, governed, and translated consistently into engineering assets.&lt;BR /&gt;In many enterprise data-engineering programs, building a Databricks pipeline is not the most difficult part of delivery.&lt;/P&gt;&lt;P&gt;The more difficult part often comes earlier.&lt;/P&gt;&lt;P&gt;A business rule begins in a meeting, appears in a source-to-target mapping document, gets translated into SQL or PySpark, becomes part of a data-quality rule, is repeated in test cases, and is eventually described again in technical documentation.&lt;/P&gt;&lt;P&gt;The same business definition is interpreted many times by different people and across different artifacts.&lt;/P&gt;&lt;P&gt;That repeated translation creates delivery risk:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Transformation logic can differ between a mapping document and implemented code.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Data-quality controls may not cover the actual business rule.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Documentation can drift after the pipeline changes.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;New team members need to reconstruct logic from multiple places.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Reconciliation issues take longer because the original intent is difficult to trace.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;This article proposes a practical pattern for reducing that risk:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;Treat business requirements, mapping specifications, transformation rules, and data definitions as governed metadata, then use that metadata to drive pipeline generation, data quality, documentation, and human review.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Databricks remains the execution, governance, orchestration, and observability platform. The metadata layer becomes the contract between business intent and the assets that run on the platform.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;The Practical Problem: One Rule, Many Implementations&lt;/H2&gt;&lt;P&gt;Consider a simple reporting requirement:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;“Only completed orders with a valid customer identifier should contribute to daily net revenue.”&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;That business rule may be implemented in several places:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;P&gt;A source-to-target mapping document.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A Spark SQL or PySpark transformation.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A Gold-layer aggregate table.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A data-quality expectation.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A reconciliation query.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A dashboard definition.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;A technical specification.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Now imagine the SQL implementation filters COMPLETED orders, but the test case includes both COMPLETED and SHIPPED orders. Or imagine a data-quality rule checks for non-null customer IDs but does not check whether the ID exists in the customer master.&lt;/P&gt;&lt;P&gt;The pipeline may still run successfully.&lt;/P&gt;&lt;P&gt;But the business result can be wrong.&lt;/P&gt;&lt;P&gt;The issue is not that Spark, Delta, or Lakeflow failed. The issue is that the original business intent was manually rewritten in several places.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;A Better Pattern: Business Intent as Governed Metadata&lt;/H2&gt;&lt;P&gt;The proposed flow is:&lt;/P&gt;&lt;PRE&gt;Business Requirements + Mapping Specifications + Source Definitions&lt;BR /&gt;↓&lt;BR /&gt;Canonical Metadata Model&lt;BR /&gt;↓&lt;BR /&gt;Validation + Human Approval&lt;BR /&gt;↓&lt;BR /&gt;Generated SQL / PySpark / DQ Rules / Tests / Documentation&lt;BR /&gt;↓&lt;BR /&gt;Lakeflow Pipelines + Unity Catalog + Monitoring&lt;BR /&gt;↓&lt;BR /&gt;Governed Data Products&lt;/PRE&gt;&lt;P&gt;The key idea is simple:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;Do not treat the STTM as a static Word document or spreadsheet. Treat it as structured, governed engineering metadata.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;The metadata should capture enough detail to describe what is being built, why it is being built, and how it should be validated.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;A Synthetic Example: Daily Customer Revenue&lt;/H2&gt;&lt;P&gt;Assume we need a Gold-layer table called:&lt;/P&gt;&lt;PRE&gt;gold.customer_daily_revenue&lt;/PRE&gt;&lt;P&gt;The table will provide daily revenue by customer using a raw orders source.&lt;/P&gt;&lt;H3&gt;Example source-to-target mapping&lt;/H3&gt;&lt;P&gt;Target Column Source Transformation Rule Business Rule&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;revenue_date&lt;/TD&gt;&lt;TD&gt;raw.orders.order_date&lt;/TD&gt;&lt;TD&gt;Cast to date&lt;/TD&gt;&lt;TD&gt;Revenue is reported by calendar date&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;customer_id&lt;/TD&gt;&lt;TD&gt;raw.orders.customer_id&lt;/TD&gt;&lt;TD&gt;Pass through&lt;/TD&gt;&lt;TD&gt;Customer ID must be present&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;completed_order_count&lt;/TD&gt;&lt;TD&gt;raw.orders.order_id&lt;/TD&gt;&lt;TD&gt;Count distinct order ID&lt;/TD&gt;&lt;TD&gt;Include completed orders only&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;net_revenue&lt;/TD&gt;&lt;TD&gt;raw.orders.amount&lt;/TD&gt;&lt;TD&gt;Sum amount&lt;/TD&gt;&lt;TD&gt;Include completed orders with a positive amount&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;load_timestamp&lt;/TD&gt;&lt;TD&gt;System generated&lt;/TD&gt;&lt;TD&gt;Current timestamp&lt;/TD&gt;&lt;TD&gt;Technical audit field&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;The same mapping can be normalized into a canonical metadata model.&lt;/P&gt;&lt;H3&gt;Example metadata representation&lt;/H3&gt;&lt;PRE&gt;{
  "target_table": "gold.customer_daily_revenue",
  "grain": ["revenue_date", "customer_id"],
  "sources": [
    {
      "table": "bronze.orders"
    }
  ],
  "filters": [
    "order_status = 'COMPLETED'",
    "customer_id IS NOT NULL",
    "amount &amp;gt; 0"
  ],
  "columns": [
    {
      "name": "revenue_date",
      "expression": "CAST(order_date AS DATE)",
      "data_type": "DATE",
      "business_definition": "Calendar date used for revenue reporting"
    },
    {
      "name": "customer_id",
      "expression": "customer_id",
      "data_type": "STRING",
      "business_definition": "Unique identifier of the customer"
    },
    {
      "name": "completed_order_count",
      "expression": "COUNT(DISTINCT order_id)",
      "data_type": "BIGINT",
      "business_definition": "Number of completed orders"
    },
    {
      "name": "net_revenue",
      "expression": "SUM(amount)",
      "data_type": "DECIMAL(18,2)",
      "business_definition": "Revenue from completed orders with positive amount"
    }
  ],
  "quality_rules": [
    {
      "name": "valid_customer_id",
      "expression": "customer_id IS NOT NULL",
      "severity": "fail"
    },
    {
      "name": "positive_revenue",
      "expression": "net_revenue &amp;gt;= 0",
      "severity": "fail"
    }
  ],
  "owner": "Data Engineering",
  "business_owner": "Commercial Analytics",
  "approval_status": "Approved"
}&lt;/PRE&gt;&lt;P&gt;This is not intended to replace thoughtful architecture or business review.&lt;/P&gt;&lt;P&gt;It creates a structured, reviewable contract before implementation begins.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Generating a Lakeflow SQL Asset&lt;/H2&gt;&lt;P&gt;Once the mapping is approved, the transformation logic can be generated as a Lakeflow Spark Declarative Pipelines SQL asset.&lt;/P&gt;&lt;PRE&gt;CREATE OR REFRESH MATERIALIZED VIEW customer_daily_revenue
(
  CONSTRAINT valid_customer_id
  EXPECT (customer_id IS NOT NULL)
  ON VIOLATION FAIL UPDATE,

  CONSTRAINT non_negative_revenue
  EXPECT (net_revenue &amp;gt;= 0)
  ON VIOLATION FAIL UPDATE
)
AS
SELECT
    CAST(order_date AS DATE) AS revenue_date,
    customer_id,
    COUNT(DISTINCT order_id) AS completed_order_count,
    SUM(amount) AS net_revenue,
    CURRENT_TIMESTAMP() AS load_timestamp
FROM bronze.orders
WHERE order_status = 'COMPLETED'
  AND customer_id IS NOT NULL
  AND amount &amp;gt; 0
GROUP BY
    CAST(order_date AS DATE),
    customer_id;&lt;/PRE&gt;&lt;P&gt;The important point is not the amount of SQL generated.&lt;/P&gt;&lt;P&gt;The important point is traceability:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;The target grain comes from approved metadata.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;The filter logic comes from approved metadata.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;The aggregation comes from approved metadata.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;The data-quality rules come from approved metadata.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;The documentation describes the same approved definitions.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The generated code is still reviewed by an engineer before promotion.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Generating a Python Version&lt;/H2&gt;&lt;P&gt;The same approved metadata could also generate a Python implementation when the use case requires more complex transformations.&lt;/P&gt;&lt;PRE&gt;from pyspark import pipelines as dp
from pyspark.sql import functions as F


@dp.table(
    name="customer_daily_revenue",
    comment="Daily completed-order revenue by customer."
)
@dp.expect_or_fail(
    "valid_customer_id",
    "customer_id IS NOT NULL"
)
@dp.expect_or_fail(
    "non_negative_revenue",
    "net_revenue &amp;gt;= 0"
)
def customer_daily_revenue():
    return (
        spark.read.table("bronze.orders")
        .filter(
            (F.col("order_status") == "COMPLETED")
            &amp;amp; F.col("customer_id").isNotNull()
            &amp;amp; (F.col("amount") &amp;gt; 0)
        )
        .groupBy(
            F.to_date("order_date").alias("revenue_date"),
            "customer_id"
        )
        .agg(
            F.countDistinct("order_id").alias("completed_order_count"),
            F.sum("amount").alias("net_revenue")
        )
        .withColumn("load_timestamp", F.current_timestamp())
    )&lt;/PRE&gt;&lt;P&gt;The platform and language can vary.&lt;/P&gt;&lt;P&gt;The metadata contract should remain stable.&lt;/P&gt;&lt;P&gt;That is what makes the architecture reusable across SQL, PySpark, Spark SQL, dbt, Snowflake, or other delivery targets over time.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;The Canonical Metadata Model&lt;/H2&gt;&lt;P&gt;The central component of this pattern is the canonical metadata model.&lt;/P&gt;&lt;P&gt;It should not be only a list of column mappings.&lt;/P&gt;&lt;P&gt;A useful enterprise metadata model should capture at least the following.&lt;/P&gt;&lt;P&gt;Metadata Area Example Questions&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Target definition&lt;/TD&gt;&lt;TD&gt;What table, view, or dataset is being created?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Grain&lt;/TD&gt;&lt;TD&gt;What makes one output row unique?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Source lineage&lt;/TD&gt;&lt;TD&gt;Which sources and joins contribute to the target?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Transformation logic&lt;/TD&gt;&lt;TD&gt;How is each target field calculated?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Business definition&lt;/TD&gt;&lt;TD&gt;What does the metric or attribute mean?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Data-quality rule&lt;/TD&gt;&lt;TD&gt;What must be true for the data to be trusted?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Reconciliation rule&lt;/TD&gt;&lt;TD&gt;How should source and target totals be compared?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Ownership&lt;/TD&gt;&lt;TD&gt;Who owns the definition and who approves changes?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Change history&lt;/TD&gt;&lt;TD&gt;What changed, why, and when?&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Delivery status&lt;/TD&gt;&lt;TD&gt;Is the asset drafted, reviewed, approved, deployed, or retired?&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;This is also where a human approval workflow matters.&lt;/P&gt;&lt;P&gt;A rule should not be generated and deployed simply because an AI model interpreted a document.&lt;/P&gt;&lt;P&gt;The metadata should move through controlled states:&lt;/P&gt;&lt;PRE&gt;Draft
→ Validated
→ Reviewed
→ Approved
→ Generated
→ Deployed
→ Monitored&lt;/PRE&gt;&lt;P&gt;That workflow provides an evidence trail for both delivery teams and governance stakeholders.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Quality Rules Should Be First-Class Metadata&lt;/H2&gt;&lt;P&gt;In many projects, data quality is added late in the delivery lifecycle.&lt;/P&gt;&lt;P&gt;The mapping is approved. Code is written. A test fails. Then someone adds a check.&lt;/P&gt;&lt;P&gt;A metadata-driven approach treats data quality as part of the original design.&lt;/P&gt;&lt;P&gt;For the revenue example, the metadata may define:&lt;/P&gt;&lt;P&gt;Rule Name Rule Expected Behavior&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;valid_customer_id&lt;/TD&gt;&lt;TD&gt;customer_id IS NOT NULL&lt;/TD&gt;&lt;TD&gt;Fail the update&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;positive_order_amount&lt;/TD&gt;&lt;TD&gt;amount &amp;gt; 0&lt;/TD&gt;&lt;TD&gt;Exclude invalid source records&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;valid_order_status&lt;/TD&gt;&lt;TD&gt;Status must be COMPLETED&lt;/TD&gt;&lt;TD&gt;Include qualifying business records only&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;daily_revenue_reconciliation&lt;/TD&gt;&lt;TD&gt;Source total equals target total within tolerance&lt;/TD&gt;&lt;TD&gt;Investigate variance&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;This can generate:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Lakeflow expectations.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Data-quality dashboards.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Reconciliation SQL.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Test scenarios.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Support runbook instructions.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Alerts or review tasks.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Instead of data quality becoming a separate spreadsheet, it becomes part of the same engineering contract.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Where Unity Catalog Fits&lt;/H2&gt;&lt;P&gt;Unity Catalog is the governance foundation around the deployed assets.&lt;/P&gt;&lt;P&gt;In this pattern, Unity Catalog is where teams can govern and discover the resulting data products, manage access, understand lineage, and locate the production datasets that were created from approved metadata.&lt;/P&gt;&lt;P&gt;The metadata-driven layer should complement—not duplicate—those governance capabilities.&lt;/P&gt;&lt;P&gt;A practical separation of responsibilities looks like this:&lt;/P&gt;&lt;P&gt;Layer Primary Responsibility&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Business and mapping artifacts&lt;/TD&gt;&lt;TD&gt;Define business intent&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Canonical metadata model&lt;/TD&gt;&lt;TD&gt;Normalize and govern transformation meaning&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Copilot or rules engine&lt;/TD&gt;&lt;TD&gt;Generate repeatable delivery artifacts&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Human approval workflow&lt;/TD&gt;&lt;TD&gt;Validate semantic correctness and exceptions&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Lakeflow pipelines&lt;/TD&gt;&lt;TD&gt;Execute and operationalize transformations&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Unity Catalog&lt;/TD&gt;&lt;TD&gt;Govern access, discovery, and lineage&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Monitoring and event data&lt;/TD&gt;&lt;TD&gt;Observe run health and quality behavior&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;The result is not a replacement for Databricks.&lt;/P&gt;&lt;P&gt;It is a stronger path into Databricks.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Why Human Approval Still Matters&lt;/H2&gt;&lt;P&gt;AI can accelerate documentation extraction, identify likely joins, draft SQL, and recommend quality rules.&lt;/P&gt;&lt;P&gt;But business semantics still require accountable review.&lt;/P&gt;&lt;P&gt;For example, “net revenue” may mean different things across organizations:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Gross sales minus returns.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Gross sales minus discounts and returns.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Recognized revenue after invoicing.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Posted revenue after settlement.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Revenue excluding cancelled orders.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;No model should silently decide that definition.&lt;/P&gt;&lt;P&gt;The role of the copilot is to make ambiguity visible, generate a structured draft, highlight missing information, and create a reviewable implementation package.&lt;/P&gt;&lt;P&gt;The role of the engineer and business owner is to approve the meaning.&lt;/P&gt;&lt;P&gt;That is the difference between simple code generation and governed engineering automation.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Implementation Approach&lt;/H2&gt;&lt;P&gt;A realistic implementation can be incremental.&lt;/P&gt;&lt;H3&gt;Phase 1: Metadata standardization&lt;/H3&gt;&lt;P&gt;Start with a defined template for:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Target table and grain.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Source tables and joins.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Column-level transformations.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Business definitions.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Data-quality rules.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Ownership.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Approval status.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;Phase 2: Validation&lt;/H3&gt;&lt;P&gt;Add deterministic validation rules:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Every target column has a data type.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every derived column has a transformation expression.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every target table has a defined grain.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every source alias resolves to a known source.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every join includes a join condition.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every critical metric has a business definition.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Every production asset has an owner.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;Phase 3: Generation&lt;/H3&gt;&lt;P&gt;Generate a small, useful set of artifacts:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Lakeflow SQL or PySpark templates.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Table DDL or table specifications.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Data-quality expectation definitions.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Technical documentation.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Reconciliation queries.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Test cases.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;Phase 4: Approval and observability&lt;/H3&gt;&lt;P&gt;Track:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;Who approved the metadata.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Which version generated the pipeline.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Which generated artifact was deployed.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Which quality expectations failed.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Which source-to-target definitions changed.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;This sequence creates value before attempting a fully autonomous delivery system.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Final Thought&lt;/H2&gt;&lt;P&gt;Modern data platforms have made execution, scaling, orchestration, and governance far more accessible.&lt;/P&gt;&lt;P&gt;But many delivery teams still lose time translating the same business logic across mappings, code, tests, quality checks, and documentation.&lt;/P&gt;&lt;P&gt;A governed metadata-to-pipeline pattern addresses that gap.&lt;/P&gt;&lt;P&gt;The goal is not to remove data engineers.&lt;/P&gt;&lt;P&gt;The goal is to reduce repeated interpretation work, make delivery more consistent, and allow engineers to focus on the work that requires judgment:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;architecture,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;business semantics,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;data-product design,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;performance,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;reliability,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;governance,&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;and production readiness.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The future of data engineering is not just code generation.&lt;/P&gt;&lt;P&gt;It is intent-driven, reviewable, and governed delivery.&lt;/P&gt;&lt;H2&gt;About the Author&lt;/H2&gt;&lt;P&gt;Amit Kumar Singh is a data engineering leader focused on metadata-driven delivery, data quality, governance, and AI-assisted engineering workflows.&lt;/P&gt;&lt;P&gt;He is building &lt;STRONG&gt;Data Engineering Copilot&lt;/STRONG&gt;, an independent project exploring how structured business and technical metadata can support more consistent, reviewable data delivery.&lt;/P&gt;&lt;P&gt;Learn more: &lt;STRONG&gt;DataEngineeringCopilot.com&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;A href="https://www.linkedin.com/in/amit-singh-57980030/" target="_blank" rel="noopener"&gt;https://www.linkedin.com/in/amit-singh-57980030/&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 27 Jun 2026 02:42:42 GMT</pubDate>
      <guid>https://community.databricks.com/t5/community-articles/from-business-requirements-to-lakeflow-pipelines-a-governed/m-p/160710#M1323</guid>
      <dc:creator>AmitDECopilot</dc:creator>
      <dc:date>2026-06-27T02:42:42Z</dc:date>
    </item>
  </channel>
</rss>

