Plug-in Python
Le plug-in Python exécute une fonction définie par l’utilisateur (UDF) à l’aide d’un script Python. Le script Python obtient des données tabulaires comme entrée et produit une sortie tabulaire. Le runtime du plug-in est hébergé dans des bacs à sable, s’exécutant sur les nœuds du cluster.
Syntax
T|
evaluate
[hint.distribution
=
(single
| per_node
)] [hint.remote
=
(auto
| local
)] python(
script output_schema,
[,
script_parameters] [,
external_artifacts][,
spill_to_disk])
Découvrez les conventions de syntaxe.
Paramètres
Nom | Type | Obligatoire | Description |
---|---|---|---|
output_schema | string |
✔️ | Littéral type qui définit le schéma de sortie des données tabulaires, retournées par le code Python. Le format est : typeof( ColumnName: ColumnType[, ...]) . Par exemple, typeof(col1:string, col2:long) . Pour étendre le schéma d’entrée, utilisez la syntaxe suivante : typeof(*, col1:string, col2:long) . |
script | string |
✔️ | Script Python valide à exécuter. Pour générer des chaînes multilignes, consultez Conseils d’utilisation. |
script_parameters | dynamic |
Un sac de propriétés de paires de valeur de nom à passer au script Python en tant que dictionnaire réservé kargs . Pour plus d’informations, consultez Variables Python réservées. |
|
hint.distribution | string |
Un indicateur pour que l’exécution du plug-in soit distribuée sur plusieurs nœuds de cluster. La valeur par défaut est single . single signifie qu’une seule instance du script s’exécute sur l’ensemble des données de requête. per_node signifie que si la requête avant la distribution du bloc Python, une instance du script s’exécute sur chaque nœud, sur les données qu’il contient. |
|
hint.remote | string |
Cet indicateur s’applique uniquement aux requêtes inter-clusters. La valeur par défaut est auto . auto signifie que le serveur décide automatiquement dans quel cluster le code Python est exécuté. Définition de la valeur pour local forcer l’exécution du code Python sur le cluster local. Utilisez-le au cas où le plug-in Python est désactivé sur le cluster distant. |
|
external_artifacts | dynamic |
Un sac de propriétés de paires nom et URL pour les artefacts accessibles à partir du stockage cloud. Pour plus d’informations, consultez Utilisation d’artefacts externes. | |
spill_to_disk | bool |
Spécifie une autre méthode pour sérialiser la table d’entrée dans le bac à sable Python. Pour la sérialisation de grandes tables, définissez-la sur pour accélérer la sérialisation et réduire considérablement la consommation de mémoire du bac à true sable. La valeur par défaut est true . |
Variables Python réservées
Les variables suivantes sont réservées à l’interaction entre Langage de requête Kusto et le code Python.
df
: données tabulaires d’entrée (les valeurs ci-dessusT
), en tant quepandas
DataFrame.kargs
: valeur de l’argument script_parameters , en tant que dictionnaire Python.result
pandas
: DataFrame créé par le script Python, dont la valeur devient les données tabulaires envoyées à l’opérateur de requête Kusto qui suit le plug-in.
Activer le plug-in
Cette option est désactivée par défaut. Avant de commencer, passez en revue la liste des prérequis. Pour activer le plug-in et sélectionner la version de l’image Python, consultez Activer les extensions de langage sur votre cluster.
Image de bac à sable Python
Pour modifier la version de l’image Python, consultez Modifier l’image des extensions de langage Python sur votre cluster.
Pour voir la liste des packages pour les différentes images Python, consultez Informations de référence sur les packages Python.
Notes
- Par défaut, le plug-in importe numpy en tant que np et pandas en tant que pd. Si vous le souhaitez, vous pouvez importer d’autres modules si nécessaire.
- Certains packages peuvent être incompatibles avec les limitations appliquées par le bac à sable où le plug-in est exécuté.
Utiliser l’ingestion à partir d’une stratégie de requête et de mise à jour
- Utilisez le plug-in dans les requêtes qui sont :
- Défini dans le cadre d’une stratégie de mise à jour, dont la table source est ingérée à l’aide d’une ingestion non en streaming .
- Exécutez dans le cadre d’une commande qui ingère à partir d’une requête, telle que
.set-or-append
.
- Vous ne pouvez pas utiliser le plug-in dans une requête définie dans le cadre d’une stratégie de mise à jour, dont la table source est ingérée à l’aide de l’ingestion de streaming.
Exemples
range x from 1 to 360 step 1
| evaluate python(
//
typeof(*, fx:double), // Output schema: append a new fx column to original table
```
result = df
n = df.shape[0]
g = kargs["gain"]
f = kargs["cycles"]
result["fx"] = g * np.sin(df["x"]/n*2*np.pi*f)
```
, bag_pack('gain', 100, 'cycles', 4) // dictionary of parameters
)
| render linechart
print "This is an example for using 'external_artifacts'"
| evaluate python(
typeof(File:string, Size:string), ```if 1:
import os
result = pd.DataFrame(columns=['File','Size'])
sizes = []
path = '.\\\\Temp'
files = os.listdir(path)
result['File']=files
for file in files:
sizes.append(os.path.getsize(path + '\\\\' + file))
result['Size'] = sizes
```,
external_artifacts =
dynamic({"this_is_my_first_file":"https://kustoscriptsamples.blob.core.windows.net/samples/R/sample_script.r",
"this_is_a_script":"https://kustoscriptsamples.blob.core.windows.net/samples/python/sample_script.py"})
)
Fichier | Taille |
---|---|
this_is_a_script | 120 |
this_is_my_first_file | 105 |
Conseils sur les performances
- Réduisez le jeu de données d’entrée du plug-in à la quantité minimale requise (colonnes/lignes).
- Utilisez des filtres sur le jeu de données source, si possible, avec le langage de requête de Kusto.
- Pour effectuer un calcul sur un sous-ensemble des colonnes sources, projetez uniquement ces colonnes avant d’appeler le plug-in.
- Utilisez
hint.distribution = per_node
chaque fois que la logique de votre script est distribuable.- Vous pouvez également utiliser l’opérateur de partition pour partitionner le jeu de données d’entrée.
- Utilisez le langage de requête de Kusto chaque fois que possible pour implémenter la logique de votre script Python.
Conseils d’utilisation
Pour générer des chaînes multilignes contenant le script Python dans votre éditeur de requête, copiez votre script Python à partir de votre éditeur Python favori (Jupyter, Visual Studio Code, PyCharm, etc.), collez-le dans votre éditeur de requête, puis placez le script complet entre les lignes contenant trois backticks consécutifs. Par exemple :
```
python code
```
Utilisez l’opérateur
externaldata
pour obtenir le contenu d’un script que vous avez stocké dans un emplacement externe, tel que stockage Blob Azure.
Exemple
let script =
externaldata(script:string)
[h'https://kustoscriptsamples.blob.core.windows.net/samples/python/sample_script.py']
with(format = raw);
range x from 1 to 360 step 1
| evaluate python(
typeof(*, fx:double),
toscalar(script),
bag_pack('gain', 100, 'cycles', 4))
| render linechart
Utilisation d’artefacts externes
Les artefacts externes du stockage cloud peuvent être mis à la disposition du script et utilisés au moment de l’exécution.
Les URL référencées par la propriété d’artefacts externes doivent être les suivantes :
- Inclus dans la stratégie de légende du cluster.
- Dans un emplacement accessible au public, ou fournissez les informations d’identification nécessaires, comme expliqué dans chaînes de connexion de stockage.
Notes
Lors de l’authentification d’artefacts externes à l’aide d’identités managées, l’utilisation SandboxArtifacts
doit être définie sur la stratégie d’identité managée au niveau du cluster.
Les artefacts sont mis à la disposition du script pour les utiliser à partir d’un répertoire temporaire local, .\Temp
. Les noms fournis dans le conteneur de propriétés sont utilisés comme noms de fichiers locaux. Voir Exemples.
Pour plus d’informations sur le référencement de packages externes, consultez Installer des packages pour le plug-in Python.
Actualisation du cache d’artefacts externes
Les fichiers d’artefact externes utilisés dans les requêtes sont mis en cache sur votre cluster. Si vous effectuez des mises à jour de vos fichiers dans le stockage cloud et que vous avez besoin d’une synchronisation immédiate avec votre cluster, vous pouvez utiliser la commande .clear cluster cache external-artifacts. Cette commande efface les fichiers mis en cache et garantit que les requêtes suivantes s’exécutent avec la dernière version des artefacts.
Installer des packages pour le plug-in Python
Vous devrez peut-être installer vous-même le ou les packages, pour les raisons suivantes :
- Le package est privé et vous appartient.
- Le package est public, mais n’est pas inclus dans l’image de base du plug-in.
Installez les packages comme suit :
Prérequis
Créez un conteneur d’objets blob pour héberger les packages, de préférence au même endroit que votre cluster. Par exemple,
https://artifactswestus.blob.core.windows.net/python
, en supposant que votre cluster se trouve dans USA Ouest.Modifiez la stratégie de légende du cluster pour autoriser l’accès à cet emplacement.
Cette modification nécessite des autorisations AllDatabasesAdmin .
Par exemple, pour activer l’accès à un objet blob situé dans
https://artifactswestus.blob.core.windows.net/python
, exécutez la commande suivante :
.alter-merge cluster policy callout @'[ { "CalloutType": "sandbox_artifacts", "CalloutUriRegex": "artifactswestus\\.blob\\.core\\.windows\\.net/python/","CanCall": true } ]'
Installer des packages
Pour les packages publics dans PyPi ou d’autres canaux, téléchargez le package et ses dépendances.
- À partir d’une fenêtre cmd dans votre environnement Windows Python local, exécutez :
pip wheel [-w download-dir] package-name.
Créez un fichier zip qui contient le package requis et ses dépendances.
- Pour les packages privés, compressez le dossier du package et les dossiers de ses dépendances.
- Pour les packages publics, compressez les fichiers qui ont été téléchargés à l’étape précédente.
Notes
- Veillez à télécharger le package compatible avec le moteur Python et la plateforme du runtime de bac à sable (actuellement 3.6.5 sur Windows)
- Veillez à compresser les
.whl
fichiers eux-mêmes, et non leur dossier parent. - Vous pouvez ignorer les
.whl
fichiers des packages qui existent déjà avec la même version dans l’image bac à sable de base.
Chargez le fichier compressé dans un objet blob à l’emplacement des artefacts (à partir de l’étape 1).
Appelez le
python
plug-in.- Spécifiez le
external_artifacts
paramètre avec un conteneur de propriétés de nom et une référence au fichier zip (l’URL de l’objet blob, y compris un jeton SAP). - Dans votre code python inline, importez
Zipackage
à partir desandbox_utils
et appelez sainstall()
méthode avec le nom du fichier zip.
- Spécifiez le
Exemple
Installez le package Faker qui génère de fausses données.
range ID from 1 to 3 step 1
| extend Name=''
| evaluate python(typeof(*), ```if 1:
from sandbox_utils import Zipackage
Zipackage.install("Faker.zip")
from faker import Faker
fake = Faker()
result = df
for i in range(df.shape[0]):
result.loc[i, "Name"] = fake.name()
```,
external_artifacts=bag_pack('faker.zip', 'https://artifacts.blob.core.windows.net/kusto/Faker.zip?*** REPLACE WITH YOUR SAS TOKEN ***'))
id | Nom |
---|---|
1 | Gary Tapia |
2 | Emma Evans |
3 | Ashley Bowen |
Contenu connexe
Pour plus d’exemples de fonctions UDF qui utilisent le plug-in Python, consultez la bibliothèque Functions.
Le plug-in Python exécute une fonction définie par l’utilisateur (UDF) à l’aide d’un script Python. Le script Python obtient des données tabulaires comme entrée et produit une sortie tabulaire.
Syntax
T|
evaluate
[hint.distribution
=
(single
per_node
| )] [hint.remote
=
(auto
local
| )] python(
script output_schema,
[,
script_parameters] [,
spill_to_disk])
Découvrez les conventions de syntaxe.
Paramètres
Nom | Type | Obligatoire | Description |
---|---|---|---|
output_schema | string |
✔️ | Littéral type qui définit le schéma de sortie des données tabulaires, retournées par le code Python. Le format est : typeof( ColumnName: ColumnType[, ...]) . Par exemple, typeof(col1:string, col2:long) . Pour étendre le schéma d’entrée, utilisez la syntaxe suivante : typeof(*, col1:string, col2:long) . |
script | string |
✔️ | Script Python valide à exécuter. Pour générer des chaînes multilignes, consultez Conseils d’utilisation. |
script_parameters | dynamic |
Un sac de propriétés de paires de valeur de nom à passer au script Python en tant que dictionnaire réservé kargs . Pour plus d’informations, consultez Variables Python réservées. |
|
hint.distribution | string |
Un indicateur pour que l’exécution du plug-in soit distribuée sur plusieurs nœuds de cluster. La valeur par défaut est single . single signifie qu’une seule instance du script s’exécute sur l’ensemble des données de requête. per_node signifie que si la requête avant la distribution du bloc Python, une instance du script s’exécute sur chaque nœud, sur les données qu’il contient. |
|
hint.remote | string |
Cet indicateur s’applique uniquement aux requêtes inter-clusters. La valeur par défaut est auto . auto signifie que le serveur décide automatiquement dans quel cluster le code Python est exécuté. Définition de la valeur pour local forcer l’exécution du code Python sur le cluster local. Utilisez-le au cas où le plug-in Python est désactivé sur le cluster distant. |
|
spill_to_disk | bool |
Spécifie une autre méthode pour sérialiser la table d’entrée dans le bac à sable Python. Pour la sérialisation de grandes tables, définissez-la sur pour accélérer la sérialisation et réduire considérablement la consommation de mémoire du bac à true sable. La valeur par défaut est true . |
Variables Python réservées
Les variables suivantes sont réservées à l’interaction entre Langage de requête Kusto et le code Python.
df
: données tabulaires d’entrée (les valeurs ci-dessusT
), en tant quepandas
DataFrame.kargs
: valeur de l’argument script_parameters , en tant que dictionnaire Python.result
pandas
: DataFrame créé par le script Python, dont la valeur devient les données tabulaires envoyées à l’opérateur de requête Kusto qui suit le plug-in.
Activer le plug-in
Cette option est désactivée par défaut. Avant de commencer, activez le plug-in Python dans votre base de données KQL.
Image de bac à sable Python
Pour voir la liste des packages pour les différentes images Python, consultez Informations de référence sur les packages Python.
Notes
- Par défaut, le plug-in importe numpy en tant que np et pandas en tant que pd. Si vous le souhaitez, vous pouvez importer d’autres modules si nécessaire.
- Certains packages peuvent être incompatibles avec les limitations appliquées par le bac à sable où le plug-in est exécuté.
Utiliser l’ingestion à partir d’une stratégie de requête et de mise à jour
- Utilisez le plug-in dans les requêtes qui sont :
- Défini dans le cadre d’une stratégie de mise à jour, dont la table source est ingérée à l’aide d’une ingestion non en streaming .
- Exécutez dans le cadre d’une commande qui ingère à partir d’une requête, telle que
.set-or-append
.
- Vous ne pouvez pas utiliser le plug-in dans une requête définie dans le cadre d’une stratégie de mise à jour, dont la table source est ingérée à l’aide de l’ingestion de streaming.
Exemples
range x from 1 to 360 step 1
| evaluate python(
//
typeof(*, fx:double), // Output schema: append a new fx column to original table
```
result = df
n = df.shape[0]
g = kargs["gain"]
f = kargs["cycles"]
result["fx"] = g * np.sin(df["x"]/n*2*np.pi*f)
```
, bag_pack('gain', 100, 'cycles', 4) // dictionary of parameters
)
| render linechart
Conseils sur les performances
- Réduisez le jeu de données d’entrée du plug-in à la quantité minimale requise (colonnes/lignes).
- Utilisez des filtres sur le jeu de données source, si possible, avec le langage de requête de Kusto.
- Pour effectuer un calcul sur un sous-ensemble des colonnes sources, projetez uniquement ces colonnes avant d’appeler le plug-in.
- Utilisez
hint.distribution = per_node
chaque fois que la logique de votre script est distribuable.- Vous pouvez également utiliser l’opérateur de partition pour partitionner le jeu de données d’entrée.
- Utilisez le langage de requête de Kusto dans la mesure du possible pour implémenter la logique de votre script Python.
Conseils d’utilisation
Pour générer des chaînes multilignes contenant le script Python dans votre éditeur de requête, copiez votre script Python à partir de votre éditeur Python favori (Jupyter, Visual Studio Code, PyCharm, etc.), collez-le dans votre éditeur de requête, puis placez le script complet entre les lignes contenant trois backticks consécutifs. Par exemple :
```
python code
```
Utilisez l’opérateur
externaldata
pour obtenir le contenu d’un script que vous avez stocké dans un emplacement externe, tel que stockage Blob Azure.
Exemple
let script =
externaldata(script:string)
[h'https://kustoscriptsamples.blob.core.windows.net/samples/python/sample_script.py']
with(format = raw);
range x from 1 to 360 step 1
| evaluate python(
typeof(*, fx:double),
toscalar(script),
bag_pack('gain', 100, 'cycles', 4))
| render linechart
Contenu connexe
Pour obtenir d’autres exemples de fonctions UDF qui utilisent le plug-in Python, consultez la bibliothèque Functions.
Cette fonctionnalité n’est pas prise en charge.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour