Dela via


Integrera Azure Functions med Azure Data Explorer med hjälp av indata- och utdatabindningar (förhandsversion)

Viktigt

Den här anslutningsappen kan användas i realtidsanalys i Microsoft Fabric. Följ anvisningarna i den här artikeln med följande undantag:

Azure Functions kan du köra serverlös kod i molnet enligt ett schema eller som svar på en händelse. Med Azure Data Explorer indata- och utdatabindningar för Azure Functions kan du integrera Azure Data Explorer i dina arbetsflöden för att mata in data och köra frågor mot klustret.

Förutsättningar

Testa integreringen med vårt exempelprojekt

Så här använder du Azure Data Explorer-bindningar för Azure Functions

Information om hur du använder Azure Data Explorer-bindningar för Azure Functions finns i följande avsnitt:

Scenarier för att använda Azure Data Explorer-bindningar för Azure Functions

I följande avsnitt beskrivs några vanliga scenarier för att använda Azure Data Explorer-bindningar för Azure Functions.

Indatabindningar

Indatabindningar kör en Kusto-frågespråk-fråga (KQL) eller KQL-funktion, valfritt med parametrar, och returnerar utdata till funktionen.

I följande avsnitt beskrivs hur du använder indatabindningar i några vanliga scenarier.

Scenario 1: En HTTP-slutpunkt för att fråga efter data från ett kluster

Användning av indatabindningar är tillämpligt i situationer där du behöver exponera Azure Data Explorer data via ett REST-API. I det här scenariot använder du en Azure Functions HTTP-utlösare för att fråga efter data i klustret. Scenariot är särskilt användbart i situationer där du behöver ge programmatisk åtkomst till Azure Data Explorer data för externa program eller tjänster. Genom att exponera dina data via ett REST API kan program enkelt använda data utan att kräva att de ansluter direkt till klustret.

Koden definierar en funktion med en HTTP-utlösare och en Azure Data Explorer-indatabindning. Indatabindningen anger vilken fråga som ska köras mot tabellen Products i databasen productsdb . Funktionen använder kolumnen productId som predikat som skickas som en parameter.

{
    [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);
    }
}

Funktionen kan sedan anropas på följande sätt:

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

Scenario 2: En schemalagd utlösare för att exportera data från ett kluster

Följande scenario gäller i situationer där data måste exporteras enligt ett tidsbaserat schema.

Koden definierar en funktion med en timerutlösare som exporterar en aggregering av försäljningsdata från productsdb-databasen till en CSV-fil i Azure Blob Storage.

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

Utdatabindningar

Utdatabindningar tar en eller flera rader och infogar dem i en Azure Data Explorer-tabell.

I följande avsnitt beskrivs hur du använder utdatabindningar i några vanliga scenarier.

Scenario 1: HTTP-slutpunkt för att mata in data i ett kluster

Följande scenario gäller i situationer där inkommande HTTP-begäranden måste bearbetas och matas in i klustret. Genom att använda en utdatabindning kan inkommande data från begäran skrivas till Azure Data Explorer-tabeller.

Koden definierar en funktion med en HTTP-utlösare och en Azure Data Explorer-utdatabindning. Den här funktionen tar en JSON-nyttolast i HTTP-begärandetexten och skriver den till produkttabellen i productsdb-databasen .

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

Funktionen kan sedan anropas på följande sätt:

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

Scenario 2: Mata in data från RabbitMQ eller andra meddelandesystem som stöds i Azure

Följande scenario gäller i situationer där data från ett meddelandesystem måste matas in i klustret. Genom att använda en utdatabindning kan inkommande data från meddelandesystemet matas in i Azure Data Explorer-tabeller.

Koden definierar en funktion med meddelanden, data i JSON-format och inkommande via en RabbitMQ-utlösare som matas in i produkttabellen i productsdb-databasen .

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

Mer information om funktioner finns i Azure Functions dokumentation. Azure Data Explorer-tillägget är tillgängligt på: