Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 Copia URI.
- Eseguire query in un queryset KQL.
Azure Functions permette di eseguire codice serverless nel cloud in base a una pianificazione o in risposta a un evento. Usando i binding di input e output di Esplora dati di Azure per Funzioni di Azure, è possibile integrare Esplora dati di Azure nei flussi di lavoro per inserire dati ed eseguire query sul cluster.
Prerequisiti
- Una sottoscrizione di Azure. Creare un account Azure gratuito.
- Un cluster e un database di Azure Data Explorer con dati di esempio. Creare un cluster e un database.
- Un account di archiviazione.
Provare l'integrazione usando il progetto di esempio.
Come usare le binding di Azure Data Explorer per Azure Functions
Per informazioni su come usare i binding di Esplora dati di Azure per Funzioni di Azure, vedere gli articoli seguenti:
- Panoramica sui collegamenti per Azure Data Explorer in Azure Functions
- Associazioni input di Azure Data Explorer per Azure Functions
- Collegamenti di output di Azure Data Explorer per le Funzioni di Azure
Scenari per l'uso delle associazioni di Azure Data Explorer per le funzioni di Azure
Alcuni scenari comuni di utilizzo delle Azure Data Explorer bindings per le Azure Functions sono descritti nelle sezioni seguenti.
Associazioni di input
Le associazioni di input eseguono una query KQL (Kusto Query Language) o una funzione KQL, facoltativamente con parametri e restituiscono l'output alla funzione.
Le sezioni seguenti descrivono come usare le associazioni di input in alcuni scenari comuni.
Scenario 1: un endpoint HTTP per eseguire query sui dati da un cluster
Usare i binding di input quando è necessario esporre i dati di Azure Data Explorer tramite un'API REST. In questo scenario, si utilizza un trigger HTTP delle Funzioni di Azure per eseguire query sui dati nel cluster. Lo scenario è utile nelle situazioni in cui è necessario fornire l'accesso a livello di codice ai dati di Esplora dati di Azure per applicazioni o servizi esterni. L'esposizione dei dati tramite un'API REST consente alle applicazioni di usare facilmente i dati senza richiedere la connessione diretta al cluster.
Il codice definisce una funzione con un trigger HTTP e una binding di input di Azure Data Explorer. 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);
}
}
Richiamare la funzione 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 Data Explorer.
Le sezioni seguenti descrivono come usare le associazioni di output in alcuni scenari comuni.
Scenario 1: endpoint HTTP per inserire i dati in un cluster
Usare questo scenario quando è necessario elaborare le richieste HTTP in ingresso e inserire i dati nel cluster. Usando un'associazione di output, è possibile scrivere dati in ingresso dalla richiesta nelle tabelle di Esplora dati di Azure.
Il codice definisce una funzione con un trigger HTTP e un binding di output di Azure Data Explorer. 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);
}
Richiamare la funzione 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
Usare questo scenario quando è necessario inserire dati da un sistema di messaggistica nel cluster. Usando un'associazione di output, è possibile inserire i dati in ingresso dal sistema di messaggistica nelle tabelle di Esplora dati di Azure.
Il codice definisce una funzione con un trigger RabbitMQ. La funzione inserisce messaggi, dati in formato JSON, nella tabella products del 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: