Skip to content

Latest commit

 

History

History
881 lines (699 loc) · 33.3 KB

functions-bindings-azure-data-explorer-output.md

File metadata and controls

881 lines (699 loc) · 33.3 KB
titledescriptionauthorms.topicms.customms.datems.authorms.reviewerzone_pivot_groups
Azure Data Explorer output bindings for Azure Functions (preview)
Understand how to use Azure Data Explorer output bindings for Azure Functions and ingest data to Azure Data Explorer.
ramacg
reference
build-2023, devx-track-extended-java, devx-track-js, devx-track-python
05/04/2023
shsagir
ramacg
programming-languages-set-functions-data-explorer

Azure Data Explorer output bindings for Azure Functions (preview)

When a function runs, the Azure Data Explorer output binding ingests data to Azure Data Explorer.

For information on setup and configuration details, see the overview.

Examples

::: zone pivot="programming-language-csharp"

[!INCLUDE functions-bindings-csharp-intro-with-csx]

[!INCLUDE functions-in-process-model-retirement-note]

More samples for the Azure Data Explorer output binding are available in the GitHub repository.

This section contains the following examples:

The examples refer to Product class and a corresponding database table:

publicclassProduct{[JsonProperty(nameof(ProductID))]publiclongProductID{get;set;}[JsonProperty(nameof(Name))]publicstringName{get;set;}[JsonProperty(nameof(Cost))]publicdoubleCost{get;set;}}
.create-merge table Products (ProductID:long, Name:string, Cost:double)

HTTP trigger, write one record

The following example shows a C# function that adds a record to a database. The function uses data provided in an HTTP POST request as a JSON body.

usingMicrosoft.Azure.Functions.Worker;usingMicrosoft.Azure.Functions.Worker.Extensions.Kusto;usingMicrosoft.Azure.Functions.Worker.Http;usingMicrosoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples.Common;namespaceMicrosoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples{publicstaticclassAddProduct{[Function("AddProduct")][KustoOutput(Database:"productsdb",Connection="KustoConnectionString",TableName="Products")]publicstaticasyncTask<Product>Run([HttpTrigger(AuthorizationLevel.Anonymous,"post",Route="addproductuni")]HttpRequestDatareq){Product?prod=awaitreq.ReadFromJsonAsync<Product>();returnprod??newProduct{};}}}

HTTP trigger, write records with mapping

The following example shows a C# function that adds a collection of records to a database. The function uses mapping that transforms a Product to Item.

To transform data from Product to Item, the function uses a mapping reference:

.create-merge table Item (ItemID:long, ItemName:string, ItemCost:float) -- Create a mapping that transforms an Item to a Product .create-or-altertable Product ingestion json mapping "item_to_product_json"'[{"column":"ProductID","path":"$.ItemID"},{"column":"Name","path":"$.ItemName"},{"column":"Cost","path":"$.ItemCost"}]'
namespaceMicrosoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples.Common{publicclassItem{publiclongItemID{get;set;}publicstring?ItemName{get;set;}publicdoubleItemCost{get;set;}}}
usingMicrosoft.Azure.Functions.Worker;usingMicrosoft.Azure.Functions.Worker.Extensions.Kusto;usingMicrosoft.Azure.Functions.Worker.Http;usingMicrosoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples.Common;namespaceMicrosoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples{publicstaticclassAddProductsWithMapping{[Function("AddProductsWithMapping")][KustoOutput(Database:"productsdb",Connection="KustoConnectionString",TableName="Products",MappingRef="item_to_product_json")]publicstaticasyncTask<Item>Run([HttpTrigger(AuthorizationLevel.Anonymous,"post",Route="addproductswithmapping")]HttpRequestDatareq){Item?item=awaitreq.ReadFromJsonAsync<Item>();returnitem??newItem{};}}}

More samples for the Azure Data Explorer output binding are available in the GitHub repository.

This section contains the following examples:

The examples refer to Product class and a corresponding database table:

publicclassProduct{[JsonProperty(nameof(ProductID))]publiclongProductID{get;set;}[JsonProperty(nameof(Name))]publicstringName{get;set;}[JsonProperty(nameof(Cost))]publicdoubleCost{get;set;}}
.create-merge table Products (ProductID:long, Name:string, Cost:double)

HTTP trigger, write one record

The following example shows a C# function that adds a record to a database. The function uses data provided in an HTTP POST request as a JSON body.

usingSystem.Globalization;usingSystem.IO;usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Azure.WebJobs.Extensions.Http;usingMicrosoft.Azure.WebJobs.Extensions.Kusto.Samples.Common;usingMicrosoft.Azure.WebJobs.Kusto;usingMicrosoft.Extensions.Logging;usingNewtonsoft.Json;namespaceMicrosoft.Azure.WebJobs.Extensions.Kusto.Samples.OutputBindingSamples{publicstaticclassAddProduct{[FunctionName("AddProductUni")]publicstaticIActionResultRun([HttpTrigger(AuthorizationLevel.Anonymous,"post",Route="addproductuni")]HttpRequestreq,ILoggerlog,[Kusto(Database:"productsdb",TableName="Products",Connection="KustoConnectionString")]outProductproduct){log.LogInformation($"AddProduct function started");stringbody=newStreamReader(req.Body).ReadToEnd();product=JsonConvert.DeserializeObject<Product>(body);returnnewCreatedResult($"/api/addproductuni",product);}}}

HTTP trigger, write to two tables

The following example shows a C# function that adds records to a database in two different tables (Products and ProductsChangeLog). The function uses data provided in an HTTP POST request as a JSON body and multiple output bindings.

.create-merge table ProductsChangeLog (ProductID:long, CreatedAt:datetime)
usingSystem;usingNewtonsoft.Json;namespaceMicrosoft.Azure.WebJobs.Extensions.Kusto.Samples.Common{publicclassProductsChangeLog{[JsonProperty(nameof(ProductID))]publiclongProductID{get;set;}[JsonProperty(nameof(CreatedAt))]publicDateTimeCreatedAt{get;set;}}}
usingSystem;usingSystem.IO;usingKusto.Cloud.Platform.Utils;usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Azure.WebJobs.Extensions.Http;usingMicrosoft.Azure.WebJobs.Extensions.Kusto.Samples.Common;usingMicrosoft.Azure.WebJobs.Kusto;usingMicrosoft.Extensions.Logging;usingNewtonsoft.Json;namespaceMicrosoft.Azure.WebJobs.Extensions.Kusto.Samples.OutputBindingSamples{publicstaticclassAddMultiTable{[FunctionName("AddMultiTable")]publicstaticIActionResultRun([HttpTrigger(AuthorizationLevel.Anonymous,"post",Route="addmulti")]HttpRequestreq,ILoggerlog,[Kusto(Database:"productsdb",TableName="Products",Connection="KustoConnectionString")]IAsyncCollector<Product>productsCollector,[Kusto(Database:"productsdb",TableName=S"ProductsChangeLog",Connection="KustoConnectionString")]IAsyncCollector<ProductsChangeLog>changeCollector){log.LogInformation($"AddProducts function started");stringbody=newStreamReader(req.Body).ReadToEnd();Product[]products=JsonConvert.DeserializeObject<Product[]>(body);products.ForEach(p =>{productsCollector.AddAsync(p);changeCollector.AddAsync(newProductsChangeLog{CreatedAt=DateTime.UtcNow,ProductID=p.ProductID});});productsCollector.FlushAsync();changeCollector.FlushAsync();returnproducts!=null?newObjectResult(products){StatusCode=StatusCodes.Status201Created}:newBadRequestObjectResult("Please pass a well formed JSON Product array in the body");}}}

HTTP trigger, write records using IAsyncCollector

The following example shows a C# function that ingests a set of records to a table. The function uses data provided in an HTTP POST body JSON array.

