Indatabindningar för Azure Data Explorer för Azure Functions (förhandsversion)

Azure Data Explorer-indatabindningen hämtar data från en databas.

Exempel

En C#-funktion kan skapas med något av följande C#-lägen:

  • Isolerad arbetsmodell: Kompilerad C#-funktion som körs i en arbetsprocess som är isolerad från körningen. Isolerad arbetsprocess krävs för att stödja C#-funktioner som körs på LTS- och icke-LTS-versioner .NET och .NET Framework.
  • Processmodell: Kompilerad C#-funktion som körs i samma process som Functions-körningen.
  • C#-skript: Används främst när du skapar C#-funktioner i Azure-portalen.

Fler exempel för Azure Data Explorer-indatabindningen (indatabindningen är ur funktion) finns på GitHub-lagringsplatsen.

Det här avsnittet innehåller följande exempel:

Exemplen refererar till en Product klass och tabellen Produkter, som båda definieras i föregående avsnitt.

HTTP-utlösare, hämta rad efter ID från frågesträng

I följande exempel visas en C#-funktion som hämtar en enda post. Funktionen utlöses av en HTTP-begäran som använder en frågesträng för att ange ID:t. Det ID:t används för att hämta en Product post med den angivna frågan.

Kommentar

HTTP-frågesträngsparametern är skiftlägeskänslig.

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-utlösare, hämta flera rader från vägparametern

I följande exempel visas en C#-funktion som hämtar poster som returneras av frågan (baserat på produktens namn, i det här fallet). Funktionen utlöses av en HTTP-begäran som använder routningsdata för att ange värdet för en frågeparameter. Parametern används för att filtrera posterna Product i den angivna frågan.

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;
        }
    }
}

Fler exempel för Java Azure Data Explorer-indatabindningen finns på GitHub-lagringsplatsen.

Det här avsnittet innehåller följande exempel:

Exemplen refererar till en Product klass (i en separat fil Product.java) och en motsvarande databastabell.

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-utlösare, hämta flera rader

I exemplet används en vägparameter för att ange namnet på produkternas ID. Alla matchande produkter hämtas från produkttabellen.

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-utlösare, hämta rad efter ID från frågesträng

I följande exempel visas en fråga för produkttabellen efter produktnamnet. Funktionen utlöses av en HTTP-begäran som använder en frågesträng för att ange värdet för en frågeparameter. Parametern används för att filtrera posterna Product i den angivna frågan.

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();
    }
}

Fler exempel för Azure Data Explorer-indatabindningen finns på GitHub-lagringsplatsen.

Det här avsnittet innehåller följande exempel:

Exemplen refererar till en databastabell:

HTTP-utlösare, hämta flera rader

I följande exempel visas en Azure Data Explorer-indatabindning i en function.json-fil och en JavaScript-funktion som läser från en fråga och returnerar resultatet i HTTP-svaret.

Följande bindningsdata finns i filen 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
}

I konfigurationsavsnittet förklaras dessa egenskaper.

Följande kodfragment är JavaScript-exempelkod:

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

HTTP-utlösare, hämta rad efter namn från frågesträng

I följande exempel visas en fråga för produkttabellen efter produktnamnet. Funktionen utlöses av en HTTP-begäran som använder en frågesträng för att ange värdet för en frågeparameter. Parametern används för att filtrera posterna Product i den angivna frågan.

Följande bindningsdata finns i filen 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
}

I konfigurationsavsnittet förklaras dessa egenskaper.

Följande kodfragment är JavaScript-exempelkod:

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

Fler exempel för Azure Data Explorer-indatabindningen finns på GitHub-lagringsplatsen.

Det här avsnittet innehåller följande exempel:

HTTP-utlösare, hämta flera rader

I följande exempel visas en Azure Data Explorer-indatabindning i en function.json-fil och en Python-funktion som läser från en fråga och returnerar resultatet i HTTP-svaret.

Följande bindningsdata finns i filen 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"
    }
  ]
}

I konfigurationsavsnittet förklaras dessa egenskaper.

Följande kodfragment är python-exempelkod:

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-utlösare, hämta rad efter ID från frågesträng

I följande exempel visas en fråga för produkttabellen efter produktnamnet. Funktionen utlöses av en HTTP-begäran som använder en frågesträng för att ange värdet för en frågeparameter. Parametern används för att filtrera posterna Product i den angivna frågan.

Följande bindningsdata finns i filen 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
}

I konfigurationsavsnittet förklaras dessa egenskaper.

Följande kodfragment är python-exempelkod:

import azure.functions as func

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

Attribut

C#-biblioteket använder attributet KustoAttribute för att deklarera Azure Data Explorer-bindningar för funktionen, som har följande egenskaper.

