Delen via


Python-plugin

Van toepassing op: ✅Microsoft FabricAzure Data Explorer-

De Python-invoegtoepassing voert een door de gebruiker gedefinieerde functie (UDF) uit met behulp van een Python-script. Het Python-script haalt tabellaire gegevens op als invoer en produceert tabellaire uitvoer. De runtime van de invoegtoepassing wordt gehost in sandboxes, die wordt uitgevoerd op de knooppunten van het cluster.

Syntaxis

T|evaluate [hint.distribution= (single | per_node)] [hint.remote= (auto | local)] python(output_schema,script [,script_parameters] [,external_artifacts] [,spill_to_disk])

Meer informatie over syntaxisconventies.

Parameterwaarden

Naam Typologie Verplicht Beschrijving
output_schema string ✔️ Een type letterlijke waarde die het uitvoerschema van de tabelgegevens definieert, geretourneerd door de Python-code. De indeling is: typeof(ColumnName:ColumnType[, ...]). Bijvoorbeeld typeof(col1:string, col2:long). Gebruik de volgende syntaxis om het invoerschema uit te breiden: typeof(*, col1:string, col2:long)
script string ✔️ Het geldige Python-script dat moet worden uitgevoerd. Zie gebruikstips voor het genereren van tekenreeksen met meerdere regels.
script_parameters dynamic Een eigenschappenverzameling met naam-waardeparen die als gereserveerde kargs woordenlijst moeten worden doorgegeven aan het Python-script. Zie Gereserveerde Python-variabelen voor meer informatie.
hint.distribution string Een hint voor de uitvoering van de invoegtoepassing die over meerdere clusterknooppunten moet worden verdeeld. De standaardwaarde is single. single betekent dat één exemplaar van het script wordt uitgevoerd voor de volledige querygegevens. per_node betekent dat als de query voordat het Python-blok wordt gedistribueerd, een exemplaar van het script wordt uitgevoerd op elk knooppunt, op de gegevens die het bevat.
hint.remote string Deze hint is alleen relevant voor query's voor meerdere clusters. De standaardwaarde is auto. auto betekent dat de server automatisch bepaalt in welk cluster de Python-code wordt uitgevoerd. Als u de waarde instelt om de Python-code op het lokale cluster uit te local voeren. Gebruik deze als de Python-invoegtoepassing is uitgeschakeld op het externe cluster.
external_artifacts dynamic Een eigenschappenverzameling met naam- en URL-paren voor artefacten die toegankelijk zijn vanuit cloudopslag. Zie meer in Externe artefacten gebruiken.
spill_to_disk bool Hiermee geeft u een alternatieve methode op voor het serialiseren van de invoertabel naar de Python-sandbox. Voor het serialiseren van grote tabellen stelt u deze in om de serialisatie te true versnellen en het geheugenverbruik van de sandbox aanzienlijk te verminderen. De standaardinstelling is true.

Gereserveerde Python-variabelen

De volgende variabelen zijn gereserveerd voor interactie tussen Kusto Query Language en de Python-code.

  • df: De gegevens in tabelvorm (de bovenstaande waarden T ) als een pandas DataFrame.
  • kargs: De waarde van het argument script_parameters , als een Python-woordenlijst.
  • result: Een pandas DataFrame dat is gemaakt door het Python-script, waarvan de waarde de tabelgegevens wordt die worden verzonden naar de Kusto-queryoperator die volgt op de invoegtoepassing.

De invoegtoepassing inschakelen

De invoegtoepassing is standaard uitgeschakeld. Bekijk de lijst met vereisten voordat u begint. Zie Taalextensies inschakelen in uw cluster om de invoegtoepassing in te schakelen en de versie van de Python-installatiekopieën te selecteren.

Python-sandboxinstallatiekopieën

Als u de versie van de Python-installatiekopieën wilt wijzigen in een andere beheerde installatiekopieën of een aangepaste installatiekopieën, raadpleegt u De installatiekopieën van Python-taalextensies in uw cluster wijzigen.