usingSystem.IO;usingKusto.Cloud.Platform.Utils;usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Azure.WebJobs.Extensions.Http;usingMicrosoft.Azure.WebJobs.Extensions.Kusto.Samples.Common;usingMicrosoft.Azure.WebJobs.Kusto;usingMicrosoft.Extensions.Logging;usingNewtonsoft.Json;namespaceMicrosoft.Azure.WebJobs.Extensions.Kusto.Samples.OutputBindingSamples{publicstaticclassAddProductsAsyncCollector{[FunctionName("AddProductsAsyncCollector")]publicstaticIActionResultRun([HttpTrigger(AuthorizationLevel.Anonymous,"post",Route="addproductsasynccollector")]HttpRequestreq,ILoggerlog,[Kusto(Database:"productsdb",TableName="Products",Connection="KustoConnectionString")]IAsyncCollector<Product>collector){log.LogInformation($"AddProductsAsyncCollector function started");stringbody=newStreamReader(req.Body).ReadToEnd();Product[]products=JsonConvert.DeserializeObject<Product[]>(body);products.ForEach(p =>{collector.AddAsync(p);});collector.FlushAsync();returnproducts!=null?newObjectResult(products){StatusCode=StatusCodes.Status201Created}:newBadRequestObjectResult("Please pass a well formed JSON Product array in the body");}}}

::: zone-end

::: zone pivot="programming-language-java"

More samples for the Java Azure Data Explorer input binding are available in the GitHub repository.

This section contains the following examples:

The examples refer to a Products class (in a separate file Product.java) and a corresponding database table Products (defined earlier):

packagecom.microsoft.azure.kusto.common; importcom.fasterxml.jackson.annotation.JsonProperty; publicclassProduct { @JsonProperty("ProductID") publiclongProductID; @JsonProperty("Name") publicStringName; @JsonProperty("Cost") publicdoubleCost; publicProduct() { } publicProduct(longProductID, Stringname, doubleCost) { this.ProductID = ProductID; this.Name = name; this.Cost = Cost; } }

HTTP trigger, write a record to a table

