Enlaces de Azure Data Explorer para Azure Functions (versión preliminar)

El enlace de entrada de Azure Data Explorer recupera datos de una base de datos.

Ejemplos

Se puede crear una función C# mediante uno de los siguientes modos de C#:

  • Modelo de trabajo aislado: función compilada en C# que se ejecuta en un proceso trabajador aislado del tiempo de ejecución. Se requiere un proceso de trabajo aislado para admitir funciones de C# ejecutándose en versiones de .NET que son y no son LTS y .NET Framework.
  • Modelo en curso: función C# compilada que se ejecuta en el mismo proceso que el tiempo de ejecución de Functions.
  • Script de C#: se usa principalmente al crear funciones de C# en Azure Portal.

Hay disponibles más ejemplos para el enlace de entrada de Azure Data Explorer (fuera de proceso) en el repositorio de GitHub.

En esta sección se incluyen los ejemplos siguientes:

Los ejemplos hacen referencia a una clase Product y a la tabla Productos, ambos definidos en las secciones anteriores.

Desencadenador HTTP, obtención de fila por id. de la cadena de consulta

En el ejemplo siguiente se muestra una función de C# que recupera un registro individual. La función la desencadena una solicitud HTTP que utiliza una cadena de consulta para especificar el identificador. Ese identificador se usa para recuperar un registro Product con la consulta especificada.

Nota

El parámetro de la cadena de consulta HTTP distingue mayúsculas de minúsculas.

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

Desencadenador HTTP, obtención de varias filas del parámetro de ruta

En el ejemplo siguiente se muestra una función de C# que recupera los registros devueltos por la consulta (según el nombre del producto en este caso). La función la desencadena una solicitud HTTP que utiliza los datos de la ruta para especificar el valor de un parámetro de consulta. Ese parámetro se usa para filtrar los registros Product de la consulta especificada.

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

Hay disponibles más ejemplos para el enlace de entrada de Azure Data Explorer en el repositorio de GitHub.

En esta sección se incluyen los ejemplos siguientes:

En este ejemplo se hace referencia a una clase Product (en un archivo Product.java independiente) y una tabla de base de datos correspondiente.

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

Desencadenador HTTP, obtención de varias filas

En el ejemplo se usa un parámetro de ruta para especificar el nombre del identificador de los productos. Todos los productos coincidentes se recuperan de la tabla de productos.

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

Desencadenador HTTP, obtención de fila por id. de la cadena de consulta

En el ejemplo siguiente se muestra una consulta a la tabla de productos por el nombre del producto. La función la desencadena una solicitud HTTP que utiliza una cadena de consultas para especificar el valor de un parámetro de consulta. Ese parámetro se usa para filtrar los registros Product de la consulta especificada.

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

Hay disponibles más ejemplos para el enlace de entrada de Azure Data Explorer en el repositorio de GitHub.

En esta sección se incluyen los ejemplos siguientes:

Los ejemplos hacen referencia a una tabla de base de datos:

Desencadenador HTTP, obtención de varias filas

En el ejemplo siguiente se muestra un enlace de entrada de Azure Data Explorer en un archivo function.json y una función de JavaScript que lee una consulta y devuelve los resultados en la respuesta HTTP.

A continuación, se muestran los datos de enlace del archivo 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
}

En la sección de configuración se explican estas propiedades.

El siguiente fragmento de código es un ejemplo de código de JavaScript:

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

Desencadenador HTTP, obtención de fila por nombre de la cadena de consulta

En el ejemplo siguiente se muestra una consulta a la tabla de productos por el nombre del producto. La función la desencadena una solicitud HTTP que utiliza una cadena de consultas para especificar el valor de un parámetro de consulta. Ese parámetro se usa para filtrar los registros Product de la consulta especificada.

A continuación, se muestran los datos de enlace del archivo 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
}

En la sección de configuración se explican estas propiedades.

El siguiente fragmento de código es un ejemplo de código de JavaScript:

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

Hay disponibles más ejemplos para el enlace de entrada de Azure Data Explorer en el repositorio de GitHub.

En esta sección se incluyen los ejemplos siguientes:

Desencadenador HTTP, obtención de varias filas

En el ejemplo siguiente se muestra un enlace de entrada de Azure Data Explorer en un archivo function.json y una función de Python que lee una consulta y devuelve los resultados en la respuesta HTTP.

A continuación, se muestran los datos de enlace del archivo 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"
    }
  ]
}

En la sección de configuración se explican estas propiedades.

El siguiente fragmento de código es un ejemplo de código Python:

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"
    )

Desencadenador HTTP, obtención de fila por id. de la cadena de consulta

En el ejemplo siguiente se muestra una consulta a la tabla de productos por el nombre del producto. La función la desencadena una solicitud HTTP que utiliza una cadena de consultas para especificar el valor de un parámetro de consulta. Ese parámetro se usa para filtrar los registros Product de la consulta especificada.

A continuación, se muestran los datos de enlace del archivo 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
}

En la sección de configuración se explican estas propiedades.

El siguiente fragmento de código es un ejemplo de código Python:

import azure.functions as func

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

Atributos

La biblioteca de C# usa el atributo KustoAttribute para declarar los enlaces de Azure Data Explorer en la función, que tiene las siguientes propiedades.

Propiedad de atributo Descripción
Base de datos Necesario. La base de datos en la que se debe ejecutar la consulta.
Conexión Necesario. El nombre de la variable que contiene la cadena de conexión, resuelta a través de variables de entorno o a través de la configuración de la aplicación de funciones. El valor predeterminado que se busca en la variable KustoConnectionString. En el runtime, esta variable se compara con el entorno. La documentación sobre la cadena de conexión está en las cadenas de conexión de Kusto. Por ejemplo: "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 Necesario. Parámetro KqlQuery que se debe ejecutar. Puede ser una consulta KQL o una llamada de función KQL.
KqlParameters Opcional. Parámetros que actúan como variables de predicado para KqlCommand. Por ejemplo, "@name={name},@Id={id}", donde los parámetros {name} e {id} se sustituyen en el runtime por valores reales que actúan como predicados. Ni el nombre ni el valor del parámetro pueden contener una coma (,) o un signo de igual (=).
ManagedServiceIdentity Opcional. Se puede usar una identidad administrada para conectarse a Azure Data Explorer. Para usar una identidad administrada por el sistema, use "system"; cualquier otro nombre de identidad se interpreta como identidad administrada por el usuario.

anotaciones

La biblioteca del runtime de funciones de Java usa la anotación @KustoInput (com.microsoft.azure.functions.kusto.annotation.KustoInput).

Elemento Descripción
name Necesario. Nombre de la variable que representa los resultados de la consulta en el código de la función.
database Necesario. La base de datos en la que se debe ejecutar la consulta.
conexión Necesario. El nombre de la variable que contiene la cadena de conexión, resuelta a través de variables de entorno o a través de la configuración de la aplicación de funciones. El valor predeterminado que se busca en la variable KustoConnectionString. En el runtime, esta variable se compara con el entorno. La documentación sobre la cadena de conexión está en las cadenas de conexión de Kusto. Por ejemplo: "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 Necesario. Parámetro KqlQuery que se debe ejecutar. Puede ser una consulta KQL o una llamada de función KQL.
kqlParameters Opcional. Parámetros que actúan como variables de predicado para KqlCommand. Por ejemplo, "@name={name},@Id={id}", donde los parámetros {name} e {id} se sustituyen en el runtime por valores reales que actúan como predicados. Ni el nombre ni el valor del parámetro pueden contener una coma (,) o un signo de igual (=).
managedServiceIdentity Se puede usar una identidad administrada para conectarse a Azure Data Explorer. Para usar una identidad administrada por el sistema, use "system"; cualquier otro nombre de identidad se interpreta como identidad administrada por el usuario.

Configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se establecen en el archivo function.json.

Propiedad de function.json Descripción
type Necesario. Se debe establecer en kusto.
direction Necesario. Se debe establecer en in.
name Necesario. Nombre de la variable que representa los resultados de la consulta en el código de la función.
database Necesario. La base de datos en la que se debe ejecutar la consulta.
conexión Necesario. El nombre de la variable que contiene la cadena de conexión, resuelta a través de variables de entorno o a través de la configuración de la aplicación de funciones. El valor predeterminado que se busca en la variable KustoConnectionString. En el runtime, esta variable se compara con el entorno. La documentación sobre la cadena de conexión está en las cadenas de conexión de Kusto. Por ejemplo: "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 Necesario. Parámetro KqlQuery que se debe ejecutar. Puede ser una consulta KQL o una llamada de función KQL.
kqlParameters Opcional. Parámetros que actúan como variables de predicado para KqlCommand. Por ejemplo, "@name={name},@Id={id}", donde los parámetros {name} e {id} se sustituyen en el runtime por valores reales que actúan como predicados. Ni el nombre ni el valor del parámetro pueden contener una coma (,) o un signo de igual (=).
managedServiceIdentity Se puede usar una identidad administrada para conectarse a Azure Data Explorer. Para usar una identidad administrada por el sistema, use "system"; cualquier otro nombre de identidad se interpreta como identidad administrada por el usuario.

Cuando esté desarrollando localmente, agregue la configuración de la aplicación en el archivo local.settings.json de la colección Values.

Uso

El constructor del atributo toma la base de datos y los atributos KQLCommand y KQLParameters, así como el nombre de la configuración de conexión. El comando de KQL puede ser una instrucción KQL o una función KQL. El nombre de la configuración de la cadena de conexión se corresponde con la configuración de la aplicación (en local.settings.json para el desarrollo local) que contiene las cadenas de conexiones Kusto. Por ejemplo: "KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId. Las consultas ejecutadas por el enlace de entrada se parametrizan. Los valores proporcionados en los parámetros KQL se usan en el runtime.

Pasos siguientes

Guardar datos en una tabla (enlace de salida)