<?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 Re: Inquiring whether table triggers are the recommended tool for the job in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/inquiring-whether-table-triggers-are-the-recommended-tool-for/m-p/153323#M53957</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/215238"&gt;@David_Dabbs&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;This is a well-structured problem. Let me address each of the three concerns systematically, then recommend an overall pattern.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Notification: Delta Live Tables Triggers vs. Recommended Alternatives&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Table triggers on VIEWs are not the right tool here. Databricks does not support DML triggers (in the Oracle sense) on Delta tables or views. What Databricks does have is:&lt;/P&gt;&lt;P&gt;- &lt;STRONG&gt;Structured Streaming with trigger(availableNow=True)&lt;/STRONG&gt;&amp;nbsp;— a consumer-side poll that runs a job on a schedule and processes only new data since the last checkpoint. This is still polling, just abstracted.&lt;BR /&gt;- &lt;STRONG&gt;Delta Live Tables&lt;/STRONG&gt; — pipeline-oriented, not event-driven across workspace boundaries.&lt;BR /&gt;- &lt;STRONG&gt;Databricks Workflows "File Arrival" / table-based triggers&lt;/STRONG&gt; — these watch for new files in cloud storage, not Delta table writes.&lt;/P&gt;&lt;P&gt;The recommended pattern for cross-workspace, near-real-time notification is Databricks Workflows plus a lightweight event bus. Given your Unity Catalog shared governance, there are two practical approaches:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Option A: Workflows REST API (Job Triggering)&lt;/STRONG&gt;&lt;BR /&gt;The producer workspace, upon completing its data load, calls the Databricks REST API to trigger a job in each consumer workspace. Each consumer pre-creates a Workflow job (notebook task) and grants the producer's service principal `CAN_TRIGGER` permission on it. The producer calls `POST /api/2.1/jobs/run-now` against each consumer workspace endpoint.&lt;/P&gt;&lt;P&gt;- Near-immediate, no polling&lt;BR /&gt;- Native to Databricks, no external infrastructure&lt;BR /&gt;- Manageable with your low consumer count&lt;BR /&gt;- Producer must know each consumer's workspace URL and job ID (a small config table suffices)&lt;BR /&gt;- Bi-lateral trust: consumer workspaces must authorize the producer SP&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Option B: External Event Bus (AWS EventBridge or SNS/SQS)&lt;/STRONG&gt;&lt;BR /&gt;The producer publishes an event to AWS EventBridge or an SNS topic upon data load completion. Each consumer workspace has a Databricks Workflow with an HTTP webhook trigger or a Lambda-to-REST API bridge that fires the consumer job.&lt;/P&gt;&lt;P&gt;- Fully decoupled&lt;BR /&gt;- Auditable event history&lt;BR /&gt;- Scales to more consumers without producer config changes&lt;BR /&gt;- Requires AWS infrastructure outside Databricks&lt;BR /&gt;- More moving parts for a low-consumer scenario&lt;/P&gt;&lt;P&gt;For your stated scale (low consumer count, same UC governance domain), Option A is the pragmatic recommendation. The producer maintains a small config table of {consumer_workspace_url, job_id, sp_token_secret_scope} and fans out job triggers upon completion.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Delta Share Facade: Views Are the Right Call&lt;/STRONG&gt;&lt;BR /&gt;Your plan to expose a VIEW over the control table and the timeseries table via Delta Sharing is correct and idiomatic. A few reinforcing points:&lt;BR /&gt;Grant access to the consumer automation service principals, not user accounts, so permissions survive personnel changes. The view facade lets you control exactly which columns and rows consumers see — useful for isolating `is_complete` or `data_as_of_date` without exposing internal control columns. On the consumer side, the shared tables are read-only by definition in Delta Sharing, which cleanly enforces the separation of concerns.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Posting Results Back: The Recommended Pattern&lt;/STRONG&gt;&lt;BR /&gt;Databricks has no analog to Oracle's table-valued procedure parameters callable cross-workspace. The options from most to least recommended:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Recommended: Consumer-Owned Shared Table, Producer Pulls&lt;/STRONG&gt;&lt;BR /&gt;Each consumer workspace has a results Delta table (e.g., `consumer_ws.reporting.results_outbox`) shared back to the producer via a reverse Delta Share. The producer has a lightweight Workflow job — triggered by a callback the consumer makes when done — that reads from the shared table, validates, and writes to its own `producer.governance.consumer_results` table.&lt;BR /&gt;The callback is simply: when the consumer job finishes, it calls `POST /api/2.1/jobs/run-now` on the producer's ingest job, passing the `consumer_id` as a job parameter. The producer job then knows which shared table to read.&lt;BR /&gt;- Decoupled — consumer just writes locally and signals&lt;BR /&gt;- No cross-workspace write permissions needed&lt;BR /&gt;- Producer controls validation logic centrally&lt;BR /&gt;- Consumer gets feedback via a status table the producer writes back to a shared acknowledgment view&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;A few Unity Catalog housekeeping points worth flagging as you design this:&lt;BR /&gt;Use service principals (not PATs tied to users) for all cross-workspace job triggers; store their OAuth credentials in Databricks Secrets. The `CAN_TRIGGER` permission on Jobs is workspace-local — you'll need to grant it per consumer workspace, but it's a one-time configuration per consumer onboarding. Delta Sharing across workspaces on the same UC metastore uses internal sharing (no external recipient overhead), which simplifies credential management significantly.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Sat, 04 Apr 2026 19:24:57 GMT</pubDate>
    <dc:creator>lingareddy_Alva</dc:creator>
    <dc:date>2026-04-04T19:24:57Z</dc:date>
    <item>
      <title>Inquiring whether table triggers are the recommended tool for the job</title>
      <link>https://community.databricks.com/t5/data-engineering/inquiring-whether-table-triggers-are-the-recommended-tool-for/m-p/153316#M53955</link>
      <description>&lt;P&gt;Seeking the DBRX-appropriate patterns for our application.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;We have a number of workspaces governed by the same Unity Catalog.&amp;nbsp;&lt;BR /&gt;One workspace we'll call the 'producer'. It manages data via external custom API interfaces.&lt;BR /&gt;There are a number of internal consumers who want timely notification, as immediate as possible, when this central 'producer' has acquired new data, approximately monthly, without them 'polling' the "last data arrival date" control table. Upon notification, they would execute processes - likely a Notebook - that accesses &amp;amp; processes the producer data, and then once processing is complete, report a status back to the producer system.&lt;BR /&gt;&lt;BR /&gt;&lt;U&gt;Sharing and Acquisition&lt;/U&gt;&lt;BR /&gt;We intend to provision access to the producer data via permissioned Delta share. The 'producer' and several 'consumer' workspaces are governed by the same U Catalog on AWS.&amp;nbsp; Our plan is for the producing system to create VIEW facade for the 'latest data' control table and the single timeseries data table and grant access to the consuming workspace automation system accounts.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;U&gt;Notification&lt;/U&gt;&lt;BR /&gt;Are table triggers created (on the VIEW of the "data complete control table") by the downstream consuming systems the reliable and recommended tool for initiating the consumers' processing?&lt;BR /&gt;&lt;BR /&gt;&lt;U&gt;Posting Processing Results back to the Producer&lt;/U&gt;&lt;BR /&gt;Feedback from consumers is trivial - an id column from each consumed row plus a smallint result status code. The consumer must idenfity itself to the producer (so producer knows which system is responding) when posting the results. The producer validates the submittted rows and the consumer should get immediate feedback when there are errors with any of them. I'm recalling Oracle procedures can accept rowset parameters, but I have not seen something like this in DBRX and can procedure callable across workspace process boundaries? We expect the consumers will have their processed 'status reports' ready in a table prior to posting. The number of consuming and reporting clients is low, so we could stomach configuring some bi-lateral arrangement&amp;nbsp; - a job in the producer system that the consumer is permissioned to call/execute when ready to report. It would access a Delta shared table from that consumer's system to the producer.&amp;nbsp; Surely there is more de-coupled approach.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;I am new to DBRX and appreciate your suggestions in advance. Thanks,&lt;BR /&gt;DD&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 04 Apr 2026 18:11:57 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/inquiring-whether-table-triggers-are-the-recommended-tool-for/m-p/153316#M53955</guid>
      <dc:creator>David_Dabbs</dc:creator>
      <dc:date>2026-04-04T18:11:57Z</dc:date>
    </item>
    <item>
      <title>Re: Inquiring whether table triggers are the recommended tool for the job</title>
      <link>https://community.databricks.com/t5/data-engineering/inquiring-whether-table-triggers-are-the-recommended-tool-for/m-p/153323#M53957</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/215238"&gt;@David_Dabbs&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;This is a well-structured problem. Let me address each of the three concerns systematically, then recommend an overall pattern.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Notification: Delta Live Tables Triggers vs. Recommended Alternatives&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Table triggers on VIEWs are not the right tool here. Databricks does not support DML triggers (in the Oracle sense) on Delta tables or views. What Databricks does have is:&lt;/P&gt;&lt;P&gt;- &lt;STRONG&gt;Structured Streaming with trigger(availableNow=True)&lt;/STRONG&gt;&amp;nbsp;— a consumer-side poll that runs a job on a schedule and processes only new data since the last checkpoint. This is still polling, just abstracted.&lt;BR /&gt;- &lt;STRONG&gt;Delta Live Tables&lt;/STRONG&gt; — pipeline-oriented, not event-driven across workspace boundaries.&lt;BR /&gt;- &lt;STRONG&gt;Databricks Workflows "File Arrival" / table-based triggers&lt;/STRONG&gt; — these watch for new files in cloud storage, not Delta table writes.&lt;/P&gt;&lt;P&gt;The recommended pattern for cross-workspace, near-real-time notification is Databricks Workflows plus a lightweight event bus. Given your Unity Catalog shared governance, there are two practical approaches:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Option A: Workflows REST API (Job Triggering)&lt;/STRONG&gt;&lt;BR /&gt;The producer workspace, upon completing its data load, calls the Databricks REST API to trigger a job in each consumer workspace. Each consumer pre-creates a Workflow job (notebook task) and grants the producer's service principal `CAN_TRIGGER` permission on it. The producer calls `POST /api/2.1/jobs/run-now` against each consumer workspace endpoint.&lt;/P&gt;&lt;P&gt;- Near-immediate, no polling&lt;BR /&gt;- Native to Databricks, no external infrastructure&lt;BR /&gt;- Manageable with your low consumer count&lt;BR /&gt;- Producer must know each consumer's workspace URL and job ID (a small config table suffices)&lt;BR /&gt;- Bi-lateral trust: consumer workspaces must authorize the producer SP&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Option B: External Event Bus (AWS EventBridge or SNS/SQS)&lt;/STRONG&gt;&lt;BR /&gt;The producer publishes an event to AWS EventBridge or an SNS topic upon data load completion. Each consumer workspace has a Databricks Workflow with an HTTP webhook trigger or a Lambda-to-REST API bridge that fires the consumer job.&lt;/P&gt;&lt;P&gt;- Fully decoupled&lt;BR /&gt;- Auditable event history&lt;BR /&gt;- Scales to more consumers without producer config changes&lt;BR /&gt;- Requires AWS infrastructure outside Databricks&lt;BR /&gt;- More moving parts for a low-consumer scenario&lt;/P&gt;&lt;P&gt;For your stated scale (low consumer count, same UC governance domain), Option A is the pragmatic recommendation. The producer maintains a small config table of {consumer_workspace_url, job_id, sp_token_secret_scope} and fans out job triggers upon completion.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Delta Share Facade: Views Are the Right Call&lt;/STRONG&gt;&lt;BR /&gt;Your plan to expose a VIEW over the control table and the timeseries table via Delta Sharing is correct and idiomatic. A few reinforcing points:&lt;BR /&gt;Grant access to the consumer automation service principals, not user accounts, so permissions survive personnel changes. The view facade lets you control exactly which columns and rows consumers see — useful for isolating `is_complete` or `data_as_of_date` without exposing internal control columns. On the consumer side, the shared tables are read-only by definition in Delta Sharing, which cleanly enforces the separation of concerns.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Posting Results Back: The Recommended Pattern&lt;/STRONG&gt;&lt;BR /&gt;Databricks has no analog to Oracle's table-valued procedure parameters callable cross-workspace. The options from most to least recommended:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Recommended: Consumer-Owned Shared Table, Producer Pulls&lt;/STRONG&gt;&lt;BR /&gt;Each consumer workspace has a results Delta table (e.g., `consumer_ws.reporting.results_outbox`) shared back to the producer via a reverse Delta Share. The producer has a lightweight Workflow job — triggered by a callback the consumer makes when done — that reads from the shared table, validates, and writes to its own `producer.governance.consumer_results` table.&lt;BR /&gt;The callback is simply: when the consumer job finishes, it calls `POST /api/2.1/jobs/run-now` on the producer's ingest job, passing the `consumer_id` as a job parameter. The producer job then knows which shared table to read.&lt;BR /&gt;- Decoupled — consumer just writes locally and signals&lt;BR /&gt;- No cross-workspace write permissions needed&lt;BR /&gt;- Producer controls validation logic centrally&lt;BR /&gt;- Consumer gets feedback via a status table the producer writes back to a shared acknowledgment view&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;A few Unity Catalog housekeeping points worth flagging as you design this:&lt;BR /&gt;Use service principals (not PATs tied to users) for all cross-workspace job triggers; store their OAuth credentials in Databricks Secrets. The `CAN_TRIGGER` permission on Jobs is workspace-local — you'll need to grant it per consumer workspace, but it's a one-time configuration per consumer onboarding. Delta Sharing across workspaces on the same UC metastore uses internal sharing (no external recipient overhead), which simplifies credential management significantly.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 04 Apr 2026 19:24:57 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/inquiring-whether-table-triggers-are-the-recommended-tool-for/m-p/153323#M53957</guid>
      <dc:creator>lingareddy_Alva</dc:creator>
      <dc:date>2026-04-04T19:24:57Z</dc:date>
    </item>
    <item>
      <title>Re: Inquiring whether table triggers are the recommended tool for the job</title>
      <link>https://community.databricks.com/t5/data-engineering/inquiring-whether-table-triggers-are-the-recommended-tool-for/m-p/153330#M53958</link>
      <description>&lt;P&gt;Thank you &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/24053"&gt;@lingareddy_Alva&lt;/a&gt;. Your considered response lives up to your forum title: Esteemed Contributor.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;1. Notification.&amp;nbsp;&lt;/STRONG&gt;&lt;BR /&gt;Appreciate the confirmation that the determinism and control is worth the small bit of explicit configuration given the limited set of consumers.&lt;BR /&gt;&lt;BR /&gt;Regarding table triggers, did I misunderstand the capability described here:&amp;nbsp;&amp;nbsp;&lt;A href="https://docs.databricks.com/aws/en/jobs/trigger-table-update?" target="_blank"&gt;https://docs.databricks.com/aws/en/jobs/trigger-table-update?&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;Re. Option B, apologies for not having mentioned that we had already foreclosed on any AWS eventbus complexity. Option A is where we suspected we might end up. Regarding means to execute the cross-ws job, we assumed that since the producer will be running a notebook job it can initiate the target consumer jobs via API, e.g&lt;/P&gt;&lt;LI-CODE lang="python"&gt;# Point the client at consumer workspace...
