分享方式:


適用於 Azure Functions 的 Azure 數據總管輸入系結 (預覽)

Azure 數據總管輸入系結會從資料庫擷取數據。

範例

您可以使用下列其中一種 C# 模式來建立 C# 函式:

  • 隔離的背景工作模型:在與運行時間隔離的背景工作進程中執行的已編譯 C# 函式。 需要隔離的背景工作進程,才能支援在 LTS 和非 LTS 版本 .NET 和 .NET Framework 上執行的 C# 函式。
  • 同進程模型:在與 Functions 運行時間相同的進程中執行的已編譯 C# 函式。
  • C# 文稿:主要用於在 Azure 入口網站 中建立 C# 函式。

GitHub 存放庫中有更多 Azure 數據總管輸入系結的範例可供使用

本區段包含下列範例:

這些範例會參考類別和 Products 數據表,這兩者都是在前幾 Product 節中定義的。

HTTP 觸發程序,依識別碼從查詢字串取得資料列

下列範例顯示擷 取單一記錄的 C# 函式 。 此函式是由 HTTP 要求觸發,而該 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;
        }
    }
}

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 觸發程式,取得多個數據列

此範例會使用路由參數來指定產品識別碼的名稱。 所有相符的產品都會從 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 觸發程序,依識別碼從查詢字串取得資料列

下列範例顯示依產品名稱查詢 products 數據表。 此函式是由使用查詢字串來指定查詢參數值的 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檔案中的 Azure 數據總管輸入系結,以及從查詢讀取並傳回 HTTP 回應中結果的 JavaScript 函式。

下列系結數據位於 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 觸發程式,依名稱從查詢字串取得數據列

下列範例顯示依產品名稱查詢 products 數據表。 此函式是由使用查詢字串來指定查詢參數值的 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檔案中的 Azure 數據總管輸入系結,以及從查詢讀取並傳回 HTTP 回應中結果的 Python 函式。

下列系結數據位於 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 觸發程序,依識別碼從查詢字串取得資料列

下列範例顯示依產品名稱查詢 products 數據表。 此函式是由使用查詢字串來指定查詢參數值的 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 數據總管系結,其具有下列屬性。

屬性內容 描述
資料庫 必要。 必須對其執行查詢的資料庫。
連線 必要。 保存 連接字串、透過環境變數或函式應用程式設定解析的變數名稱。 預設會查閱變數 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 必要。 必須對其執行查詢的資料庫。
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} 會在運行時間取代為述詞的實際值。 參數名稱和參數值不能包含逗號 (,) 或等號 (=)。
managedServiceIdentity 受控識別可用來連線到 Azure 數據總管。 若要使用系統受控識別,請使用「系統」。任何其他身分識別名稱會解譯為使用者受控識別。

組態

下表說明您在 function.json 檔案中設定的繫結設定屬性。

function.json 屬性 描述
type 必要。 必須設定為 kusto
direction 必要。 必須設定為 in
NAME 必要。 代表函式程式代碼中查詢結果的變數名稱。
database 必要。 必須對其執行查詢的資料庫。
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} 會在運行時間取代為述詞的實際值。 參數名稱和參數值不能包含逗號 (,) 或等號 (=)。
managedServiceIdentity 受控識別可用來連線到 Azure 數據總管。 若要使用系統受控識別,請使用「系統」。任何其他身分識別名稱會解譯為使用者受控識別。

當您在本機開發時,請在集合中的 local.settings.json 檔案Values中新增應用程式設定。

使用方式

屬性的建構函式會採用資料庫和屬性 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 參數中提供的值會在運行時間使用。

下一步

將資料儲存至資料表(輸出系結)