Als u de lijst met pakketten voor de verschillende Python-installatiekopieën wilt bekijken, raadpleegt u de python-pakketreferentie.

Opmerking

  • Standaard importeert de invoegtoepassing numpy als np en pandas als pd. U kunt desgewenst andere modules importeren.
  • Sommige pakketten zijn mogelijk niet compatibel met de beperkingen die worden afgedwongen door de sandbox waarop de invoegtoepassing wordt uitgevoerd.

Opname gebruiken vanuit query- en updatebeleid

  • Gebruik de invoegtoepassing in query's die:
  • U kunt de invoegtoepassing niet gebruiken in een query die is gedefinieerd als onderdeel van een updatebeleid, waarvan de brontabel wordt opgenomen met behulp van streamingopname.

Voorbeeld

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 

Schermopname van sinusdemo met het queryresultaat.

Prestatietips

  • Verminder de invoergegevensset van de invoegtoepassing tot de minimale hoeveelheid die is vereist (kolommen/rijen).
    • Gebruik, indien mogelijk, filters voor de brongegevensset met de querytaal van Kusto.
    • Als u een berekening wilt uitvoeren op een subset van de bronkolommen, projecteren ze alleen die kolommen voordat u de invoegtoepassing aanroept.
  • Gebruik hint.distribution = per_node deze functie wanneer de logica in uw script kan worden gedistribueerd.
    • U kunt ook de partitieoperator gebruiken voor het partitioneren van de invoergegevensset.
  • Gebruik waar mogelijk de querytaal van Kusto om de logica van uw Python-script te implementeren.

Tips voor gebruik

  • Als u tekenreeksen met meerdere regels wilt genereren die het Python-script in uw queryeditor bevatten, kopieert u uw Python-script vanuit uw favoriete Python-editor (Jupyter, Visual Studio Code, PyCharm enzovoort), plakt u het in de query-editor en plaatst u het volledige script tussen regels met drie opeenvolgende backticks. Voorbeeld:

    ```
    python code
    ```

  • Gebruik de operator externaldata om de inhoud te verkrijgen van een script dat u hebt opgeslagen op een externe locatie, zoals Azure Blob Storage.

Voorbeeld van het lezen van het Python-script externe gegevens

    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 

Externe artefacten gebruiken

Externe artefacten uit cloudopslag kunnen beschikbaar worden gesteld voor het script en tijdens runtime worden gebruikt.

De URL's waarnaar wordt verwezen door de eigenschap externe artefacten moeten zijn:

Opmerking

Bij het verifiëren van externe artefacten met beheerde identiteiten moet het SandboxArtifacts gebruik worden gedefinieerd op het beheerde identiteitsbeleid op clusterniveau.

De artefacten worden beschikbaar gesteld zodat het script kan worden gelezen uit een lokale tijdelijke map, .\Temp. De namen die in de eigenschappentas worden opgegeven, worden gebruikt als de lokale bestandsnamen. Zie Voorbeeld.

Zie Pakketten installeren voor de Python-invoegtoepassing voor informatie over het verwijzen naar externe pakketten.

Cache voor externe artefacten vernieuwen

Externe artefactbestanden die worden gebruikt in query's, worden in de cache opgeslagen in uw cluster. Als u updates voor uw bestanden in cloudopslag aanbrengt en onmiddellijke synchronisatie met uw cluster vereist, kunt u de opdracht .clear clustercache external-artifacts gebruiken. Met deze opdracht worden de bestanden in de cache gewist en wordt ervoor gezorgd dat volgende query's worden uitgevoerd met de nieuwste versie van de artefacten.

Pakketten installeren voor de Python-invoegtoepassing

In de meeste gevallen wilt u misschien liever een aangepaste installatiekopieën maken.

U kunt om de volgende redenen zelf pakket(en) installeren:

  • U bent niet gemachtigd om een aangepaste installatiekopieën te maken.
  • Het pakket is privé.
  • U wilt liever een ad-hocpakketinstallatie maken om te testen en u wilt geen overhead voor het maken van een aangepaste installatiekopieën.

Installeer pakketten als volgt:

Vereiste voorwaarden

  1. Maak een blobcontainer om de pakketten te hosten, bij voorkeur op dezelfde plaats als uw cluster. Bijvoorbeeld, https://artifactswestus.blob.core.windows.net/pythonervan uitgaande dat uw cluster zich in VS - west bevindt.

  2. Wijzig het bijschriftbeleid van het cluster om toegang tot die locatie toe te staan.

    • Voor deze wijziging zijn AllDatabasesAdmin-machtigingen vereist.

    • Als u bijvoorbeeld toegang wilt inschakelen tot een blob in https://artifactswestus.blob.core.windows.net/python, voert u de volgende opdracht uit:

    .alter-merge cluster policy callout @'[ { "CalloutType": "sandbox_artifacts", "CalloutUriRegex": "artifactswestus\\.blob\\.core\\.windows\\.net/python/","CanCall": true } ]'
    

Pakketten installeren

  1. Voor openbare pakketten in PyPi of andere kanalen downloadt u het pakket en de bijbehorende afhankelijkheden.

    • Voer vanuit een cmd-venster in uw lokale Windows Python-omgeving het volgende uit:
    pip wheel [-w download-dir] package-name.
    
  2. Maak een ZIP-bestand met het vereiste pakket en de bijbehorende afhankelijkheden.

    • Voor privépakketten zipt u de map van het pakket en de mappen van de bijbehorende afhankelijkheden.
    • Voor openbare pakketten zipt u de bestanden die in de vorige stap zijn gedownload.

    Opmerking

    • Download het pakket dat compatibel is met de Python-engine en het platform van de sandbox-runtime (momenteel 3.10.8 of 3.11.7 op Windows)
    • Zorg ervoor dat u de .whl bestanden zelf zipt en niet de bovenliggende map.
    • U kunt bestanden overslaan .whl voor pakketten die al bestaan met dezelfde versie in de basis-sandbox-installatiekopieën.
  3. Upload het zip-bestand naar een blob op de locatie van artefacten (uit stap 1 van de vereisten).

  4. Roep de python invoegtoepassing aan.

    • Geef de external_artifacts parameter op met een eigenschapsverzameling met lokale naam en blob-URL van het zip-bestand (inclusief een SAS-token).
    • Importeer Zipackagesandbox_utils in uw inline Python-code de methode en roep deze install() aan met de lokale naam van het ZIP-bestand.

Voorbeeld van het gebruik van externe artefacten

Installeer het Faker-pakket dat valse gegevens genereert.

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/Faker.zip;impersonate'))
ID-kaart Naam
1 Gary Tapia
2 Emma Evans
3 Ashley Bowen

Zie de Functions-bibliotheek voor meer voorbeelden van UDF-functies die gebruikmaken van de Python-invoegtoepassing.

De Python-invoegtoepassing voert een door de gebruiker gedefinieerde functie (UDF) uit met behulp van een Python-script. Het Python-script haalt tabellaire gegevens op als invoer en produceert tabellaire uitvoer.

Syntaxis

T|evaluate [hint.distribution= (single | per_node)] [hint.remote= (auto | local)] python(output_schema,script [,script_parameters] [,external_artifacts] [,spill_to_disk])

Meer informatie over syntaxisconventies.

Parameterwaarden

