Поделиться через


Входные привязки Azure Data Explorer для Функции Azure (предварительная версия)

Входная привязка Azure Data Explorer извлекает данные из базы данных.

Примеры

Функцию C# можно создать с помощью одного из следующих режимов C#:

  • Изолированная рабочая модель: скомпилированная функция C#, которая выполняется в рабочем процессе, изолированном от среды выполнения. Изолированный рабочий процесс необходим для поддержки функций C#, работающих в LTS и не LTS-версиях .NET и платформа .NET Framework.
  • Модель внутрипроцессного процесса: скомпилированная функция C#, которая выполняется в том же процессе, что и среда выполнения Функций.
  • Скрипт C#: используется в основном при создании функций C# в портал Azure.

Дополнительные примеры входной привязки Azure Data Explorer (вне процесса) доступны в репозитории GitHub.

Этот раздел содержит следующие примеры.

Примеры ссылаются на Product класс и таблицу Products, оба из которых определены в предыдущих разделах.

Триггер HTTP, получение записи по идентификатору из строки запроса

В следующем примере показана функция C#, которая получает один документ. Функция инициируется HTTP-запросом, который в строке запроса указывает идентификатор для поиска. Этот идентификатор используется для получения Product записи с указанным запросом.

Примечание.

Параметр строки HTTP-запроса учитывает регистр.

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, получение нескольких записей из параметра маршрута

В следующем примере показана функция C#, которая извлекает записи, возвращаемые запросом (в зависимости от имени продукта в данном случае). Функция инициируется HTTP-запросом, в котором с помощью данных маршрута указывается идентификатор запроса. Этот параметр используется для фильтрации Product записей в указанном запросе.

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

Дополнительные примеры входной привязки Java Azure Data Explorer доступны в репозитории GitHub.

Этот раздел содержит следующие примеры.

Примеры относятся к классу Product (в отдельном файле Product.java) и соответствующей таблице базы данных.

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, получение нескольких записей

В примере используется параметр маршрута для указания имени идентификатора продуктов. Все соответствующие продукты извлекаются из таблицы продуктов.

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, получение записи по идентификатору из строки запроса

В следующем примере показан запрос к таблице продуктов по имени продукта. Функция активируется HTTP-запросом, использующим строку запроса для указания значения параметра запроса. Этот параметр используется для фильтрации Product записей в указанном запросе.

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

Дополнительные примеры входной привязки Azure Data Explorer доступны в репозитории GitHub.

Этот раздел содержит следующие примеры.

Примеры относятся к таблице базы данных:

Триггер HTTP, получение нескольких записей

В следующем примере показана входная привязка Azure Data Explorer в файле function.json и функция JavaScript, которая считывает из запроса и возвращает результаты в ответе HTTP.

Следующие данные привязки содержатся в файле 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
}

В разделе Конфигурация описываются эти свойства.

Следующий фрагмент кода JavaScript является примером кода JavaScript:

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

Триггер HTTP, получение строки по имени из строки запроса

В следующем примере показан запрос к таблице продуктов по имени продукта. Функция активируется HTTP-запросом, использующим строку запроса для указания значения параметра запроса. Этот параметр используется для фильтрации Product записей в указанном запросе.

Следующие данные привязки содержатся в файле 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
}

В разделе Конфигурация описываются эти свойства.

Следующий фрагмент кода JavaScript является примером кода JavaScript:

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

Дополнительные примеры входной привязки Azure Data Explorer доступны в репозитории GitHub.

Этот раздел содержит следующие примеры.

Триггер HTTP, получение нескольких записей

В следующем примере показана входная привязка Azure Data Explorer в файле function.json и функция Python, которая считывает запрос и возвращает результаты в ответе HTTP.

Следующие данные привязки содержатся в файле 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"
    }
  ]
}

В разделе Конфигурация описываются эти свойства.

Ниже приведен пример кода 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"
    )

Триггер HTTP, получение записи по идентификатору из строки запроса

В следующем примере показан запрос к таблице продуктов по имени продукта. Функция активируется HTTP-запросом, использующим строку запроса для указания значения параметра запроса. Этот параметр используется для фильтрации Product записей в указанном запросе.

Следующие данные привязки содержатся в файле 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
}

В разделе Конфигурация описываются эти свойства.

Ниже приведен пример кода 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"
    )

Атрибуты

Библиотека C# использует атрибут KustoAttribute для объявления привязок Azure Data Explorer к функции, которая имеет следующие свойства.

Свойство атрибута Description
База данных Обязательный. База данных, в которой должен выполняться запрос.
Connection Обязательный. Имя переменной, содержащей строка подключения, разрешаемую с помощью переменных среды или параметров приложения-функции. По умолчанию для поиска переменной KustoConnectionString. Во время выполнения эта переменная просматривается в среде. Документация по строка подключения находится в строка подключения Kusto. Например: "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 Обязательный. Параметр KqlQuery , который необходимо выполнить. Может быть запросом KQL или вызовом функции KQL.
KqlParameters Необязательно. Параметры, действующие в качестве переменных предиката для KqlCommand. Например, "@name={name}"@Id={id}, где {name} и {id} заменяются во время выполнения фактическими значениями, действующими в качестве предикатов. Имя параметра и значение параметра не могут содержать запятую (,) или знак равенства (=).
Управляемое удостоверение службы Необязательно. Для подключения к Azure Data Explorer можно использовать управляемое удостоверение. Чтобы использовать управляемое удостоверение системы, используйте "system". Любые другие имена удостоверений интерпретируются как управляемое удостоверение пользователя.

Заметки

Библиотека среды выполнения функций Java использует заметку @KustoInput (com.microsoft.azure.functions.kusto.annotation.KustoInput).

Элемент Description
name Необходимые. Имя переменной, представляющей результаты запроса в коде функции.
database Обязательный. База данных, в которой должен выполняться запрос.
подключение Обязательный. Имя переменной, содержащей строка подключения, разрешаемую с помощью переменных среды или параметров приложения-функции. По умолчанию для поиска переменной KustoConnectionString. Во время выполнения эта переменная просматривается в среде. Документация по строка подключения находится в строка подключения Kusto. Например: "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 Обязательный. Параметр KqlQuery , который необходимо выполнить. Может быть запросом KQL или вызовом функции KQL.
kqlParameters Необязательно. Параметры, действующие в качестве переменных предиката для KqlCommand. Например, "@name={name}"@Id={id}, где {name} и {id} заменяются во время выполнения фактическими значениями, действующими в качестве предикатов. Имя параметра и значение параметра не могут содержать запятую (,) или знак равенства (=).
managedServiceIdentity Управляемое удостоверение можно использовать для подключения к Azure Data Explorer. Чтобы использовать управляемое удостоверение системы, используйте "system". Любые другие имена удостоверений интерпретируются как управляемое удостоверение пользователя.

Настройка

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.

Свойство в function.json Описание
type Необходимые. Должен иметь значениеkusto.
direction Обязательный. Должен иметь значениеin.
name Необходимые. Имя переменной, представляющей результаты запроса в коде функции.
database Обязательный. База данных, в которой должен выполняться запрос.
подключение Обязательный. Имя переменной, содержащей строка подключения, разрешаемую с помощью переменных среды или параметров приложения-функции. По умолчанию для поиска переменной KustoConnectionString. Во время выполнения эта переменная просматривается в среде. Документация по строка подключения находится в строка подключения Kusto. Например: "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 Обязательный. Параметр KqlQuery , который необходимо выполнить. Может быть запросом KQL или вызовом функции KQL.
kqlParameters Необязательно. Параметры, действующие в качестве переменных предиката для KqlCommand. Например, "@name={name}"@Id={id}, где {name} и {id} заменяются во время выполнения фактическими значениями, действующими в качестве предикатов. Имя параметра и значение параметра не могут содержать запятую (,) или знак равенства (=).
managedServiceIdentity Управляемое удостоверение можно использовать для подключения к Azure Data Explorer. Чтобы использовать управляемое удостоверение системы, используйте "system". Любые другие имена удостоверений интерпретируются как управляемое удостоверение пользователя.

Если разработка ведется на локальном компьютере, добавьте параметры приложения в файл local.settings.json в коллекции Values.

Использование

Конструктор атрибута принимает базу данных и атрибуты KQLCommand , а также KQLParameters имя параметра подключения. Команда KQL может быть оператором KQL или функцией KQL. Имя параметра строка подключения соответствует параметру приложения (в local.settings.json локальной разработке), который содержит строка подключения Kusto. Например: "KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId. Запросы, выполняемые входной привязкой, параметризируются. Значения, указанные в параметрах KQL, используются во время выполнения.

Следующие шаги

Сохранение данных в таблицу (выходная привязка)