Attributegenskap beskrivning
Databas Obligatoriskt. Databasen som frågan måste köras mot.
Connection Obligatoriskt. Namnet på variabeln som innehåller anslutningssträng, matchas via miljövariabler eller via funktionsappinställningar. Standardvärden för att söka efter variabeln KustoConnectionString. Vid körningen granskas den här variabeln mot miljön. Dokumentation om anslutningssträng finns på Kusto anslutningssträng s. Till exempel:"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 Obligatoriskt. Parametern KqlQuery som måste köras. Kan vara en KQL-fråga eller ett KQL-funktionsanrop.
KqlParameters Valfritt. Parametrar som fungerar som predikatvariabler för KqlCommand. Till exempel "@name={name},@Id={id}", där {name} och {id} ersätts vid körning med faktiska värden som fungerar som predikat. Parameternamnet och parametervärdet får inte innehålla kommatecken (,) eller likhetstecken (=).
ManagedServiceIdentity Valfritt. Du kan använda en hanterad identitet för att ansluta till Azure Data Explorer. Om du vill använda en systemhanterad identitet använder du "system". Andra identitetsnamn tolkas som en användarhanterad identitet.

Kommentarer

Java Functions-körningsbiblioteket använder anteckningen @KustoInput (com.microsoft.azure.functions.kusto.annotation.KustoInput).

Element Description
name Obligatoriska. Namnet på variabeln som representerar frågan resulterar i funktionskod.
database Obligatoriskt. Databasen som frågan måste köras mot.
anslutning Obligatoriskt. Namnet på variabeln som innehåller anslutningssträng, matchas via miljövariabler eller via funktionsappinställningar. Standardvärden för att söka efter variabeln KustoConnectionString. Vid körningen granskas den här variabeln mot miljön. Dokumentation om anslutningssträng finns på Kusto anslutningssträng s. Till exempel:"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 Obligatoriskt. Parametern KqlQuery som måste köras. Kan vara en KQL-fråga eller ett KQL-funktionsanrop.
kqlParameters Valfritt. Parametrar som fungerar som predikatvariabler för KqlCommand. Till exempel "@name={name},@Id={id}", där {name} och {id} ersätts vid körning med faktiska värden som fungerar som predikat. Parameternamnet och parametervärdet får inte innehålla kommatecken (,) eller likhetstecken (=).
managedServiceIdentity En hanterad identitet kan användas för att ansluta till Azure Data Explorer. Om du vill använda en systemhanterad identitet använder du "system". Andra identitetsnamn tolkas som en användarhanterad identitet.

Konfiguration

I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i filen function.json .

function.json egenskap beskrivning
type Obligatoriska. Måste anges till kusto.
riktning Obligatoriskt. Måste anges till in.
name Obligatoriska. Namnet på variabeln som representerar frågan resulterar i funktionskod.
database Obligatoriskt. Databasen som frågan måste köras mot.
anslutning Obligatoriskt. Namnet på variabeln som innehåller anslutningssträng, matchas via miljövariabler eller via funktionsappinställningar. Standardvärden för att söka efter variabeln KustoConnectionString. Vid körningen granskas den här variabeln mot miljön. Dokumentation om anslutningssträng finns på Kusto anslutningssträng s. Till exempel:"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 Obligatoriskt. Parametern KqlQuery som måste köras. Kan vara en KQL-fråga eller ett KQL-funktionsanrop.
kqlParameters Valfritt. Parametrar som fungerar som predikatvariabler för KqlCommand. Till exempel "@name={name},@Id={id}", där {name} och {id} ersätts vid körning med faktiska värden som fungerar som predikat. Parameternamnet och parametervärdet får inte innehålla kommatecken (,) eller likhetstecken (=).
managedServiceIdentity En hanterad identitet kan användas för att ansluta till Azure Data Explorer. Om du vill använda en systemhanterad identitet använder du "system". Andra identitetsnamn tolkas som en användarhanterad identitet.

När du utvecklar lokalt lägger du till dina programinställningar i den local.settings.json filen i Values samlingen.

Användning

Attributets konstruktor tar databasen, attributen KQLCommand och KQLParameters anslutningsinställningens namn. KQL-kommandot kan vara en KQL-instruktion eller en KQL-funktion. Det anslutningssträng inställningsnamnet motsvarar programinställningen (i local.settings.json för lokal utveckling) som innehåller Kusto-anslutningssträng. Exempel: "KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId. Frågor som körs av indatabindningen parametriseras. Värdena som anges i KQL-parametrarna används vid körning.

Nästa steg

Spara data i en tabell (utdatabindning)