다음을 통해 공유


Azure Functions에 대한 Azure Data Explorer 입력 바인딩(미리 보기)

Azure Data Explorer 입력 바인딩은 데이터베이스에서 데이터를 검색합니다.

예제

C# 함수는 다음 C# 모드 중 하나를 사용하여 만들 수 있습니다.

  • 격리된 작업자 모델: 런타임에서 격리된 작업자 프로세스에서 실행되는 컴파일된 C# 함수입니다. LTS 및 비 LTS 버전 .NET 및 .NET Framework에서 실행되는 C# 함수를 지원하려면 격리된 작업자 프로세스가 필요합니다.
  • In Process 모델: Functions 런타임과 동일한 프로세스에서 실행되는 컴파일된 C# 함수입니다.
  • C# 스크립트: Azure Portal에서 C# 함수를 만들 때 주로 사용됩니다.

Azure Data Explorer 입력 바인딩(프로세스 외부)에 대한 추가 샘플은 GitHub 리포지토리에서 사용할 수 있습니다.

이 섹션에는 다음 예제가 포함되어 있습니다.

예에서는 이전 섹션에서 정의된 Product 클래스와 Products 테이블을 참조하세요.

HTTP 트리거, 쿼리 문자열에서 ID별 행 가져오기

다음 예는 단일 레코드를 검색하는 C# 함수를 보여 줍니다. 이 함수는 쿼리 문자열을 사용하여 ID를 지정하는 HTTP 요청에 의해 트리거됩니다. 해당 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;
        }
    }
}

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 트리거, 여러 행 가져오기

이 예에서는 경로 매개 변수를 사용하여 제품 ID의 이름을 지정합니다. 일치하는 모든 제품이 제품 테이블에서 검색됩니다.

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

Azure Data Explorer 입력 바인딩에 대한 추가 샘플은 GitHub 리포지토리에서 사용할 수 있습니다.

이 섹션에는 다음 예제가 포함되어 있습니다.

예제는 데이터베이스 테이블을 참조하세요.

HTTP 트리거, 여러 행 가져오기

다음 예에서는 function.json 파일의 Azure Data Explorer 입력 바인딩과 쿼리에서 읽고 결과를 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 트리거, 쿼리 문자열에서 이름별로 행 가져오기

다음 예에서는 제품 이름별로 제품 테이블에 대한 쿼리를 보여 줍니다. 이 함수는 쿼리 문자열을 사용하여 쿼리 매개 변수의 값을 지정하는 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
    };
}

Azure Data Explorer 입력 바인딩에 대한 추가 샘플은 GitHub 리포지토리에서 사용할 수 있습니다.

이 섹션에는 다음 예제가 포함되어 있습니다.

HTTP 트리거, 여러 행 가져오기

다음 예에서는 function.json 파일의 Azure Data Explorer 입력 바인딩과 쿼리에서 읽고 결과를 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 트리거, 쿼리 문자열에서 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 Data Explorer 바인딩을 선언합니다.

특성 속성 설명
데이터베이스 필수입니다. 쿼리를 실행해야 하는 데이터베이스입니다.
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 선택 사항. 관리 ID를 사용하여 Azure Data Explorer에 연결할 수 있습니다. 시스템 관리 ID를 사용하려면 "system"을 사용합니다. 다른 모든 ID 이름은 사용자 관리 ID로 해석됩니다.

주석

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 관리 ID를 사용하여 Azure Data Explorer에 연결할 수 있습니다. 시스템 관리 ID를 사용하려면 "system"을 사용합니다. 다른 모든 ID 이름은 사용자 관리 ID로 해석됩니다.

구성

다음 표에서는 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 관리 ID를 사용하여 Azure Data Explorer에 연결할 수 있습니다. 시스템 관리 ID를 사용하려면 "system"을 사용합니다. 다른 모든 ID 이름은 사용자 관리 ID로 해석됩니다.

로컬에서 개발하는 경우 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 매개 변수에 제공된 값은 런타임에 사용됩니다.

다음 단계

테이블에 데이터 저장(출력 바인딩)