你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Functions 的 Azure 数据资源管理器输入绑定(预览)

Azure 数据资源管理器输入绑定从数据库检索数据。

示例

可使用以下 C# 模式之一来创建 C# 函数:

  • 独立辅助角色模型:编译的 C# 函数,该函数在独立于运行时的工作进程中运行。 需要独立工作进程才能支持在 LTS 和非 LTS 版 .NET 和 .NET Framework 上运行的 C# 函数。
  • 进程内模型:编译的 C# 函数,该函数在与 Functions 运行时相同的进程中运行。
  • C# 脚本:主要在 Azure 门户中创建 C# 函数时使用。

GitHub 存储库中提供了更多有关 Azure 数据资源管理器输入绑定(进程外)的示例。

本部分包含以下示例:

这些示例引用了一个 Product 类和 Products 表,这两者都在前面的部分中进行了定义。

HTTP 触发器,从查询字符串中按 ID 获取行

以下示例演示检索单个记录的 C# 函数。 此函数由 HTTP 请求触发,该请求使用查询字符串来指定 ID。 该 ID 用于使用指定的查询检索 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;
        }
    }
}

GitHub 存储库中提供了更多有关 Java Azure 数据资源管理器输入绑定的示例。

本部分包含以下示例:

这些示例引用了 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 触发器,获取多行

该示例使用路由参数指定产品 ID 的名称。 从 products 表中检索所有匹配的产品。

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 触发器,从查询字符串中按 ID 获取行

下面的示例演示了按产品名称查询产品表。 该函数由使用查询字符串指定查询参数值的 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();
    }
}

GitHub 存储库中提供了更多有关 Azure 数据资源管理器输入绑定的示例。

本部分包含以下示例:

以下示例引用数据库表:

HTTP 触发器,获取多行

下面的示例演示 function.json 文件和 JavaScript 函数中的 Azure 数据资源管理器输入绑定,该函数从查询中读取数据并以 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 代码:

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 代码:

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

GitHub 存储库中提供了更多有关 Azure 数据资源管理器输入绑定的示例。

本部分包含以下示例:

HTTP 触发器,获取多行

下面的示例演示 function.json 文件和 Python 函数中的 Azure 数据资源管理器输入绑定,该函数从查询中读取数据并以 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 触发器,从查询字符串中按 ID 获取行

下面的示例演示了按产品名称查询产品表。 该函数由使用查询字符串指定查询参数值的 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 数据资源管理器绑定,该函数具有以下属性。

Attribute 属性 说明
数据库 必需。 必须对其执行查询的数据库。
连接 必需。 保存连接字符串的变量的“名称”,通过环境变量或函数应用设置解析。 默认为查找变量 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 数据资源管理器。 若要使用系统托管标识,请使用“系统”,任何其他标识名称都解释为用户托管标识。

批注

Java 函数运行时库使用 @KustoInput 注释 (com.microsoft.azure.functions.kusto.annotation.KustoInput)。

元素 说明
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 数据资源管理器。 若要使用系统托管标识,请使用“系统”,任何其他标识名称都解释为用户托管标识。

配置

下表解释了在 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 数据资源管理器。 若要使用系统托管标识,请使用“系统”,任何其他标识名称都解释为用户托管标识。

在本地开发时,需要将应用程序设置添加到 Values 集合中的 local.settings.json 文件中。

使用情况

该属性的构造函数采用数据库和属性 KQLCommandKQLParameters 以及连接设置名称。 KQL 可以是 KQL 语句,也可以是 KQL 函数。 连接字符串设置名称对应于包含 Kusto 连接字符串的应用程序设置(对于本地开发,包含在 local.settings.json 中)。 例如:"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 参数中提供的值在运行时使用。

后续步骤

将数据保存到表(输出绑定)