You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: data-explorer/kusto/includes/python-plugin-adx.md
+14-39Lines changed: 14 additions & 39 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,13 +1,13 @@
1
1
---
2
2
ms.topic: include
3
-
ms.date: 09/17/2024
3
+
ms.date: 05/19/2025
4
4
---
5
5
6
6
The Python plugin runs a user-defined function (UDF) using a Python script. The Python script gets tabular data as its input, and produces tabular output. The plugin's runtime is hosted in [sandboxes](../concepts/sandboxes.md), running on the cluster's nodes.
@@ -49,11 +49,11 @@ To see the list of packages for the different Python images, see [Python package
49
49
## Use ingestion from query and update policy
50
50
51
51
* Use the plugin in queries that are:
52
-
* Defined as part of an [update policy](../management/update-policy.md), whose source table is ingested to using *non-streaming*ingestion.
52
+
* Defined as part of an [update policy](../management/update-policy.md), whose source table is ingested by [queued ingestion](/azure/data-explorer/ingest-data-overview#continuous-data-ingestion).
53
53
* Run as part of a command that [ingests from a query](../management/data-ingestion/ingest-from-query.md), such as `.set-or-append`.
54
54
* You can't use the plugin in a query that is defined as part of an update policy, whose source table is ingested using [streaming ingestion](/azure/data-explorer/ingest-data-streaming).
55
55
56
-
## Examples
56
+
## Example
57
57
58
58
~~~kusto
59
59
range x from 1 to 360 step 1
@@ -74,31 +74,6 @@ result["fx"] = g * np.sin(df["x"]/n*2*np.pi*f)
74
74
75
75
:::image type="content" source="../query/media/plugin/sine-demo.png" alt-text="Screenshot of sine demo showing query result." border="false":::
76
76
77
-
~~~kusto
78
-
print "This is an example for using 'external_artifacts'"
* Reduce the plugin's input dataset to the minimum amount required (columns/rows).
@@ -116,9 +91,9 @@ print "This is an example for using 'external_artifacts'"
116
91
` ``` `
117
92
` python code`
118
93
` ``` `
119
-
* Use the [`externaldata` operator](../query/externaldata-operator.md) to obtain the content of a script that you've stored in an external location, such as Azure Blob storage.
94
+
* Use the [externaldata operator](../query/externaldata-operator.md) to obtain the content of a script that you've stored in an external location, such as Azure Blob storage.
120
95
121
-
### Example
96
+
### Example reading the Python script external data
122
97
123
98
```kusto
124
99
let script =
@@ -145,7 +120,7 @@ The URLs referenced by the external artifacts property must be:
145
120
> [!NOTE]
146
121
> When authenticating external artifacts using Managed Identities, the `SandboxArtifacts` usage must be defined on the cluster level [managed identity policy](../management/managed-identity-policy.md).
147
122
148
-
The artifacts are made available for the script to consume from a local temporary directory, `.\Temp`. The names provided in the property bag are used as the local file names. See [Examples](#examples).
123
+
The artifacts are made available for the script to be read from a local temporary directory, `.\Temp`. The names provided in the property bag are used as the local file names. See [Example](#example-using-external-artifacts).
149
124
150
125
For information regarding referencing external packages, see [Install packages for the Python plugin](#install-packages-for-the-python-plugin).
151
126
@@ -188,24 +163,24 @@ download the package and its dependencies.
188
163
pip wheel [-w download-dir] package-name.
189
164
```
190
165
191
-
1. Create a ZIPfilethat contains the required package and its dependencies.
166
+
1. Create a zipfilecontaining the required package and its dependencies.
192
167
193
168
* For private packages, zip the folder of the package and the folders of its dependencies.
194
169
* For public packages, zip the files that were downloaded in the previous step.
195
170
196
171
> [!NOTE]
197
172
>
198
-
>* Make sure to download the package that is compatible to the Python engine and the platform of the sandbox runtime (currently 3.6.5 on Windows)
173
+
>* Make sure to download the package that is compatible to the Python engine and the platform of the sandbox runtime (currently 3.10.8 or3.11.7 on Windows)
199
174
>* Make sure to zip the `.whl` files themselves, andnot their parent folder.
200
175
>* You can skip `.whl` files for packages that already exist with the same version in the base sandbox image.
201
176
202
-
1. Upload the zippedfile to a blob in the artifacts location (from step 1).
177
+
1. Upload the zipfile to a blob in the artifacts location (from step 1 of the prerequisites).
203
178
204
179
1. Call the `python` plugin.
205
-
* Specify the `external_artifacts` parameter with a property bag of name andreference to the ZIPfile (the blob's URL, including a SAS token).
206
-
* In your inline python code, import`Zipackage`from`sandbox_utils`and call its `install()` method with the name of the ZIPfile.
180
+
* Specify the `external_artifacts` parameter with a property bag of local name andblob URL of the zipfile (including a SAS token).
181
+
* In your inline python code, import`Zipackage`from`sandbox_utils`and call its `install()` method with the local name of the ZIPfile.
207
182
208
-
### Example
183
+
### Example using external artifacts
209
184
210
185
Install the [Faker](https://pypi.org/project/Faker/) package that generates fake data.
211
186
@@ -221,7 +196,7 @@ range ID from 1 to 3 step 1
221
196
for i inrange(df.shape[0]):
222
197
result.loc[i, "Name"] = fake.name()
223
198
```,
224
-
external_artifacts=bag_pack('faker.zip', 'https://artifacts.blob.core.windows.net/Faker.zip?*** REPLACE WITH YOUR SAS TOKEN ***'))
Copy file name to clipboardExpand all lines: data-explorer/kusto/includes/python-plugin-fabric.md
+84-7Lines changed: 84 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,13 +1,14 @@
1
1
---
2
2
ms.topic: include
3
-
ms.date: 08/11/2024
3
+
ms.date: 05/19/2025
4
4
---
5
5
6
6
The Python plugin runs a user-defined function (UDF) using a Python script. The Python script gets tabular data as its input, and produces tabular output.
@@ -18,8 +19,9 @@ The Python plugin runs a user-defined function (UDF) using a Python script. The
18
19
|*output_schema*|`string`|:heavy_check_mark:|A `type` literal that defines the output schema of the tabular data, returned by the Python code. The format is: `typeof(`*ColumnName*`:`*ColumnType*[, ...]`)`. For example, `typeof(col1:string, col2:long)`. To extend the input schema, use the following syntax: `typeof(*, col1:string, col2:long)`.|
19
20
|*script*|`string`|:heavy_check_mark:|The valid Python script to execute. To generate multi-line strings, see [Usage tips](#usage-tips).|
20
21
|*script_parameters*|`dynamic`||A property bag of name value pairs to be passed to the Python script as the reserved `kargs` dictionary. For more information, see [Reserved Python variables](#reserved-python-variables).|
21
-
|*hint.distribution*|`string`||A hint for the plugin's execution to be distributed across multiple cluster nodes. The default value is `single`. `single` means a single instance of the script will run over the entire query data. `per_node` means that if the query before the Python block is distributed, an instance of the script will run on each node, on the data that it contains.|
22
+
|*hint.distribution*|`string`||A hint for the plugin's execution to be distributed across multiple sandboxes. The default value is `single`. `single` means a single instance of the script will run over the entire query data in a single sandbox. `per_node` means that if the query before the Python block is distributed to partitions, each partition will run in its own sandbox in parallel.|
22
23
|*hint.remote*|`string`||This hint is only relevant for cross cluster queries. The default value is `auto`. `auto` means the server decides automatically in which cluster the Python code is executed. Setting the value to `local` forces executing the Python code on the local cluster. Use it in case the Python plugin is disabled on the remote cluster.|
24
+
|*external_artifacts*|`dynamic`||A property bag of name and URL pairs for artifacts that are accessible from OneLake storage. See more in [Using external artifacts](#using-external-artifacts).|
23
25
|*spill_to_disk*|`bool`||Specifies an alternative method for serializing the input table to the Python sandbox. For serializing big tables set it to `true` to speed up the serialization and significantly reduce the sandbox memory consumption. Default is `true`.|
24
26
25
27
## Reserved Python variables
@@ -46,11 +48,11 @@ To see the list of packages for the different Python images, see [Python package
46
48
## Use ingestion from query and update policy
47
49
48
50
* Use the plugin in queries that are:
49
-
* Defined as part of an [update policy](../management/update-policy.md), whose source table is ingested to using *non-streaming*ingestion.
51
+
* Defined as part of an [update policy](../management/update-policy.md), whose source table is ingested by [queued ingestion](/azure/data-explorer/ingest-data-overview#continuous-data-ingestion).
50
52
* Run as part of a command that [ingests from a query](../management/data-ingestion/ingest-from-query.md), such as `.set-or-append`.
51
53
* You can't use the plugin in a query that is defined as part of an update policy, whose source table is ingested using [streaming ingestion](/azure/data-explorer/ingest-data-streaming).
52
54
53
-
## Examples
55
+
## Example
54
56
55
57
~~~kusto
56
58
range x from 1 to 360 step 1
@@ -88,9 +90,9 @@ result["fx"] = g * np.sin(df["x"]/n*2*np.pi*f)
88
90
` ``` `
89
91
` python code`
90
92
` ``` `
91
-
* Use the [`externaldata` operator](../query/externaldata-operator.md) to obtain the content of a script that you've stored in an external location, such as Azure Blob storage.
93
+
* Use the [externaldata operator](../query/externaldata-operator.md) to obtain the content of a script that you've stored in an external location, such as Azure Blob storage.
92
94
93
-
### Example
95
+
### Example reading the Python script external data
94
96
95
97
```kusto
96
98
let script =
@@ -105,6 +107,81 @@ result["fx"] = g * np.sin(df["x"]/n*2*np.pi*f)
105
107
| render linechart
106
108
```
107
109
110
+
## Using External Artifacts
111
+
112
+
External artifacts from OneLake storage can be made available for the script and used at runtime.
113
+
114
+
The artifacts are made available for the script to be read from a local temporary directory, `.\Temp`. The names provided in the property bag are used as the local file names. See [Example](#example-using-external-artifacts).
115
+
116
+
For information regarding referencing external packages, see [Install packages for the Python plugin](#install-packages-for-the-python-plugin).
117
+
118
+
### Refreshing external artifact cache
119
+
120
+
External artifact files utilized in queries are cached on your cluster. If you make updates to your files in cloud storage and require immediate synchronization with your cluster, you can use the [.clear cluster cache external-artifacts command](../management/clear-external-artifacts-cache-command.md). This command clears the cached files and ensures that subsequent queries run with the latest version of the artifacts.
121
+
122
+
## Install packages for the Python plugin
123
+
124
+
Install packages as follows:
125
+
126
+
### Prerequisite
127
+
128
+
* Create a lakehouse to host the packages, preferably in the same workspace as your eventhouse.
129
+
130
+
### Install packages
131
+
132
+
1. For public packages in [PyPi](https://pypi.org/) or other channels,
133
+
download the package and its dependencies.
134
+
135
+
* From a cmd window in your local Windows Python environment, run:
136
+
137
+
```python
138
+
pip wheel [-w download-dir] package-name.
139
+
```
140
+
141
+
1. Create a zipfile containing the required package and its dependencies.
142
+
143
+
* For private packages, zip the folder of the package and the folders of its dependencies.
144
+
* For public packages, zip the files that were downloaded in the previous step.
145
+
146
+
> [!NOTE]
147
+
>
148
+
>* Make sure to download the package that is compatible to the Python engine and the platform of the sandbox runtime (currently 3.10.8 or3.11.7 on Windows)
149
+
>* Make sure to zip the `.whl` files themselves, andnot their parent folder.
150
+
>* You can skip `.whl` files for packages that already exist with the same version in the base sandbox image.
151
+
152
+
1. Upload the zipfile to the lakehouse.
153
+
154
+
1. Copy the OneLake URL (from the zipped file's properties)
155
+
156
+
1. Call the `python` plugin.
157
+
* Specify the `external_artifacts` parameter with a property bag of local name and OneLake URL of the zipfile.
158
+
* In your inline python code, import`Zipackage`from`sandbox_utils`and call its `install()` method with the name of the ZIPfile.
159
+
160
+
### Example using external artifacts
161
+
162
+
Install the [Faker](https://pypi.org/project/Faker/) package that generates fake data.
0 commit comments