Pengikatan output Azure Data Explorer untuk Azure Functions (pratinjau)
Saat fungsi berjalan, output Azure Data Explorer yang mengikat menyerap data ke Azure Data Explorer.
Untuk informasi tentang pengaturan dan detail konfigurasi, lihat gambaran umum.
Contoh
Fungsi C# dapat dibuat dengan menggunakan salah satu mode C# berikut:
- Model pekerja terisolasi: Fungsi C# terkompilasi yang berjalan dalam proses pekerja yang terisolasi dari runtime. Proses pekerja terisolasi diperlukan untuk mendukung fungsi C# yang berjalan pada versi LTS dan non-LTS .NET dan .NET Framework.
- Model dalam proses: Fungsi C# yang dikompilasi yang berjalan dalam proses yang sama dengan runtime Functions.
- Skrip C#: Digunakan terutama saat Anda membuat fungsi C# di portal Azure.
Penting
Dukungan akan berakhir untuk model dalam proses pada 10 November 2026. Kami sangat menyarankan Agar Anda memigrasikan aplikasi Anda ke model pekerja yang terisolasi untuk dukungan penuh.
Sampel lainnya untuk pengikatan output Azure Data Explorer tersedia di repositori GitHub.
Bagian ini berisi contoh-contoh berikut:
Contohnya merujuk ke Product
kelas dan tabel database terkait:
public class Product
{
[JsonProperty(nameof(ProductID))]
public long ProductID { get; set; }
[JsonProperty(nameof(Name))]
public string Name { get; set; }
[JsonProperty(nameof(Cost))]
public double Cost { get; set; }
}
.create-merge table Products (ProductID:long, Name:string, Cost:double)
Pemicu HTTP, tulis satu rekaman
Contoh berikut menunjukkan fungsi C# yang menambahkan rekaman ke database. Fungsi ini menggunakan data yang disediakan dalam permintaan HTTP POST sebagai isi JSON.
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Kusto;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples.Common;
namespace Microsoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples
{
public static class AddProduct
{
[Function("AddProduct")]
[KustoOutput(Database: "productsdb", Connection = "KustoConnectionString", TableName = "Products")]
public static async Task<Product> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "addproductuni")]
HttpRequestData req)
{
Product? prod = await req.ReadFromJsonAsync<Product>();
return prod ?? new Product { };
}
}
}
Pemicu HTTP, tulis rekaman dengan pemetaan
Contoh berikut menunjukkan fungsi C# yang menambahkan kumpulan rekaman ke database. Fungsi ini menggunakan pemetaan yang mengubah ke Product
Item
.
Untuk mengubah data dari Product
ke Item
, fungsi menggunakan referensi pemetaan:
.create-merge table Item (ItemID:long, ItemName:string, ItemCost:float)
-- Create a mapping that transforms an Item to a Product
.create-or-alter table Product ingestion json mapping "item_to_product_json" '[{"column":"ProductID","path":"$.ItemID"},{"column":"Name","path":"$.ItemName"},{"column":"Cost","path":"$.ItemCost"}]'
namespace Microsoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples.Common
{
public class Item
{
public long ItemID { get; set; }
public string? ItemName { get; set; }
public double ItemCost { get; set; }
}
}
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Kusto;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples.Common;
namespace Microsoft.Azure.WebJobs.Extensions.Kusto.SamplesOutOfProc.OutputBindingSamples
{
public static class AddProductsWithMapping
{
[Function("AddProductsWithMapping")]
[KustoOutput(Database: "productsdb", Connection = "KustoConnectionString", TableName = "Products", MappingRef = "item_to_product_json")]
public static async Task<Item> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "addproductswithmapping")]
HttpRequestData req)
{
Item? item = await req.ReadFromJsonAsync<Item>();
return item ?? new Item { };
}
}
}
Sampel lainnya untuk pengikatan input Java Azure Data Explorer tersedia di repositori GitHub.
Bagian ini berisi contoh-contoh berikut:
Contoh merujuk ke Products
kelas (dalam file Product.java
terpisah ) dan tabel Products
database yang sesuai (ditentukan sebelumnya):
package com.microsoft.azure.kusto.common;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Product {
@JsonProperty("ProductID")
public long ProductID;
@JsonProperty("Name")
public String Name;
@JsonProperty("Cost")
public double Cost;
public Product() {
}
public Product(long ProductID, String name, double Cost) {
this.ProductID = ProductID;
this.Name = name;
this.Cost = Cost;
}
}
Pemicu HTTP, tulis rekaman ke tabel
Contoh berikut menunjukkan pengikatan output Azure Data Explorer dalam fungsi Java yang menambahkan rekaman produk ke tabel. Fungsi ini menggunakan data yang disediakan dalam permintaan HTTP POST sebagai isi JSON. Fungsi ini mengambil dependensi lain pada pustaka com.fasterxml.jackson.core untuk mengurai isi JSON.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.4.1</version>
</dependency>
package com.microsoft.azure.kusto.outputbindings;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.OutputBinding;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import com.microsoft.azure.functions.kusto.annotation.KustoOutput;
import com.microsoft.azure.kusto.common.Product;
import java.io.IOException;
import java.util.Optional;
import static com.microsoft.azure.kusto.common.Constants.*;
public class AddProduct {
@FunctionName("AddProduct")
public HttpResponseMessage run(@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)
throws IOException {
if (request.getBody().isPresent()) {
String json = request.getBody().get();
ObjectMapper mapper = new ObjectMapper();
Product p = mapper.readValue(json, Product.class);
product.setValue(p);
return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(product)
.build();
} else {
return request.createResponseBuilder(HttpStatus.NO_CONTENT).header("Content-Type", "application/json")
.build();
}
}
}
Pemicu HTTP, tulis ke dua tabel
Contoh berikut menunjukkan pengikatan output Azure Data Explorer dalam fungsi Java yang menambahkan rekaman ke database dalam dua tabel berbeda (Product
dan ProductChangeLog
). Fungsi ini menggunakan data yang disediakan dalam permintaan HTTP POST sebagai isi JSON dan beberapa pengikatan output. Fungsi ini mengambil dependensi lain pada pustaka com.fasterxml.jackson.core untuk mengurai isi JSON.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.4.1</version>
</dependency>
Tabel kedua, ProductsChangeLog
, sesuai dengan definisi berikut:
.create-merge table ProductsChangeLog (ProductID:long, CreatedAt:datetime)
dan kelas Java di ProductsChangeLog.java
:
package com.microsoft.azure.kusto.common;
import com.fasterxml.jackson.annotation.JsonProperty;
public class ProductsChangeLog {
@JsonProperty("ProductID")
public long ProductID;
@JsonProperty("CreatedAt")
public String CreatedAt;
public ProductsChangeLog() {
}
public ProductsChangeLog(long ProductID, String CreatedAt) {
this.ProductID = ProductID;
this.CreatedAt = CreatedAt;
}
}
package com.microsoft.azure.kusto.outputbindings;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.OutputBinding;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import com.microsoft.azure.functions.kusto.annotation.KustoOutput;
import com.microsoft.azure.kusto.common.Product;
import com.microsoft.azure.kusto.common.ProductsChangeLog;
import static com.microsoft.azure.kusto.common.Constants.*;
import java.io.IOException;
import java.time.Clock;
import java.time.Instant;
import java.util.Optional;
public class AddMultiTable {
@FunctionName("AddMultiTable")
public HttpResponseMessage run(@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)
throws IOException {
if (request.getBody().isPresent()) {
String json = request.getBody().get();
ObjectMapper mapper = new ObjectMapper();
Product p = mapper.readValue(json, Product.class);
product.setValue(p);
productChangeLog.setValue(new ProductsChangeLog(p.ProductID, Instant.now(Clock.systemUTC()).toString()));
return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(product)
.build();
} else {
return request.createResponseBuilder(HttpStatus.NO_CONTENT).header("Content-Type", "application/json")
.build();
}
}
}
Sampel lainnya untuk pengikatan output Azure Data Explorer tersedia di repositori GitHub.
Bagian ini berisi contoh-contoh berikut:
Contohnya merujuk ke tabel database.
Contohnya merujuk ke tabel Products
dan ProductsChangeLog
(ditentukan sebelumnya).
Pemicu HTTP, tulis rekaman ke tabel
Contoh berikut menunjukkan pengikatan output Azure Data Explorer dalam file function.json dan fungsi JavaScript yang menambahkan rekaman ke tabel. Fungsi ini menggunakan data yang disediakan dalam permintaan HTTP POST sebagai isi JSON.
Contoh berikut adalah mengikat data dalam file function.json :
{
"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
}
Bagian konfigurasi menjelaskan properti ini.
Cuplikan berikut adalah contoh kode JavaScript:
// Insert the product, which will insert it into the Products table.
module.exports = async function (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
};
}
Pemicu HTTP, tulis ke dua tabel
Contoh berikut menunjukkan pengikatan output Azure Data Explorer dalam file function.json dan fungsi JavaScript yang menambahkan rekaman ke database dalam dua tabel berbeda (Products
dan ProductsChangeLog
). Fungsi ini menggunakan data yang disediakan dalam permintaan HTTP POST sebagai isi JSON dan beberapa pengikatan output.
Tabel kedua, ProductsChangeLog
, sesuai dengan definisi berikut:
.create-merge table ProductsChangeLog (ProductID:long, CreatedAt:datetime)
Cuplikan berikut mengikat data dalam file function.json :
{
"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
}
Bagian konfigurasi menjelaskan properti ini.
Cuplikan berikut adalah contoh kode JavaScript:
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger and Kusto output binding function processed a request.');
context.log(req.body);
if (req.body) {
var changeLog = {ProductID:req.body.ProductID, CreatedAt: new Date().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"
}
}
}
Sampel lainnya untuk pengikatan output Azure Data Explorer tersedia di repositori GitHub.
Bagian ini berisi contoh-contoh berikut:
Contohnya merujuk ke tabel Products
dan ProductsChangeLog
(ditentukan sebelumnya).
Pemicu HTTP, tulis rekaman ke tabel
Contoh berikut menunjukkan pengikatan output Azure Data Explorer dalam file function.json dan fungsi Python yang menambahkan rekaman ke tabel. Fungsi ini menggunakan data yang disediakan dalam permintaan HTTP POST sebagai isi JSON.
Cuplikan berikut mengikat data dalam file function.json :
{
"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"
}
]
}
Bagian konfigurasi menjelaskan properti ini.
Cuplikan berikut adalah sampel kode Python:
import azure.functions as func
from Common.product import Product
def main(req: func.HttpRequest, product: func.Out[str]) -> func.HttpResponse:
body = str(req.get_body(),'UTF-8')
product.set(body)
return func.HttpResponse(
body=body,
status_code=201,
mimetype="application/json"
)
Pemicu HTTP, tulis ke dua tabel
Contoh berikut menunjukkan pengikatan output Azure Data Explorer dalam file function.json dan fungsi JavaScript yang menambahkan rekaman ke database dalam dua tabel berbeda (Products
dan ProductsChangeLog
). Fungsi ini menggunakan data yang disediakan dalam permintaan HTTP POST sebagai isi JSON dan beberapa pengikatan output. Tabel kedua, ProductsChangeLog
, sesuai dengan definisi berikut:
.create-merge table ProductsChangeLog (ProductID:long, CreatedAt:datetime)
Cuplikan berikut mengikat data dalam file function.json :
{
"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"
}
]
}
Bagian konfigurasi menjelaskan properti ini.
Cuplikan berikut adalah sampel kode Python:
import json
from datetime import datetime
import azure.functions as func
from Common.product import Product
def main(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))
return func.HttpResponse(
body=body,
status_code=201,
mimetype="application/json"
)
Atribut
Pustaka C# menggunakan atribut KustoAttribute untuk mendeklarasikan pengikatan Azure Data Explorer pada fungsi , yang memiliki properti berikut.
Properti atribut | Deskripsi |
---|---|
Database | Harus diisi. Database tempat kueri harus dijalankan. |
Connection | Harus diisi. Nama variabel yang menyimpan string koneksi, yang diselesaikan melalui variabel lingkungan atau melalui pengaturan aplikasi fungsi. Default untuk mencari variabel KustoConnectionString . Pada runtime, variabel ini dicari terhadap lingkungan. Dokumentasi tentang string koneksi ada di Kusto string koneksi s. Misalnya: "KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId . |
TableName | Harus diisi. Tabel untuk menyerap data. |
MappingRef | Opsional. Atribut untuk meneruskan ref pemetaan yang sudah ditentukan dalam kluster. |
ManagedServiceIdentity | Opsional. Identitas terkelola dapat digunakan untuk menyambungkan ke Azure Data Explorer. Untuk menggunakan identitas terkelola sistem, gunakan "sistem." Nama identitas lain ditafsirkan sebagai identitas terkelola pengguna. |
DataFormat | Opsional. Format data default adalah multijson/json . Ini dapat diatur ke format teks yang didukung dalam datasource enumerasi format. Sampel divalidasi dan disediakan untuk format CSV dan JSON. |
Anotasi
Pustaka runtime fungsi Java menggunakan @KustoInput
anotasi (com.microsoft.azure.functions.kusto.annotation.KustoOutput
).
Elemen | Deskripsi |
---|---|
nama | Harus diisi. Nama variabel yang mewakili kueri dalam kode fungsi. |
database | Harus diisi. Database tempat kueri harus dijalankan. |
koneksi | Harus diisi. Nama variabel yang menyimpan string koneksi, yang diselesaikan melalui variabel lingkungan atau melalui pengaturan aplikasi fungsi. Default untuk mencari variabel KustoConnectionString . Pada runtime, variabel ini dicari terhadap lingkungan. Dokumentasi tentang string koneksi ada di Kusto string koneksi s. Misalnya: "KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId . |
tableName | Harus diisi. Tabel untuk menyerap data. |
mappingRef | Opsional. Atribut untuk meneruskan ref pemetaan yang sudah ditentukan dalam kluster. |
dataFormat | Opsional. Format data default adalah multijson/json . Ini dapat diatur ke format teks yang didukung dalam datasource enumerasi format. Sampel divalidasi dan disediakan untuk format CSV dan JSON. |
managedServiceIdentity | Identitas terkelola dapat digunakan untuk menyambungkan ke Azure Data Explorer. Untuk menggunakan identitas terkelola sistem, gunakan "sistem." Nama identitas lain ditafsirkan sebagai identitas terkelola pengguna. |
Konfigurasi
Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.
Properti function.json | Deskripsi |
---|---|
jenis | Harus diisi. Harus diatur ke kusto . |
direction | Harus diisi. Harus diatur ke out . |
nama | Harus diisi. Nama variabel yang mewakili kueri dalam kode fungsi. |
database | Harus diisi. Database tempat kueri harus dijalankan. |
koneksi | Harus diisi. Nama variabel yang menyimpan string koneksi, diselesaikan melalui variabel lingkungan atau melalui pengaturan aplikasi fungsi. Default untuk mencari variabel KustoConnectionString . Pada runtime, variabel ini dicari terhadap lingkungan. Dokumentasi tentang string koneksi ada di Kusto string koneksi s. Misalnya: "KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId . |
tableName | Harus diisi. Tabel untuk menyerap data. |
mappingRef | Opsional. Atribut untuk meneruskan ref pemetaan yang sudah ditentukan dalam kluster. |
dataFormat | Opsional. Format data default adalah multijson/json . Ini dapat diatur ke format teks yang didukung dalam datasource enumerasi format. Sampel divalidasi dan disediakan untuk format CSV dan JSON. |
managedServiceIdentity | Identitas terkelola dapat digunakan untuk menyambungkan ke Azure Data Explorer. Untuk menggunakan identitas terkelola sistem, gunakan "sistem." Nama identitas lain ditafsirkan sebagai identitas terkelola pengguna. |
Ketika Anda mengembangkan secara lokal, tambahkan pengaturan aplikasi di file local.settings.json dalam koleksi Values
.
Penggunaan
Konstruktor atribut mengambil database dan atribut TableName
, , MappingRef
dan dan DataFormat
nama pengaturan koneksi. Perintah KQL dapat berupa pernyataan KQL atau fungsi KQL. Nama pengaturan string koneksi sesuai dengan pengaturan aplikasi (untuk local.settings.json
pengembangan lokal) yang berisi string koneksi Kusto. Misalnya:"KustoConnectionString": "Data Source=https://your_cluster.kusto.windows.net;Database=your_Database;Fed=True;AppClientId=your_AppId;AppKey=your_AppKey;Authority Id=your_TenantId
. Kueri yang dijalankan oleh pengikatan input diparameterkan. Nilai yang disediakan dalam parameter KQL digunakan pada runtime.