共用方式為


使用輸入與輸出系結整合 Azure Functions 與 Azure 資料總管 (預覽)

重要

此連接器可用於 Microsoft Fabric 中的即時智慧 。 使用本文中的指示,但有下列例外狀況:

Azure Functions 可讓您根據排程或在回應事件時,在雲端執行無伺服器程式碼。 透過 Azure Functions 的 Azure 數據總管輸入和輸出系結,您可以將 Azure 數據總管整合到工作流程中,以內嵌數據,並針對叢集執行查詢。

必要條件

試用與範例 專案的整合

如何使用 Azure Functions 的 Azure 數據總管系結

如需如何使用 Azure Functions 的 Azure 數據總管系結的詳細資訊,請參閱下列主題:

針對 Azure Functions 使用 Azure 數據總管系結的案例

下列各節說明使用 Azure Functions 的 Azure 數據總管系結的一些常見案例。

輸入繫結

輸入系結會執行 Kusto 查詢語言 (KQL) 查詢或 KQL 函式,選擇性地搭配參數,並將輸出傳回至函式。

下列各節說明一些如何在一些常見案例中使用輸入系結。

案例 1:從叢集查詢數據的 HTTP 端點

當您需要透過 REST API 公開 Azure 數據總管數據時,可以使用輸入系結。 在此案例中,您會使用 Azure Functions HTTP 觸發程式來查詢叢集中的數據。 在您需要為外部應用程式或服務提供 Azure 資料總管數據的程式設計存取時,此案例特別有用。 透過 REST API 公開您的資料,應用程式即可輕鬆地取用數據,而不需要它們直接連線到您的叢集。

此程式代碼會使用 HTTP 觸發程式和 Azure 數據總管輸入系結來定義函式。 輸入系結會指定要針對 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:從叢集匯出數據的排程觸發程式

下列案例適用於需要以時間為基礎的排程導出數據的情況。

此程式代碼會使用定時器觸發程式來定義函式,以將 sales 數據匯總從 productsdb 資料庫匯出至 Azure Blob 儲存體 中的 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 數據總管數據表中。

下列各節說明一些如何在一些常見案例中使用輸出系結。

案例 1:將數據內嵌至叢集的 HTTP 端點

下列案例適用於需要處理並擷取至叢集的連入 HTTP 要求的情況。 藉由使用輸出系結,來自要求的連入數據可以寫入 Azure 數據總管數據表。

此程式代碼會使用 HTTP 觸發程式和 Azure 數據總管輸出系結來定義函式。 此函式會採用 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 數據總管數據表。

此程式代碼會定義函式,其中包含訊息、JSON 格式的數據、透過RabbitMQ觸發程式傳入,這些觸發程式會內嵌至 productsdb 資料庫中的產品數據表

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 數據總管延伸模組可在下列專案上使用: