Azure Data Explorer-invoerbindingen voor Azure Functions (preview)

De Azure Data Explorer-invoerbinding haalt gegevens op uit een database.

Voorbeelden

U kunt een C#-functie maken met behulp van een van de volgende C#-modi:

  • Geïsoleerd werkrolmodel: gecompileerde C#-functie die wordt uitgevoerd in een werkproces dat is geïsoleerd van de runtime. Geïsoleerd werkproces is vereist voor de ondersteuning van C#-functies die worden uitgevoerd op LTS- en niet-LTS-versies .NET en .NET Framework.
  • In-process model: gecompileerde C#-functie die wordt uitgevoerd in hetzelfde proces als de Functions-runtime.
  • C#-script: wordt voornamelijk gebruikt wanneer u C#-functies maakt in Azure Portal.

Meer voorbeelden voor de Azure Data Explorer-invoerbinding (niet verwerkt) zijn beschikbaar in de GitHub-opslagplaats.

Deze sectie bevat de volgende voorbeelden:

De voorbeelden verwijzen naar een Product klasse en de tabel Producten, die beide in de vorige secties zijn gedefinieerd.

HTTP-trigger, rij ophalen op id uit queryreeks

In het volgende voorbeeld ziet u een C#-functie waarmee één record wordt opgehaald. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een querytekenreeks om de id op te geven. Deze id wordt gebruikt om een Product record met de opgegeven query op te halen.

Notitie

De http-queryreeksparameter is hoofdlettergevoelig.

using System.Text.Json.Nodes;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Kusto;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples.Common;

namespace Microsoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.InputBindingSamples
{
    public static class GetProductsQuery
    {
        [Function("GetProductsQuery")]
        public static JsonArray Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "getproductsquery")] HttpRequestData req,
            [KustoInput(Database: "productsdb",
            KqlCommand = "declare query_parameters (productId:long);Products | where ProductID == productId",
            KqlParameters = "@productId={Query.productId}",Connection = "KustoConnectionString")] JsonArray products)
        {
            return products;
        }
    }
}

HTTP-trigger, meerdere rijen ophalen uit routeparameter

In het volgende voorbeeld ziet u een C#-functie waarmee records worden opgehaald die door de query worden geretourneerd (op basis van de naam van het product, in dit geval). De functie wordt geactiveerd door een HTTP-aanvraag die routegegevens gebruikt om de waarde van een queryparameter op te geven. Deze parameter wordt gebruikt om de Product records in de opgegeven query te filteren.

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Kusto;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples.Common;

namespace Microsoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.InputBindingSamples
{
    public static class GetProductsFunction
    {
        [Function("GetProductsFunction")]
        public static IEnumerable<Product> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "getproductsfn/{name}")] HttpRequestData req,
            [KustoInput(Database: "productsdb",
            KqlCommand = "declare query_parameters (name:string);GetProductsByName(name)",
            KqlParameters = "@name={name}",Connection = "KustoConnectionString")] IEnumerable<Product> products)
        {
            return products;
        }
    }
}

Meer voorbeelden voor de Java Azure Data Explorer-invoerbinding zijn beschikbaar in de GitHub-opslagplaats.

Deze sectie bevat de volgende voorbeelden:

De voorbeelden verwijzen naar een Product klasse (in een afzonderlijk bestand Product.java) en een bijbehorende databasetabel.

package com.microsoft.azure.kusto.common;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Product {
    @JsonProperty("ProductID")
    public long ProductID;
    @JsonProperty("Name")
    public String Name;
    @JsonProperty("Cost")
    public double Cost;

    public Product() {
    }

    public Product(long ProductID, String name, double Cost) {
        this.ProductID = ProductID;
        this.Name = name;
        this.Cost = Cost;
    }
}

HTTP-trigger, meerdere rijen ophalen

In het voorbeeld wordt een routeparameter gebruikt om de naam van de id van de producten op te geven. Alle overeenkomende producten worden opgehaald uit de productentabel.

package com.microsoft.azure.kusto.inputbindings;