The following example shows an Azure Data Explorer output binding in a Java function that adds a product record to a table. The function uses data provided in an HTTP POST request as a JSON body. The function takes another dependency on the com.fasterxml.jackson.core library to parse the JSON body.

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.4.1</version> </dependency>
packagecom.microsoft.azure.kusto.outputbindings; importcom.fasterxml.jackson.databind.ObjectMapper; importcom.microsoft.azure.functions.HttpMethod; importcom.microsoft.azure.functions.HttpRequestMessage; importcom.microsoft.azure.functions.HttpResponseMessage; importcom.microsoft.azure.functions.HttpStatus; importcom.microsoft.azure.functions.OutputBinding; importcom.microsoft.azure.functions.annotation.AuthorizationLevel; importcom.microsoft.azure.functions.annotation.FunctionName; importcom.microsoft.azure.functions.annotation.HttpTrigger; importcom.microsoft.azure.functions.kusto.annotation.KustoOutput; importcom.microsoft.azure.kusto.common.Product; importjava.io.IOException; importjava.util.Optional; importstaticcom.microsoft.azure.kusto.common.Constants.*; publicclassAddProduct { @FunctionName("AddProduct") publicHttpResponseMessagerun(@HttpTrigger(name = "req", methods = { HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS, route = "addproductuni") HttpRequestMessage<Optional<String>> request, @KustoOutput(name = "product", database = "productsdb", tableName = "Products", connection = KUSTOCONNSTR) OutputBinding<Product> product) throwsIOException { if (request.getBody().isPresent()) { Stringjson = request.getBody().get(); ObjectMappermapper = newObjectMapper(); Productp = mapper.readValue(json, Product.class); product.setValue(p); returnrequest.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(product) .build(); } else { returnrequest.createResponseBuilder(HttpStatus.NO_CONTENT).header("Content-Type", "application/json") .build(); } } }

HTTP trigger, write to two tables

The following example shows an Azure Data Explorer output binding in a Java function that adds records to a database in two different tables (Product and ProductChangeLog). The function uses data provided in an HTTP POST request as a JSON body and multiple output bindings. The function takes another dependency on the com.fasterxml.jackson.core library to parse the JSON body.

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.4.1</version> </dependency>

The second table, ProductsChangeLog, corresponds to the following definition:

.create-merge table ProductsChangeLog (ProductID:long, CreatedAt:datetime)

and Java class in ProductsChangeLog.java:

packagecom.microsoft.azure.kusto.common; importcom.fasterxml.jackson.annotation.JsonProperty; publicclassProductsChangeLog { @JsonProperty("ProductID") publiclongProductID; @JsonProperty("CreatedAt") publicStringCreatedAt; publicProductsChangeLog() { } publicProductsChangeLog(longProductID, StringCreatedAt) { this.ProductID = ProductID; this.CreatedAt = CreatedAt; } }
packagecom.microsoft.azure.kusto.outputbindings; importcom.fasterxml.jackson.databind.ObjectMapper; importcom.microsoft.azure.functions.HttpMethod; importcom.microsoft.azure.functions.HttpRequestMessage; importcom.microsoft.azure.functions.HttpResponseMessage; importcom.microsoft.azure.functions.HttpStatus; importcom.microsoft.azure.functions.OutputBinding; importcom.microsoft.azure.functions.annotation.AuthorizationLevel; importcom.microsoft.azure.functions.annotation.FunctionName; importcom.microsoft.azure.functions.annotation.HttpTrigger; importcom.microsoft.azure.functions.kusto.annotation.KustoOutput; importcom.microsoft.azure.kusto.common.Product; importcom.microsoft.azure.kusto.common.ProductsChangeLog; importstaticcom.microsoft.azure.kusto.common.Constants.*; importjava.io.IOException; importjava.time.Clock; importjava.time.Instant; importjava.util.Optional; publicclassAddMultiTable { @FunctionName("AddMultiTable") publicHttpResponseMessagerun(@HttpTrigger(name = "req", methods = { HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS, route = "addmultitable") HttpRequestMessage<Optional<String>> request, @KustoOutput(name = "product", database = "productsdb", tableName = "Products", connection = KUSTOCONNSTR) OutputBinding<Product> product, @KustoOutput(name = "productChangeLog", database = "productsdb", tableName = "ProductsChangeLog", connection = KUSTOCONNSTR) OutputBinding<ProductsChangeLog> productChangeLog) throwsIOException { if (request.getBody().isPresent()) { Stringjson = request.getBody().get(); ObjectMappermapper = newObjectMapper(); Productp = mapper.readValue(json, Product.class); product.setValue(p); productChangeLog.setValue(newProductsChangeLog(p.ProductID, Instant.now(Clock.systemUTC()).toString())); returnrequest.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(product) .build(); } else { returnrequest.createResponseBuilder(HttpStatus.NO_CONTENT).header("Content-Type", "application/json") .build(); } } }

::: zone-end

::: zone pivot="programming-language-javascript"

More samples for the Azure Data Explorer output binding are available in the GitHub repository.

This section contains the following examples:

The examples refer to a database table.

The examples refer to the tables Products and ProductsChangeLog (defined earlier).

HTTP trigger, write records to a table

The following example shows an Azure Data Explorer output binding in a function.json file and a JavaScript function that adds records to a table. The function uses data provided in an HTTP POST request as a JSON body.

The following example is binding data in the function.json file:

{ "bindings": [ { "authLevel": "function", "name": "req", "direction": "in", "type": "httpTrigger", "methods": [ "post" ], "route": "addproduct" }, { "name": "$return", "type": "http", "direction": "out" }, { "name": "product", "type": "kusto", "database": "productsdb", "direction": "out", "tableName": "Products", "connection": "KustoConnectionString" } ], "disabled": false }

The configuration section explains these properties.

The following snippet is sample JavaScript code:

// Insert the product, which will insert it into the Products table.module.exports=asyncfunction(context,req){// Note that this expects the body to be a JSON object or array of objects which have a property// matching each of the columns in the table to insert to.context.bindings.product=req.body;return{status: 201,body: req.body};}

HTTP trigger, write to two tables

The following example shows an Azure Data Explorer output binding in a function.json file and a JavaScript function that adds records to a database in two different tables (Products and ProductsChangeLog). The function uses data provided in an HTTP POST request as a JSON body and multiple output bindings.

The second table, ProductsChangeLog, corresponds to the following definition:

.create-merge table ProductsChangeLog (ProductID:long, CreatedAt:datetime)

The following snippet is binding data in the function.json file:

{ "bindings": [ { "authLevel": "function", "name": "req", "direction": "in", "type": "httpTrigger", "methods": [ "post" ], "route": "addmultitable" }, { "name": "res", "type": "http", "direction": "out" }, { "name": "product", "type": "kusto", "database": "productsdb", "direction": "out", "tableName": "Products", "connection": "KustoConnectionString" }, { "name": "productchangelog", "type": "kusto", "database": "productsdb", "direction": "out", "tableName": "ProductsChangeLog", "connection": "KustoConnectionString" } ], "disabled": false }

The configuration section explains these properties.

The following snippet is sample JavaScript code:

module.exports=asyncfunction(context,req){context.log('JavaScript HTTP trigger and Kusto output binding function processed a request.');context.log(req.body);if(req.body){varchangeLog={ProductID:req.body.ProductID,CreatedAt: newDate().toISOString()};context.bindings.product=req.body;context.bindings.productchangelog=changeLog;context.res={body: req.body,mimetype: "application/json",status: 201}}else{context.res={status: 400,body: "Error reading request body"}}}

::: zone-end

::: zone pivot="programming-language-python"

More samples for the Azure Data Explorer output binding are available in the GitHub repository.

This section contains the following examples:

The examples refer to the tables Products and ProductsChangeLog (defined earlier).

HTTP trigger, write records to a table

The following example shows an Azure Data Explorer output binding in a function.json file and a Python function that adds records to a table. The function uses data provided in an HTTP POST request as a JSON body.

The following snippet is binding data in the function.json file:

{ "scriptFile": "__init__.py", "bindings": [ { "authLevel": "Anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "post" ], "route": "addproductuni" }, { "type": "http", "direction": "out", "name": "$return" }, { "name": "product", "type": "kusto", "database": "sdktestsdb", "direction": "out", "tableName": "Products", "connection": "KustoConnectionString" } ] }

The configuration section explains these properties.

The following snippet is sample Python code:

importazure.functionsasfuncfromCommon.productimportProductdefmain(req: func.HttpRequest, product: func.Out[str]) ->func.HttpResponse: body=str(req.get_body(),'UTF-8') product.set(body) returnfunc.HttpResponse( body=body, status_code=201, mimetype="application/json" )

HTTP trigger, write to two tables

The following example shows an Azure Data Explorer output binding in a function.json file and a JavaScript function that adds records to a database in two different tables (Products and ProductsChangeLog). The function uses data provided in an HTTP POST request as a JSON body and multiple output bindings. The second table, ProductsChangeLog, corresponds to the following definition:

.create-merge table ProductsChangeLog (ProductID:long, CreatedAt:datetime)

The following snippet is binding data in the function.json file:

{ "scriptFile": "__init__.py", "bindings": [ { "authLevel": "Anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "post" ], "route": "addmultitable" }, { "type": "http", "direction": "out", "name": "$return" }, { "name": "product", "type": "kusto", "database": "sdktestsdb", "direction": "out", "tableName": "Products", "connection": "KustoConnectionString" }, { "name": "productchangelog", "type": "kusto", "database": "sdktestsdb", "direction": "out", "tableName": "ProductsChangeLog", "connection": "KustoConnectionString" } ] }

The configuration section explains these properties.

The following snippet is sample Python code:

importjsonfromdatetimeimportdatetimeimportazure.functionsasfuncfromCommon.productimportProductdefmain(req: func.HttpRequest, product: func.Out[str],productchangelog: func.Out[str]) ->func.HttpResponse: body=str(req.get_body(),'UTF-8') # parse x:product.set(body) id=json.loads(body)["ProductID"] changelog= { "ProductID": id, "CreatedAt": datetime.now().isoformat(), } productchangelog.set(json.dumps(changelog)) returnfunc.HttpResponse( body=body, status_code=201, mimetype="application/json" )

::: zone-end

::: zone pivot="programming-language-csharp"

Attributes

The C# library uses the KustoAttribute attribute to declare the Azure Data Explorer bindings on the function, which has the following properties.

Attribute propertyDescription
DatabaseRequired. The database against which the query must be executed.
ConnectionRequired. The name of the variable that holds the connection string, which is resolved through environment variables or through function app settings. Defaults to look up on the variable KustoConnectionString. At runtime, this variable is looked up against the environment. Documentation on the connection string is at Kusto connection strings. For example: "KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId.
TableNameRequired. The table to ingest the data into.
MappingRefOptional. Attribute to pass a mapping ref that's already defined in the cluster.
ManagedServiceIdentityOptional. A managed identity can be used to connect to Azure Data Explorer. To use a system managed identity, use "system." Any other identity names are interpreted as a user managed identity.
DataFormatOptional. The default data format is multijson/json. It can be set to text formats supported in the datasource format enumeration. Samples are validated and provided for CSV and JSON formats.

::: zone-end

::: zone pivot="programming-language-java"

Annotations

The Java functions runtime library uses the @KustoInput annotation (com.microsoft.azure.functions.kusto.annotation.KustoOutput).

ElementDescription
nameRequired. The name of the variable that represents the query results in function code.
databaseRequired. The database against which the query must be executed.
connectionRequired. The name of the variable that holds the connection string, which is resolved through environment variables or through function app settings. Defaults to look up on the variable KustoConnectionString. At runtime, this variable is looked up against the environment. Documentation on the connection string is at Kusto connection strings. For example: "KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId.
tableNameRequired. The table to ingest the data into.
mappingRefOptional. Attribute to pass a mapping ref that's already defined in the cluster.
dataFormatOptional. The default data format is multijson/json. It can be set to text formats supported in the datasource format enumeration. Samples are validated and provided for CSV and JSON formats.
managedServiceIdentityA managed identity can be used to connect to Azure Data Explorer. To use a system managed identity, use "system." Any other identity names are interpreted as a user managed identity.

::: zone-end

::: zone pivot="programming-language-javascript,programming-language-python"

Configuration

The following table explains the binding configuration properties that you set in the function.json file.

function.json propertyDescription
typeRequired. Must be set to kusto.
directionRequired. Must be set to out.
nameRequired. The name of the variable that represents the query results in function code.
databaseRequired. The database against which the query must be executed.
connectionRequired. The name of the variable that holds the connection string, resolved through environment variables or through function app settings. Defaults to look up on the variable KustoConnectionString. At runtime, this variable is looked up against the environment. Documentation on the connection string is at Kusto connection strings. For example: "KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId.
tableNameRequired. The table to ingest the data into.
mappingRefOptional. Attribute to pass a mapping ref that's already defined in the cluster.
dataFormatOptional. The default data format is multijson/json. It can be set to text formats supported in the datasource format enumeration. Samples are validated and provided for CSV and JSON formats.
managedServiceIdentityA managed identity can be used to connect to Azure Data Explorer. To use a system managed identity, use "system." Any other identity names are interpreted as a user managed identity.
::: zone-end

[!INCLUDE app settings to local.settings.json]

Usage

::: zone pivot="programming-language-csharp,programming-language-javascript,programming-language-python,programming-language-java"

The attribute's constructor takes the database and the attributes TableName, MappingRef, and DataFormat and the connection setting name. The KQL command can be a KQL statement or a KQL function. The connection string setting name corresponds to the application setting (in local.settings.json for local development) that contains the Kusto connection strings. For example:"KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId. Queries executed by the input binding are parameterized. The values provided in the KQL parameters are used at runtime.

::: zone-end

[!INCLUDE functions-azure-data-explorer-authentication-note]

Next steps

Read data from a table (input binding)

close