다음을 통해 공유


입력 및 출력 바인딩을 사용하여 Azure Data Explorer와 Azure Functions 통합(미리 보기)

Important

이 커넥터는 Microsoft Fabric의 실시간 인텔리전스 에서 사용할 수 있습니다. 다음 예외를 제외하고 이 문서의 지침을 사용합니다.

Azure Functions를 사용시게 되면 일정에 따라 혹은 이벤트에 대한 응답으로 클라우드에서 서버리스 코드를 실행하실 수 있습니다. Azure Functions에 대한 Azure Data Explorer 입력 및 출력 바인딩을 사용하면 Azure Data Explorer를 워크플로에 통합하여 데이터를 수집하고 클러스터에 대해 쿼리를 실행할 수 있습니다.

필수 구성 요소

샘플 프로젝트와 통합해 보세요.

Azure Functions에 Azure Data Explorer 바인딩을 사용하는 방법

Azure Functions에 Azure Data Explorer 바인딩을 사용하는 방법에 대한 자세한 내용은 다음 항목을 참조하세요.

Azure Functions에 Azure Data Explorer 바인딩을 사용하는 시나리오

다음 섹션에서는 Azure Functions에 Azure Data Explorer 바인딩을 사용하는 몇 가지 일반적인 시나리오를 설명합니다.

입력 바인딩

입력 바인딩은 선택적으로 매개 변수를 사용하여 KQL(Kusto 쿼리 언어) 쿼리 또는 KQL 함수를 실행하고 출력을 함수에 반환합니다.

다음 섹션에서는 몇 가지 일반적인 시나리오에서 입력 바인딩을 사용하는 방법에 대해 설명합니다.

시나리오 1: 클러스터에서 데이터를 쿼리하는 HTTP 엔드포인트

입력 바인딩 사용은 REST API를 통해 Azure Data Explorer 데이터를 노출해야 하는 경우에 적용됩니다. 이 시나리오에서는 Azure Functions HTTP 트리거를 사용하여 클러스터의 데이터를 쿼리합니다. 이 시나리오는 외부 애플리케이션 또는 서비스에 대한 Azure Data Explorer 데이터에 프로그래밍 방식으로 액세스해야 하는 경우에 특히 유용합니다. REST API를 통해 데이터를 노출하면 애플리케이션은 클러스터에 직접 연결하지 않고도 데이터를 쉽게 사용할 수 있습니다.

이 코드는 HTTP 트리거 및 Azure Data Explorer 입력 바인딩을 사용하여 함수를 정의합니다. 입력 바인딩은 productsdb 데이터베이스의 Products 테이블에 대해 실행할 쿼리를 지정 합니다. 함수는 productId 열을 매개 변수로 전달된 조건자로 사용합니다.

{
    [FunctionName("GetProduct")]
    public static async Task<IActionResult> RunAsync(
        [HttpTrigger(AuthorizationLevel.User, "get", Route = "getproducts/{productId}")]
        HttpRequest req,
        [Kusto(Database:"productsdb" ,
        KqlCommand = "declare query_parameters (productId:long);Products | where ProductID == productId" ,
        KqlParameters = "@productId={productId}",
        Connection = "KustoConnectionString")]
        IAsyncEnumerable<Product> products)
    {
        IAsyncEnumerator<Product> enumerator = products.GetAsyncEnumerator();
        var productList = new List<Product>();
        while (await enumerator.MoveNextAsync())
        {
            productList.Add(enumerator.Current);
        }
        await enumerator.DisposeAsync();
        return new OkObjectResult(productList);
    }
}

그런 다음 다음과 같이 함수를 호출할 수 있습니다.

curl https://myfunctionapp.azurewebsites.net/api/getproducts/1

시나리오 2: 클러스터에서 데이터를 내보내는 예약된 트리거

다음 시나리오는 시간 기반 일정에 따라 데이터를 내보내야 하는 경우에 적용할 수 있습니다.

이 코드는 productsdb 데이터베이스에서 Azure Blob Storage의 CSV 파일로 판매 데이터의 집계를 내보내는 타이머 트리거가 있는 함수를 정의합니다.

