Condividi tramite


Integrare Funzioni di Azure con Azure Esplora dati usando associazioni di input e output (anteprima)

Importante

Questo connettore può essere usato in Intelligenza in tempo reale in Microsoft Fabric. Usare le istruzioni in questo articolo con le eccezioni seguenti:

  • Se necessario, creare database usando le istruzioni riportate in Creare un database KQL.
  • Se necessario, creare tabelle usando le istruzioni riportate in Creare una tabella vuota.
  • Ottenere URI di query o inserimento usando le istruzioni in URI di copia.
  • Eseguire query in un set di query KQL.

Funzioni di Azure consente di eseguire codice serverless nel cloud in base a una pianificazione o in risposta a un evento. Con Azure Esplora dati associazioni di input e output per Funzioni di Azure, è possibile integrare Azure Esplora dati nei flussi di lavoro per inserire dati ed eseguire query sul cluster.

Prerequisiti

Provare l'integrazione con il progetto di esempio

Come usare le associazioni Esplora dati di Azure per Funzioni di Azure

Per informazioni su come usare le associazioni Esplora dati di Azure per Funzioni di Azure, vedere gli argomenti seguenti:

Scenari per l'uso di associazioni Esplora dati di Azure per Funzioni di Azure

Le sezioni seguenti descrivono alcuni scenari comuni per l'uso di associazioni Esplora dati di Azure per Funzioni di Azure.

Associazioni di input

Le associazioni di input eseguono una query Linguaggio di query Kusto (KQL) o una funzione KQL, facoltativamente con parametri e restituisce l'output alla funzione.

Nelle sezioni seguenti viene descritto come usare le associazioni di input in alcuni scenari comuni.

Scenario 1: un endpoint HTTP per eseguire query sui dati da un cluster

L'uso delle associazioni di input è applicabile in situazioni in cui è necessario esporre i dati di Azure Esplora dati tramite un'API REST. In questo scenario si usa un trigger HTTP Funzioni di Azure per eseguire query sui dati nel cluster. Lo scenario è particolarmente utile nelle situazioni in cui è necessario fornire l'accesso a livello di codice ai dati di Azure Esplora dati per applicazioni o servizi esterni. Esponendo i dati tramite un'API REST, le applicazioni possono usare facilmente i dati senza richiedere la connessione diretta al cluster.

Il codice definisce una funzione con un trigger HTTP e un'associazione di input di Azure Esplora dati. L'associazione di input specifica la query da eseguire sulla tabella Products nel database productsdb . La funzione usa la colonna productId come predicato passato come parametro.

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

La funzione può quindi essere richiamata, come indicato di seguito:

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

Scenario 2: un trigger pianificato per esportare i dati da un cluster

Lo scenario seguente è applicabile in situazioni in cui i dati devono essere esportati in base a una pianificazione basata sul tempo.

Il codice definisce una funzione con un trigger timer che esporta un'aggregazione di dati di vendita dal database productsdb in un file CSV in Archiviazione BLOB di Azure.

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

Associazioni di output

Le associazioni di output accettano una o più righe e le inseriscono in una tabella di Azure Esplora dati.

Nelle sezioni seguenti viene descritto come usare le associazioni di output in alcuni scenari comuni.

Scenario 1: endpoint HTTP per inserire i dati in un cluster

Lo scenario seguente è applicabile in situazioni in cui le richieste HTTP in ingresso devono essere elaborate e inserite nel cluster. Usando un'associazione di output, i dati in ingresso dalla richiesta possono essere scritti nelle tabelle di Azure Esplora dati.

Il codice definisce una funzione con un trigger HTTP e un'associazione di output di Azure Esplora dati. Questa funzione accetta un payload JSON nel corpo della richiesta HTTP e lo scrive nella tabella products nel database 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);
}

La funzione può quindi essere richiamata, come indicato di seguito:

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

Scenario 2: Inserire dati da RabbitMQ o da altri sistemi di messaggistica supportati in Azure

Lo scenario seguente è applicabile in situazioni in cui i dati di un sistema di messaggistica devono essere inseriti nel cluster. Usando un'associazione di output, i dati in ingresso dal sistema di messaggistica possono essere inseriti nelle tabelle di Azure Esplora dati.

Il codice definisce una funzione con messaggi, dati in formato JSON, in ingresso tramite un trigger RabbitMQ inserito nella tabella products nel database 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;
    }
}

Per altre informazioni sulle funzioni, vedere Funzioni di Azure documentazione. L'estensione azure Esplora dati è disponibile in: