你当前正在访问 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# 函数时使用。
重要
对进程内模型的支持将于 2026 年 11 月 10 日结束。 为获得完全支持,强烈建议将应用迁移到独立工作模型。
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 文件中。
使用情况
该属性的构造函数采用数据库和属性 KQLCommand
、KQLParameters
以及连接设置名称。 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 参数中提供的值在运行时使用。