Naam Typologie Verplicht Beschrijving
output_schema string ✔️ Een type letterlijke waarde die het uitvoerschema van de tabelgegevens definieert, geretourneerd door de Python-code. De indeling is: typeof(ColumnName:ColumnType[, ...]). Bijvoorbeeld typeof(col1:string, col2:long). Gebruik de volgende syntaxis om het invoerschema uit te breiden: typeof(*, col1:string, col2:long)
script string ✔️ Het geldige Python-script dat moet worden uitgevoerd. Zie gebruikstips voor het genereren van tekenreeksen met meerdere regels.
script_parameters dynamic Een eigenschappenverzameling met naam-waardeparen die als gereserveerde kargs woordenlijst moeten worden doorgegeven aan het Python-script. Zie Gereserveerde Python-variabelen voor meer informatie.
hint.distribution string Een hint voor de uitvoering van de invoegtoepassing die moet worden gedistribueerd over meerdere sandboxes. De standaardwaarde is single. single betekent dat één exemplaar van het script wordt uitgevoerd voor de volledige querygegevens in één sandbox. per_node betekent dat als de query voordat het Python-blok wordt gedistribueerd naar partities, elke partitie parallel in een eigen sandbox wordt uitgevoerd.
hint.remote string Deze hint is alleen relevant voor query's voor meerdere clusters. De standaardwaarde is auto. auto betekent dat de server automatisch bepaalt in welk cluster de Python-code wordt uitgevoerd. Als u de waarde instelt om de Python-code op het lokale cluster uit te local voeren. Gebruik deze als de Python-invoegtoepassing is uitgeschakeld op het externe cluster.
external_artifacts dynamic Een eigenschappenverzameling met naam- en URL-paren voor artefacten die toegankelijk zijn vanuit OneLake-opslag. Zie meer in Externe artefacten gebruiken.
spill_to_disk bool Hiermee geeft u een alternatieve methode op voor het serialiseren van de invoertabel naar de Python-sandbox. Voor het serialiseren van grote tabellen stelt u deze in om de serialisatie te true versnellen en het geheugenverbruik van de sandbox aanzienlijk te verminderen. De standaardinstelling is true.

Gereserveerde Python-variabelen

De volgende variabelen zijn gereserveerd voor interactie tussen Kusto Query Language en de Python-code.

  • df: De gegevens in tabelvorm (de bovenstaande waarden T ) als een pandas DataFrame.
  • kargs: De waarde van het argument script_parameters , als een Python-woordenlijst.
  • result: Een pandas DataFrame dat is gemaakt door het Python-script, waarvan de waarde de tabelgegevens wordt die worden verzonden naar de Kusto-queryoperator die volgt op de invoegtoepassing.

De invoegtoepassing inschakelen

De invoegtoepassing is standaard uitgeschakeld. Voordat u begint, schakelt u de Python-invoegtoepassing in uw KQL-database in.

Python-sandboxinstallatiekopieën

Als u de lijst met pakketten voor de verschillende Python-installatiekopieën wilt bekijken, raadpleegt u de python-pakketreferentie.

Opmerking

  • Standaard importeert de invoegtoepassing numpy als np en pandas als pd. U kunt desgewenst andere modules importeren.
  • Sommige pakketten zijn mogelijk niet compatibel met de beperkingen die worden afgedwongen door de sandbox waarop de invoegtoepassing wordt uitgevoerd.

Opname gebruiken vanuit query- en updatebeleid

  • Gebruik de invoegtoepassing in query's die:
  • U kunt de invoegtoepassing niet gebruiken in een query die is gedefinieerd als onderdeel van een updatebeleid, waarvan de brontabel wordt opgenomen met behulp van streamingopname.

Voorbeeld

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 

Schermopname van sinusdemo met het queryresultaat.

Prestatietips

  • Verminder de invoergegevensset van de invoegtoepassing tot de minimale hoeveelheid die is vereist (kolommen/rijen).
    • Gebruik, indien mogelijk, filters voor de brongegevensset met de querytaal van Kusto.
    • Als u een berekening wilt uitvoeren op een subset van de bronkolommen, projecteren ze alleen die kolommen voordat u de invoegtoepassing aanroept.
  • Gebruik hint.distribution = per_node deze functie wanneer de logica in uw script kan worden gedistribueerd.
    • U kunt ook de partitieoperator gebruiken voor het partitioneren van de invoergegevensset.
  • Gebruik waar mogelijk de querytaal van Kusto om de logica van uw Python-script te implementeren.