w_b = WorkspaceClient(host="https://consumer1-workspace-host", token="&amp;lt;token-from-secrets&amp;gt;")
# Trigger workspace job
w_b.jobs.run_now(job_id=&amp;lt;client1-processing-job-id&amp;gt;)&lt;/LI-CODE&gt;&lt;P&gt;&lt;STRONG&gt;&lt;BR /&gt;2. Facade&lt;/STRONG&gt;&lt;BR /&gt;Agree - we use VIEWS like this in legacy PG to reduce coupling for schema evolution.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;3. Triggering Postbacks&lt;/STRONG&gt;&lt;BR /&gt;As my UK colleagues are fond of saying, "in for a penny, in for a Pound." Since we're already using explicit calls, it makes sense to apply that pattern on the return trip. Thanks for the confirmation.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;4. Tips&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;The `CAN_TRIGGER` permission on Jobs is workspace-local — you'll need to grant it per consumer workspace, but it's a one-time configuration per consumer onboarding.&lt;/EM&gt;&lt;BR /&gt;&lt;BR /&gt;Appreciate the pointers. So this configures a calling workspace, irrespective of service principal, the ACL to TRIGGER, and then a specific principal is granted a calling ACL?&lt;BR /&gt;&lt;BR /&gt;Thanks,&lt;BR /&gt;DD&lt;/P&gt;</description>
      <pubDate>Sat, 04 Apr 2026 20:13:45 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/inquiring-whether-table-triggers-are-the-recommended-tool-for/m-p/153330#M53958</guid>
      <dc:creator>David_Dabbs</dc:creator>
      <dc:date>2026-04-04T20:13:45Z</dc:date>
    </item>
    <item>
      <title>Re: Inquiring whether table triggers are the recommended tool for the job</title>
      <link>https://community.databricks.com/t5/data-engineering/inquiring-whether-table-triggers-are-the-recommended-tool-for/m-p/153339#M53959</link>
      <description>&lt;P&gt;Thanks&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/215238"&gt;@David_Dabbs&lt;/a&gt;&amp;nbsp; for the accepting as a solution.&lt;/P&gt;&lt;P&gt;On table triggers: you were right the feature exists, but the Delta Sharing constraint kills it for your topology — tables shared via Delta Sharing are not supported&amp;nbsp;&amp;nbsp;&lt;A href="https://docs.databricks.com/aws/en/jobs/trigger-table-update" target="_blank"&gt;https://docs.databricks.com/aws/en/jobs/trigger-table-update&lt;/A&gt;&amp;nbsp;as trigger sources. Explicit API call stands.&lt;/P&gt;&lt;P&gt;On CAN_TRIGGER: your model is correct. It's a per-job ACL granted to a specific principal — no workspace-level intermediary. Host URL is just addressing.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 05 Apr 2026 02:40:46 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/inquiring-whether-table-triggers-are-the-recommended-tool-for/m-p/153339#M53959</guid>
      <dc:creator>lingareddy_Alva</dc:creator>
      <dc:date>2026-04-05T02:40:46Z</dc:date>
    </item>
  </channel>
</rss>