import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import com.microsoft.azure.functions.kusto.annotation.KustoInput;
import com.microsoft.azure.kusto.common.Product;


import java.util.Optional;

public class GetProducts {
    @FunctionName("GetProducts")
    public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {
            HttpMethod.GET}, authLevel = AuthorizationLevel.ANONYMOUS, route = "getproducts/{productId}") HttpRequestMessage<Optional<String>> request,
            @KustoInput(name = "getjproducts", kqlCommand = "declare query_parameters (productId:long);Products | where ProductID == productId",
                    kqlParameters = "@productId={productId}", database = "productsdb", connection = "KustoConnectionString") Product[] products) {
        return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(products)
                .build();
    }
}

HTTP-trigger, rij ophalen op id uit queryreeks

In het volgende voorbeeld ziet u een query voor de tabel producten op basis van de productnaam. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een querytekenreeks om de waarde van een queryparameter op te geven. Deze parameter wordt gebruikt om de Product records in de opgegeven query te filteren.

package com.microsoft.azure.kusto.inputbindings;

import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import com.microsoft.azure.functions.kusto.annotation.KustoInput;
import com.microsoft.azure.kusto.common.Product;

import java.util.Optional;

public class GetProductsQueryString {
    @FunctionName("GetProductsQueryString")
    public HttpResponseMessage run(@HttpTrigger(name = "req", methods = {
            HttpMethod.GET}, authLevel = AuthorizationLevel.ANONYMOUS, route = "getproducts") HttpRequestMessage<Optional<String>> request,
            @KustoInput(name = "getjproductsquery", kqlCommand = "declare query_parameters (name:string);GetProductsByName(name)",
                    kqlParameters = "@name={Query.name}", database = "productsdb", connection = "KustoConnectionString") Product[] products) {
        return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(products)
                .build();
    }
}

Meer voorbeelden voor de Azure Data Explorer-invoerbinding zijn beschikbaar in de GitHub-opslagplaats.

Deze sectie bevat de volgende voorbeelden:

De voorbeelden verwijzen naar een databasetabel:

HTTP-trigger, meerdere rijen ophalen

In het volgende voorbeeld ziet u een Azure Data Explorer-invoerbinding in een function.json-bestand en een JavaScript-functie die uit een query leest en de resultaten in het HTTP-antwoord retourneert.

De volgende bindingsgegevens zijn opgenomen in het bestand function.json :

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "direction": "in",
      "type": "httpTrigger",
      "methods": [
        "get"
      ],
      "route": "getproducts/{productId}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "name": "productget",
      "type": "kusto",
      "database": "productsdb",
      "direction": "in",
      "kqlCommand": "declare query_parameters (productId:long);Products | where ProductID == productId",
      "kqlParameters": "@productId={productId}",
      "connection": "KustoConnectionString"
    }
  ],
  "disabled": false
}

In de configuratiesectie worden deze eigenschappen uitgelegd.

Het volgende codefragment is een voorbeeld van JavaScript-code:

module.exports = async function (context, req, productget) {
    return {
        status: 200,
        body: productget
    };
}

HTTP-trigger, rij ophalen op naam uit queryreeks

In het volgende voorbeeld ziet u een query voor de tabel producten op basis van de productnaam. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een querytekenreeks om de waarde van een queryparameter op te geven. Deze parameter wordt gebruikt om de Product records in de opgegeven query te filteren.

De volgende bindingsgegevens zijn opgenomen in het bestand function.json :

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "direction": "in",
      "type": "httpTrigger",
      "methods": [
        "get"
      ],
      "route": "getproductsfn"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "name": "productfnget",
      "type": "kusto",
      "database": "productsdb",
      "direction": "in",
      "kqlCommand": "declare query_parameters (name:string);GetProductsByName(name)",
      "kqlParameters": "@name={Query.name}",
      "connection": "KustoConnectionString"
    }
  ],
  "disabled": false
}

In de configuratiesectie worden deze eigenschappen uitgelegd.

Het volgende codefragment is een voorbeeld van JavaScript-code:

module.exports = async function (context, req, producproductfngettget) {
    return {
        status: 200,
        body: productfnget
    };
}

Meer voorbeelden voor de Azure Data Explorer-invoerbinding zijn beschikbaar in de GitHub-opslagplaats.

Deze sectie bevat de volgende voorbeelden:

HTTP-trigger, meerdere rijen ophalen

In het volgende voorbeeld ziet u een Azure Data Explorer-invoerbinding in een function.json-bestand en een Python-functie die uit een query leest en de resultaten in het HTTP-antwoord retourneert.

De volgende bindingsgegevens zijn opgenomen in het bestand function.json :

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "Anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get"
      ],
      "route": "getproducts/{productId}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    },
    {
      "name": "productsdb",
      "type": "kusto",
      "database": "sdktestsdb",
      "direction": "in",
      "kqlCommand": "declare query_parameters (productId:long);Products | where ProductID == productId",
      "kqlParameters": "@productId={Query.productId}",
      "connection": "KustoConnectionString"
    }
  ]
}

In de configuratiesectie worden deze eigenschappen uitgelegd.

Het volgende codefragment is python-voorbeeldcode:

import azure.functions as func
from Common.product import Product


def main(req: func.HttpRequest, products: str) -> func.HttpResponse:
    return func.HttpResponse(
        products,
        status_code=200,
        mimetype="application/json"
    )

HTTP-trigger, rij ophalen op id uit queryreeks

In het volgende voorbeeld ziet u een query voor de tabel producten op basis van de productnaam. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een querytekenreeks om de waarde van een queryparameter op te geven. Deze parameter wordt gebruikt om de Product records in de opgegeven query te filteren.

De volgende bindingsgegevens zijn opgenomen in het bestand function.json :

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "direction": "in",
      "type": "httpTrigger",
      "methods": [
        "get"
      ],
      "route": "getproductsfn"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "name": "productfnget",
      "type": "kusto",
      "database": "productsdb",
      "direction": "in",
      "kqlCommand": "declare query_parameters (name:string);GetProductsByName(name)",
      "kqlParameters": "@name={Query.name}",
      "connection": "KustoConnectionString"
    }
  ],
  "disabled": false
}

In de configuratiesectie worden deze eigenschappen uitgelegd.

Het volgende codefragment is python-voorbeeldcode:

import azure.functions as func

def main(req: func.HttpRequest, products: str) -> func.HttpResponse:
    return func.HttpResponse(
        products,
        status_code=200,
        mimetype="application/json"
    )

Kenmerken

De C#-bibliotheek maakt gebruik van het KustoAttribute-kenmerk om de Azure Data Explorer-bindingen op de functie te declareren, die de volgende eigenschappen heeft.

Kenmerkeigenschap Beschrijving
Database Vereist. De database waarmee de query moet worden uitgevoerd.
Connection Vereist. De naam van de variabele met de verbindingsreeks, omgezet via omgevingsvariabelen of via instellingen van de functie-app. Standaard wordt gezocht naar de variabele KustoConnectionString. Tijdens runtime wordt deze variabele opgezoekd op basis van de omgeving. Documentatie over het verbindingsreeks vindt u in Kusto verbindingsreeks s. Bijvoorbeeld:"KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId
KqlCommand Vereist. De KqlQuery parameter die moet worden uitgevoerd. Dit kan een KQL-query of een KQL-functieoproep zijn.
KqlParameters Optioneel. Parameters die fungeren als predicaatvariabelen voor KqlCommand. Bijvoorbeeld '@name={name}'@Id={id}, waarbij {name} en {id} tijdens runtime worden vervangen door werkelijke waarden die fungeren als predicaten. De parameternaam en de parameterwaarde mogen geen komma (,) of een gelijkteken (=) bevatten.
ManagedServiceIdentity Optioneel. U kunt een beheerde identiteit gebruiken om verbinding te maken met Azure Data Explorer. Als u een door het systeem beheerde identiteit wilt gebruiken, gebruikt u 'systeem'. Alle andere identiteitsnamen worden geïnterpreteerd als een door de gebruiker beheerde identiteit.

Aantekeningen