public static async Task Run([TimerTrigger("0 0 1 * * *")] TimerInfo myTimer,
    [Kusto(ConnectionStringSetting = "KustoConnectionString",
            DatabaseName = "productsdb",
            Query = "ProductSales | where OrderDate >= ago(1d) | summarize Sales = sum(ProductSales) by ProductName | top 10 by Sales desc")] IEnumerable<dynamic> queryResults,
[Blob("salescontainer/productsblob.csv", FileAccess.Write, Connection = "BlobStorageConnection")] CloudBlockBlob outputBlob,
ILogger log)
{
    // Write the query results to a CSV file
    using (var stream = new MemoryStream())
    using (var writer = new StreamWriter(stream))
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    {
        csv.WriteRecords(queryResults);
        writer.Flush();
        stream.Position = 0;
        await outputBlob.UploadFromStreamAsync(stream);
    }
}

출력 바인딩

출력 바인딩은 하나 이상의 행을 가져와서 Azure Data Explorer 테이블에 삽입합니다.

다음 섹션에서는 몇 가지 일반적인 시나리오에서 출력 바인딩을 사용하는 방법에 대해 설명합니다.

시나리오 1: 클러스터에 데이터를 수집하는 HTTP 엔드포인트

다음 시나리오는 들어오는 HTTP 요청을 처리하고 클러스터에 수집해야 하는 경우에 적용할 수 있습니다. 출력 바인딩을 사용하여 요청에서 들어오는 데이터를 Azure Data Explorer 테이블에 쓸 수 있습니다.

이 코드는 HTTP 트리거 및 Azure Data Explorer 출력 바인딩을 사용하여 함수를 정의합니다. 이 함수는 HTTP 요청 본문의 JSON 페이로드를 가져와 productsdb 데이터베이스의 제품 테이블에 씁니다.

public static IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "addproductuni")]
    HttpRequest req, ILogger log,
    [Kusto(Database:"productsdb" ,
    TableName ="products" ,
    Connection = "KustoConnectionString")] out Product product)
{
    log.LogInformation($"AddProduct function started");
    string body = new StreamReader(req.Body).ReadToEnd();
    product = JsonConvert.DeserializeObject<Product>(body);
    string productString = string.Format(CultureInfo.InvariantCulture, "(Name:{0} ID:{1} Cost:{2})",
                product.Name, product.ProductID, product.Cost);
    log.LogInformation("Ingested product {}", productString);
    return new CreatedResult($"/api/addproductuni", product);
}

그런 다음 다음과 같이 함수를 호출할 수 있습니다.

curl -X POST https://myfunctionapp.azurewebsites.net/api/addproductuni -d '{"Name":"Product1","ProductID":1,"Cost":100,"ActivatedOn":"2023-01-02T00:00:00"}'

시나리오 2: RabbitMQ 또는 Azure에서 지원되는 기타 메시징 시스템에서 데이터 수집

다음 시나리오는 메시징 시스템의 데이터를 클러스터로 수집해야 하는 경우에 적용됩니다. 출력 바인딩을 사용하여 메시징 시스템에서 들어오는 데이터를 Azure Data Explorer 테이블로 수집할 수 있습니다.

이 코드는 productsdb 데이터베이스의 제품 테이블에 수집되는 RabbitMQ 트리거를 통해 들어오는 메시지, JSON 형식의 데이터를 포함하는 함수를 정의합니다.

public class QueueTrigger
{
    [FunctionName("QueueTriggerBinding")]
    [return: Kusto(Database: "productsdb",
                TableName = "products",
                Connection = "KustoConnectionString")]
    public static Product Run(
        [RabbitMQTrigger(queueName: "bindings.products.queue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")] Product product,
        ILogger log)
    {
        log.LogInformation($"Dequeued product {product.ProductID}");
        return product;
    }
}

함수에 대한 자세한 내용은 Azure Functions 설명서를 참조 하세요. Azure Data Explorer 확장은 다음에서 사용할 수 있습니다.