Tips voor gebruik

  • Als u tekenreeksen met meerdere regels wilt genereren die het Python-script in uw queryeditor bevatten, kopieert u uw Python-script vanuit uw favoriete Python-editor (Jupyter, Visual Studio Code, PyCharm enzovoort), plakt u het in de query-editor en plaatst u het volledige script tussen regels met drie opeenvolgende backticks. Voorbeeld:

    ```
    python code
    ```

  • Gebruik de operator externaldata om de inhoud te verkrijgen van een script dat u hebt opgeslagen op een externe locatie, zoals Azure Blob Storage.

Voorbeeld van het lezen van het Python-script externe gegevens

    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 

Externe artefacten gebruiken

Externe artefacten van OneLake-opslag kunnen beschikbaar worden gesteld voor het script en tijdens runtime worden gebruikt.

De artefacten worden beschikbaar gesteld zodat het script kan worden gelezen uit een lokale tijdelijke map, .\Temp. De namen die in de eigenschappentas worden opgegeven, worden gebruikt als de lokale bestandsnamen. Zie Voorbeeld.

Zie Pakketten installeren voor de Python-invoegtoepassing voor informatie over het verwijzen naar externe pakketten.

Cache voor externe artefacten vernieuwen

Externe artefactbestanden die worden gebruikt in query's, worden in de cache opgeslagen in uw cluster. Als u updates voor uw bestanden in cloudopslag aanbrengt en onmiddellijke synchronisatie met uw cluster vereist, kunt u de opdracht .clear clustercache external-artifacts gebruiken. Met deze opdracht worden de bestanden in de cache gewist en wordt ervoor gezorgd dat volgende query's worden uitgevoerd met de nieuwste versie van de artefacten.

Pakketten installeren voor de Python-invoegtoepassing

Installeer pakketten als volgt:

Voorwaarde

  • Maak een lakehouse om de pakketten te hosten, bij voorkeur in dezelfde werkruimte als uw eventhouse.

Pakketten installeren

  1. Voor openbare pakketten in PyPi of andere kanalen downloadt u het pakket en de bijbehorende afhankelijkheden.

    • Voer vanuit een cmd-venster in uw lokale Windows Python-omgeving het volgende uit:
    pip wheel [-w download-dir] package-name.
    
  2. Maak een ZIP-bestand met het vereiste pakket en de bijbehorende afhankelijkheden.

    • Voor privépakketten zipt u de map van het pakket en de mappen van de bijbehorende afhankelijkheden.
    • Voor openbare pakketten zipt u de bestanden die in de vorige stap zijn gedownload.

    Opmerking

    • Download het pakket dat compatibel is met de Python-engine en het platform van de sandbox-runtime (momenteel 3.10.8 of 3.11.7 op Windows)
    • Zorg ervoor dat u de .whl bestanden zelf zipt en niet de bovenliggende map.
    • U kunt bestanden overslaan .whl voor pakketten die al bestaan met dezelfde versie in de basis-sandbox-installatiekopieën.
  3. Upload het zip-bestand naar het lakehouse.

  4. Kopieer de OneLake-URL (uit de eigenschappen van het gezipte bestand)

  5. Roep de python invoegtoepassing aan.

    • Geef de external_artifacts parameter op met een eigenschapsverzameling met lokale naam en OneLake-URL van het zip-bestand.
    • Importeer Zipackage in uw inline Python-code de sandbox_utils methode en roep install() deze aan met de naam van het ZIP-bestand.

Voorbeeld van het gebruik van externe artefacten

Installeer het Faker-pakket dat valse gegevens genereert.

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://msit-onelake.dfs.fabric.microsoft.com/MSIT_DEMO_WS/MSIT_DEMO_LH.Lakehouse/Files/Faker.zip;impersonate'))
ID-kaart Naam
1 Gary Tapia
2 Emma Evans
3 Ashley Bowen

Zie de Functions-bibliotheek voor meer voorbeelden van UDF-functies die gebruikmaken van de Python-invoegtoepassing.