Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

Reply
chetanhiwale
Helper III
Helper III

KQL update policy

I have 3 tables, src_table (data inserted from eventstream), target_table (transformed data). reference table. How a join can be applied in update policy query parameters for src_table and reference_table , and output of the join should stored in target_table.  Also which table should be in SourceTable parameter. 

Example for Update policy,

.alter table TargetTable policy update
@'[{"IsEnabled": true, "Source": "SourceTable", "Query": "SourceTable | join kind=inner (ReferenceTable) on id | project id, name, additional_info", "IsTransactional": true}]'
1 ACCEPTED SOLUTION
Anonymous
Not applicable

Hi @chetanhiwale ,

 

Please try the following alternatives to see if they work:

1. Intermediate Table Approach

(1)Continue using `src_table` with streaming ingestion enabled to receive real-time data.
(2)Create an intermediate table (e.g., `intermediate_table`) without streaming ingestion.
(3)Set up an update policy on `intermediate_table` to transform and join data from `src_table` and `reference_table`, and then store the result in `target_table`.

   .alter table intermediate_table policy update
   @'[{"IsEnabled": true, "Source": "src_table", "Query": "src_table | join kind=inner (reference_table) on id | project src_table.id, src_table.name, reference_table.additional_info", "IsTransactional": true}]'

 

2.Use a scheduled query to periodically join `src_table` and `reference_table`, and insert the results into `target_table`. This way, you can keep streaming ingestion enabled on `src_table`.

```kql
   .create-or-alter function UpdateTargetTable() {
       src_table
       | join kind=inner (reference_table) on id
       | project src_table.id, src_table.name, reference_table.additional_info
       | into target_table
   }

   .create-or-alter function ScheduledUpdate() {
       UpdateTargetTable()
   }

   .create-or-alter function ScheduledUpdatePolicy() {
       .set-or-append target_table <| ScheduledUpdate()
   }

   .schedule function ScheduledUpdatePolicy() every 5m
   ```

 

Best Regards,

Neeko Tang

If this post  helps, then please consider Accept it as the solution  to help the other members find it more quickly. 

View solution in original post

6 REPLIES 6
Anonymous
Not applicable

Hi @chetanhiwale ,

 

The SourceTable parameter should be set to src_table since it is the table where data is being inserted from the event stream.

Here's how you can define the update policy:

```kusto
.alter table target_table policy update
@'[{"IsEnabled": true, "Source": "src_table", "Query": "src_table | join kind=inner (reference_table) on id | project id, name, additional_info", "IsTransactional": true}]'
```

 

Best Regards,

Neeko Tang

If this post  helps, then please consider Accept it as the solution  to help the other members find it more quickly. 

 

Thanks @Anonymous  for quick reply, 

Is there any condition for source table, that its streaming ingestion should be disabled. I have tried the join but, got the following error
Error during execution of a policy operation: Referencing additional tables from update policy is not allowed when the source table has a StreamingIngestion policy defined.

Anonymous
Not applicable

Hi @chetanhiwale ,

 

I apologize for ignoring some of the limitations.
I found some information for your reference:

vtangjiemsft_0-1736406546797.png

.alter table src_table policy streamingingestion '{"IsEnabled": false}'

 

For more details, please refer:

Update policy overview - Kusto | Microsoft Learn

.alter table policy streamingingestion command - Kusto | Microsoft Learn

 

Best Regards,

Neeko Tang

If this post  helps, then please consider Accept it as the solution  to help the other members find it more quickly. 

By disabling streaming ingestion , we cant use src_table , as we will not get any data in src_table. Please share your thoughts on it. 

Anonymous
Not applicable

Hi @chetanhiwale ,

 

Please try the following alternatives to see if they work:

1. Intermediate Table Approach

(1)Continue using `src_table` with streaming ingestion enabled to receive real-time data.
(2)Create an intermediate table (e.g., `intermediate_table`) without streaming ingestion.
(3)Set up an update policy on `intermediate_table` to transform and join data from `src_table` and `reference_table`, and then store the result in `target_table`.

   .alter table intermediate_table policy update
   @'[{"IsEnabled": true, "Source": "src_table", "Query": "src_table | join kind=inner (reference_table) on id | project src_table.id, src_table.name, reference_table.additional_info", "IsTransactional": true}]'

 

2.Use a scheduled query to periodically join `src_table` and `reference_table`, and insert the results into `target_table`. This way, you can keep streaming ingestion enabled on `src_table`.

```kql
   .create-or-alter function UpdateTargetTable() {
       src_table
       | join kind=inner (reference_table) on id
       | project src_table.id, src_table.name, reference_table.additional_info
       | into target_table
   }

   .create-or-alter function ScheduledUpdate() {
       UpdateTargetTable()
   }

   .create-or-alter function ScheduledUpdatePolicy() {
       .set-or-append target_table <| ScheduledUpdate()
   }

   .schedule function ScheduledUpdatePolicy() every 5m
   ```

 

Best Regards,

Neeko Tang

If this post  helps, then please consider Accept it as the solution  to help the other members find it more quickly. 

I have error when i try: 

 .create-or-alter function ScheduledUpdatePolicy() {
       .set-or-append target_table <| ScheduledUpdate()
   }

Also, ".schedule function ScheduledUpdate() every 5m" also doesn't work
I think .schedule is not a KQL command, also create an intermediate table that you never use, this solution doesn't work, I don't understand why it was marked correctly

Helpful resources

Announcements
Fabric July 2025 Monthly Update Carousel

Fabric Monthly Update - July 2025

Check out the July 2025 Fabric update to learn about new features.

July 2025 community update carousel

Fabric Community Update - July 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors
Top Kudoed Authors