De Runtime-bibliotheek van Java-functies maakt gebruik van de @KustoInput aantekening (com.microsoft.azure.functions.kusto.annotation.KustoInput).

Element Description
naam Vereist. De naam van de variabele die de query vertegenwoordigt, resulteert in functiecode.
database Vereist. De database waarmee de query moet worden uitgevoerd.
verbinding Vereist. De naam van de variabele met de verbindingsreeks, omgezet via omgevingsvariabelen of via instellingen van de functie-app. Standaard wordt gezocht naar de variabele KustoConnectionString. Tijdens runtime wordt deze variabele opgezoekd op basis van de omgeving. Documentatie over het verbindingsreeks vindt u in Kusto verbindingsreeks s. Bijvoorbeeld:"KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId
kqlCommand Vereist. De KqlQuery parameter die moet worden uitgevoerd. Dit kan een KQL-query of een KQL-functieoproep zijn.
kqlParameters Optioneel. Parameters die fungeren als predicaatvariabelen voor KqlCommand. Bijvoorbeeld '@name={name}'@Id={id}, waarbij {name} en {id} tijdens runtime worden vervangen door werkelijke waarden die fungeren als predicaten. De parameternaam en de parameterwaarde mogen geen komma (,) of een gelijkteken (=) bevatten.
managedServiceIdentity Een beheerde identiteit kan worden gebruikt om verbinding te maken met Azure Data Explorer. Als u een door het systeem beheerde identiteit wilt gebruiken, gebruikt u 'systeem'. Alle andere identiteitsnamen worden geïnterpreteerd als een door de gebruiker beheerde identiteit.

Configuratie

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.

function.json-eigenschap Beschrijving
type Vereist. Moet worden ingesteld op kusto.
richting Vereist. Moet worden ingesteld op in.
naam Vereist. De naam van de variabele die de query vertegenwoordigt, resulteert in functiecode.
database Vereist. De database waarmee de query moet worden uitgevoerd.
verbinding Vereist. De naam van de variabele met de verbindingsreeks, omgezet via omgevingsvariabelen of via instellingen van de functie-app. Standaard wordt gezocht naar de variabele KustoConnectionString. Tijdens runtime wordt deze variabele opgezoekd op basis van de omgeving. Documentatie over het verbindingsreeks vindt u in Kusto verbindingsreeks s. Bijvoorbeeld:"KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId
kqlCommand Vereist. De KqlQuery parameter die moet worden uitgevoerd. Dit kan een KQL-query of een KQL-functieoproep zijn.
kqlParameters Optioneel. Parameters die fungeren als predicaatvariabelen voor KqlCommand. Bijvoorbeeld '@name={name}'@Id={id}, waarbij {name} en {id} tijdens runtime worden vervangen door werkelijke waarden die fungeren als predicaten. De parameternaam en de parameterwaarde mogen geen komma (,) of een gelijkteken (=) bevatten.
managedServiceIdentity Een beheerde identiteit kan worden gebruikt om verbinding te maken met Azure Data Explorer. Als u een door het systeem beheerde identiteit wilt gebruiken, gebruikt u 'systeem'. Alle andere identiteitsnamen worden geïnterpreteerd als een door de gebruiker beheerde identiteit.

Wanneer u lokaal ontwikkelt, voegt u uw toepassingsinstellingen toe aan het local.settings.json-bestand in de Values verzameling.

Gebruik

De constructor van het kenmerk neemt de database en de kenmerken KQLCommand en KQLParameters de naam van de verbindingsinstelling. De KQL-opdracht kan een KQL-instructie of een KQL-functie zijn. De naam van de verbindingsreeks-instelling komt overeen met de toepassingsinstelling (voor local.settings.json lokale ontwikkeling) die de Kusto-verbindingsreeks s bevat. Voorbeeld: "KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId. Query's die door de invoerbinding worden uitgevoerd, worden geparameteriseerd. De waarden die in de KQL-parameters worden opgegeven, worden tijdens runtime gebruikt.

Volgende stappen

Gegevens opslaan in een tabel (uitvoerbinding)