From bcb7222076ecae487fbe274412ea0e4fe5c2acfb Mon Sep 17 00:00:00 2001 From: Denise Schlesinger Date: Mon, 31 Aug 2026 17:16:17 +0300 Subject: [PATCH] Doc denisa changes (#7595) * test Added introductory content to the add-cluster-connection article. * mv changes * links * mv changes * corrections * suggested changes applied * chnages * sagiv asks * changes by Shiri * Update data-explorer/kusto/management/materialized-views/materialized-views-optimization.md Co-authored-by: learn-build-service-prod-10[bot] <274431553+learn-build-service-prod-10[bot]@users.noreply.github.com> * new pr * shiri comments fixed pr7585 * shiri take 3 * last changes * export and cached query results * export sales tbl --------- Co-authored-by: learn-build-service-prod-10[bot] <274431553+learn-build-service-prod-10[bot]@users.noreply.github.com> --- .../create-or-alter-workload-group-command.md | 8 -- .../data-export/continuous-data-export.md | 76 +++++++++++++++++- .../export-data-to-an-external-table.md | 71 +++++++++++++++- .../management/query-consistency-policy.md | 42 +++++++--- .../create-eventhouse-shortcut.png | Bin 0 -> 13476 bytes 5 files changed, 173 insertions(+), 24 deletions(-) create mode 100644 data-explorer/kusto/media/continuous-export/create-eventhouse-shortcut.png diff --git a/data-explorer/kusto/management/create-or-alter-workload-group-command.md b/data-explorer/kusto/management/create-or-alter-workload-group-command.md index 5d57b21699..79c911f944 100644 --- a/data-explorer/kusto/management/create-or-alter-workload-group-command.md +++ b/data-explorer/kusto/management/create-or-alter-workload-group-command.md @@ -93,10 +93,6 @@ Create **MyWorkloadGroup** workload group with a full definition of its request "MaxExecutionTime": { "IsRelaxable": true, "Value": "00:04:00" - }, - "QueryResultsCacheMaxAge": { - "IsRelaxable": true, - "Value": "00:05:00" } } } ``` @@ -147,10 +143,6 @@ Create **My Workload Group** workload group with a full definition of its reques "MaxExecutionTime": { "IsRelaxable": true, "Value": "00:04:00" - }, - "QueryResultsCacheMaxAge": { - "IsRelaxable": true, - "Value": "00:05:00" } }, "RequestRateLimitPolicies": [ diff --git a/data-explorer/kusto/management/data-export/continuous-data-export.md b/data-explorer/kusto/management/data-export/continuous-data-export.md index b2c20e41c0..4352135b33 100644 --- a/data-explorer/kusto/management/data-export/continuous-data-export.md +++ b/data-explorer/kusto/management/data-export/continuous-data-export.md @@ -3,7 +3,7 @@ title: Continuous data export description: This article describes Continuous data export. ms.reviewer: yifats ms.topic: reference -ms.date: 02/09/2026 +ms.date: 08/25/2026 --- # Continuous data export overview @@ -117,11 +117,81 @@ To create a continuous export job with a query that references a table with [Row ## Continuous export to delta table - > [!IMPORTANT] > Delta table partitioning isn't supported in continuous data export. > -> Kusto won't write to existing delta tables if the [delta protocol writer version](https://github.com/delta-io/delta/blob/master/PROTOCOL.md#schema-serialization-format) is higher than 1. +> Kusto won't write to existing delta tables if the [delta protocol writer version](https://github.com/delta-io/delta/blob/master/PROTOCOL.md#schema-serialization-format) is higher than 1. The destination Delta table must use minimum reader version 1 and minimum writer version 1. + +::: moniker range="microsoft-fabric" + +Features such as `NOT NULL` constraints can increase the minimum Delta writer version and cause continuous export to fail with the following error: + +```text +Unsupported minimum writer version: 2 +``` + +In this example scenario, you have a `Customers` table that receives customer records from several departments. You want to continuously export new records for customers associated with the Sales department to a Delta table in a Lakehouse. The continuous export query filters the source table by department name and projects the columns that match the destination table schema. + +If you receive this error: + +1. Create a new Delta table in a Lakehouse notebook. Omit `NOT NULL` constraints and explicitly set both protocol versions to 1. + + ```sql + %%sql + CREATE TABLE CustomersExportV1 ( + CustomerId STRING, + Name STRING, + Address STRING, + City STRING, + DepartmentName STRING + ) + USING DELTA + TBLPROPERTIES ( + 'delta.minReaderVersion' = '1', + 'delta.minWriterVersion' = '1' + ); + ``` + +1. Create or recreate the Eventhouse shortcut so that it targets the new Delta table. Name the shortcut `customers`. The shortcut is exposed in the Eventhouse database as an external table. + + :::image type="content" source="../../media/continuous-export/create-eventhouse-shortcut.png" alt-text="Screenshot of the Eventhouse database explorer with the New shortcut menu selected and existing shortcuts listed." lightbox="../../media/continuous-export/create-eventhouse-shortcut.png"::: + +1. Create the source table and a continuous export that targets the external table. Then add sample records so that the continuous export processes them: + + ```kusto + // Creates the source table. + .create table Customers ( + customerId:string, + Name:string, + address:string, + City:string, + departmentName:string + ) + + // Continuously exports customers associated with the Sales department. + .create-or-alter continuous-export CustomersSalesExport + over (Customers) + to table customers + with ( + intervalBetweenRuns=10m, + managedIdentity="system" + ) + <| Customers + | where departmentName == "Sales" + | project customerId, Name, address, City, departmentName + + // Adds sample customers after the continuous export is created. + .ingest inline into table Customers <| + C001,Contoso Madrid,Calle de Alcala 10,Madrid,Sales + C002,Fabrikam Barcelona,Avinguda Diagonal 20,Barcelona,Sales + C003,Northwind London,10 King Street,London,Marketing + C004,Adventure Works Paris,25 Rue de Rivoli,Paris,Finance + C005,Wide World Berlin,40 Friedrichstrasse,Berlin,Operations + ``` + +Use a new table name if the protocol of an existing Delta table was upgraded. Changing table properties doesn't safely downgrade the Delta protocol of an existing table. For a noncontinuous export example, see [Export to a Delta table in Eventhouse](export-data-to-an-external-table.md#export-to-a-delta-table-in-eventhouse). + +::: moniker-end To define continuous export to a delta table, do the following steps: diff --git a/data-explorer/kusto/management/data-export/export-data-to-an-external-table.md b/data-explorer/kusto/management/data-export/export-data-to-an-external-table.md index 06620c7517..7a65de3151 100644 --- a/data-explorer/kusto/management/data-export/export-data-to-an-external-table.md +++ b/data-explorer/kusto/management/data-export/export-data-to-an-external-table.md @@ -3,7 +3,7 @@ title: .export to table description: This article describes Export data to an external table. ms.reviewer: alexans ms.topic: reference -ms.date: 12/01/2024 +ms.date: 08/25/2026 --- # .export to table @@ -90,6 +90,75 @@ In order to export to an external table, you must set up write permissions. For * Parquet native export is a more performant, resource light export mechanism. An exported `datetime` column is currently unsupported by Synapse SQL `COPY`. +::: moniker range="microsoft-fabric" + +### Export to a Delta table in Eventhouse + +The destination Delta table must use minimum reader version 1 and minimum writer version 1. Features such as `NOT NULL` constraints can increase the minimum writer version and cause the export to fail with the following error: + +```text +Unsupported minimum writer version: 2 +``` + +In this example scenario, you have a `Customers` table that contains customers associated with several departments. You want to export only the customers associated with the Sales department to a Delta table in a Lakehouse. The export query filters the source table by department name and projects the columns that match the destination table schema. + +To resolve this error: + +1. Create a new Delta table in a Lakehouse notebook. Omit `NOT NULL` constraints and explicitly set both protocol versions to 1. + + ```sql + %%sql + CREATE TABLE CustomersExportV1 ( + CustomerId STRING, + Name STRING, + Address STRING, + City STRING, + DepartmentName STRING + ) + USING DELTA + TBLPROPERTIES ( + 'delta.minReaderVersion' = '1', + 'delta.minWriterVersion' = '1' + ); + ``` + +1. Create or recreate the Eventhouse shortcut so that it targets the new Delta table. Name the shortcut `customers`. The shortcut is exposed in the Eventhouse database as an external table. + + :::image type="content" source="../../media/continuous-export/create-eventhouse-shortcut.png" alt-text="Screenshot of the Eventhouse database explorer with the New shortcut menu selected and existing shortcuts listed." lightbox="../../media/continuous-export/create-eventhouse-shortcut.png"::: + +1. Create the source table, add sample records, and export the customers associated with the Sales department to the external table: + + ```kusto + // Creates the source table. + .create table Customers ( + customerId:string, + Name:string, + address:string, + City:string, + departmentName:string + ) + + // Adds sample customers associated with several departments. + .ingest inline into table Customers <| + C001,Contoso Madrid,Calle de Alcala 10,Madrid,Sales + C002,Fabrikam Barcelona,Avinguda Diagonal 20,Barcelona,Sales + C003,Northwind London,10 King Street,London,Marketing + C004,Adventure Works Paris,25 Rue de Rivoli,Paris,Finance + C005,Wide World Berlin,40 Friedrichstrasse,Berlin,Operations + + // Exports customers associated with the Sales department. + .export to table customers + <| Customers + | where departmentName == "Sales" + | project customerId, Name, address, City, departmentName + ``` + +Use a new table name if the protocol of an existing Delta table was upgraded. Changing table properties doesn't safely downgrade the Delta protocol of an existing table. + +This protocol requirement also applies to [continuous export](continuous-data-export.md#continuous-export-to-delta-table). + +::: moniker-end + ### Number of files The number of files written per partition depends on the [distribution settings](#distribution-settings) of the export operation: diff --git a/data-explorer/kusto/management/query-consistency-policy.md b/data-explorer/kusto/management/query-consistency-policy.md index 98c296d554..ab1b4af537 100644 --- a/data-explorer/kusto/management/query-consistency-policy.md +++ b/data-explorer/kusto/management/query-consistency-policy.md @@ -34,20 +34,38 @@ The following limits are configurable: ## Example -This policy configuration sets query consistency to weak and the maximum age for cached results to 5 minutes. - -```json -"QueryConsistencyPolicy": { - "QueryConsistency": { - "IsRelaxable": true, - "Value": "Weak" - }, - "CachedResultsMaxAge": { - "IsRelaxable": true, - "Value": "00:05:00" - } +This policy configuration sets query consistency to weak. + +````kusto +.alter-merge workload_group [''] ``` +{ + "QueryConsistencyPolicy": + { + "QueryConsistency": { + "IsRelaxable": true, + "Value": "Weak" + } + } +} +``` +```` + +This policy configuration sets the maximum age for cached results to 5 minutes. + +````kusto +.alter-merge workload_group [''] ``` +{ + "QueryConsistencyPolicy": + { + "CachedResultsMaxAge": { + "IsRelaxable": true, + "Value": "00:05:00" + } + } } + ``` +```` ::: moniker range="azure-data-explorer" ## Monitoring diff --git a/data-explorer/kusto/media/continuous-export/create-eventhouse-shortcut.png b/data-explorer/kusto/media/continuous-export/create-eventhouse-shortcut.png new file mode 100644 index 0000000000000000000000000000000000000000..47b7d947a598abb06b80e188f19841c85a5cc077 GIT binary patch literal 13476 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