Megosztás a következőn keresztül:


Azure Functions integrálása az Azure Data Explorer-nal bemeneti és kimeneti kötések használatával (előzetes verzió)

Fontos

Ez az összekötő használható a Microsoft Fabric valós idejű elemzéseiben . Használja a cikkben található utasításokat a következő kivételekkel:

Azure Functions lehetővé teszi a kiszolgáló nélküli kód futtatását a felhőben ütemezés szerint vagy egy eseményre válaszul. Az Azure Data Explorer Azure Functions bemeneti és kimeneti kötéseivel integrálhatja az Azure Data Explorer a munkafolyamatokba az adatok betöltéséhez és lekérdezések futtatásához a fürtön.

Előfeltételek

Próbálja ki a mintaprojekttel való integrációt

Azure Data Explorer kötések használata Azure Functions

Az Azure Data Explorer-kötések Azure Functions való használatáról az alábbi témakörökben olvashat:

Forgatókönyvek az Azure Data Explorer-kötések Azure Functions

Az alábbi szakaszok az Azure Data Explorer kötéseinek Azure Functions való használatára vonatkozó gyakori forgatókönyveket ismertetik.

Bemeneti kötések

A bemeneti kötések Kusto lekérdezésnyelv (KQL) lekérdezést vagy KQL-függvényt futtatnak, opcionálisan paraméterekkel, és visszaadja a kimenetet a függvénynek.

Az alábbi szakaszok néhány gyakori forgatókönyvben ismertetik a bemeneti kötések használatát.

1. forgatókönyv: HTTP-végpont egy fürt adatainak lekérdezéséhez

A bemeneti kötések használata olyan helyzetekben alkalmazható, amikor az Azure Data Explorer-adatokat REST API-val kell elérhetővé tenni. Ebben a forgatókönyvben egy Azure Functions HTTP-eseményindítót használ a fürt adatainak lekérdezéséhez. Ez a forgatókönyv különösen hasznos olyan helyzetekben, amikor programozott hozzáférést kell biztosítania az Azure Data Explorer adatokhoz külső alkalmazásokhoz vagy szolgáltatásokhoz. Az adatok REST API-val történő felfedésével az alkalmazások könnyen felhasználhatják az adatokat anélkül, hogy közvetlenül a fürthöz kellene csatlakozniuk.

A kód egy HTTP-eseményindítóval és egy Azure Data Explorer bemeneti kötéssel rendelkező függvényt határoz meg. A bemeneti kötés megadja a productsdb adatbázis Products táblájában futtatandó lekérdezést. A függvény a productId oszlopot használja paraméterként átadott predikátumként.

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

A függvény ezután a következőképpen hívható meg:

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

2. forgatókönyv: Ütemezett eseményindító, amely adatokat exportál egy fürtből

Az alábbi forgatókönyv olyan esetekben alkalmazható, amikor az adatokat időalapú ütemezés szerint kell exportálni.

A kód meghatároz egy időzítő eseményindítóval rendelkező függvényt, amely az értékesítési adatok összesítését exportálja a productsdb adatbázisból egy CSV-fájlba a 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);
    }
}

Kimeneti kötések

A kimeneti kötések egy vagy több sort vesznek igénybe, és beszúrják őket egy Azure-Data Explorer táblába.

Az alábbi szakaszok néhány gyakori forgatókönyvben ismertetik a kimeneti kötések használatát.

1. forgatókönyv: HTTP-végpont az adatok fürtbe való betöltéséhez

Az alábbi forgatókönyv olyan esetekben alkalmazható, amikor a bejövő HTTP-kéréseket fel kell dolgozni, és be kell őket helyezni a fürtbe. Kimeneti kötés használatával a kérésből származó bejövő adatok az Azure Data Explorer táblákba írhatók.

A kód egy HTTP-eseményindítóval és egy Azure Data Explorer kimeneti kötéssel rendelkező függvényt határoz meg. Ez a függvény egy JSON hasznos adattal rendelkezik a HTTP-kérelem törzsében, és a productsdb adatbázis termékek táblájára írja.

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

A függvény ezután a következőképpen hívható meg:

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

2. forgatókönyv: Adatok betöltése a RabbitMQ-ból vagy az Azure-ban támogatott egyéb üzenetkezelési rendszerekből

Az alábbi forgatókönyv olyan esetekben alkalmazható, amikor egy üzenetkezelési rendszer adatait a fürtbe kell beszúrni. Kimeneti kötés használatával az üzenetkezelési rendszer bejövő adatai betölthetők az Azure Data Explorer-táblákba.

A kód egy olyan függvényt definiál, amely üzeneteket, JSON formátumú adatokat tartalmaz, és egy RabbitMQ-eseményindítón keresztül bejövő adatokat tartalmaz, amelyek a productsdb adatbázis termékek táblájába vannak betöltve.

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

További információ a függvényekről: Azure Functions dokumentáció. Az Azure Data Explorer bővítmény a következő időpontban érhető el: