Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gunakan pengikatan input Tabel Azure untuk membaca tabel di Azure Cosmos DB untuk Tabel atau Penyimpanan Tabel Azure.
Untuk informasi tentang pengaturan dan detail konfigurasi, lihat gambaran umum.
Penting
Artikel ini menggunakan tab untuk mendukung beberapa versi model pemrograman Node.js. Model v4 umumnya tersedia dan dirancang untuk memiliki pengalaman yang lebih fleksibel dan intuitif untuk pengembang JavaScript dan TypeScript. Untuk detail selengkapnya tentang cara kerja model v4, lihat panduan pengembang Node.js Azure Functions. Untuk mempelajari selengkapnya tentang perbedaan antara v3 dan v4, lihat panduan migrasi.
Contoh
Dukungan Go saat ini tidak tersedia untuk pengikatan ini.
Penggunaan pengikatan bergantung pada versi paket ekstensi, dan modalitas C# yang digunakan dalam aplikasi fungsi Anda, yang dapat berupa salah satu hal berikut:
Pustaka kelas proses pekerja terisolasi yang dikompilasi fungsi C# berjalan dalam proses yang diisolasi dari runtime.
Pilih versi untuk melihat contoh mode dan versinya.
Kelas MyTableData berikut mewakili baris data dalam tabel:
public class MyTableData : Azure.Data.Tables.ITableEntity
{
public string Text { get; set; }
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public DateTimeOffset? Timestamp { get; set; }
public ETag ETag { get; set; }
}
Fungsi berikut, yang dimulai oleh pemicu Queue Storage, membaca kunci baris dari antrean dan mendapatkan baris dari tabel input. Ekspresi {queueTrigger} mengikat kunci baris ke metadata pesan yang merupakan string pesan.
[Function("TableFunction")]
[TableOutput("OutputTable", Connection = "AzureWebJobsStorage")]
public static MyTableData Run(
[QueueTrigger("table-items")] string input,
[TableInput("MyTable", "<PartitionKey>", "{queueTrigger}")] MyTableData tableInput,
FunctionContext context)
{
var logger = context.GetLogger("TableFunction");
logger.LogInformation($"PK={tableInput.PartitionKey}, RK={tableInput.RowKey}, Text={tableInput.Text}");
return new MyTableData()
{
PartitionKey = "queue",
RowKey = Guid.NewGuid().ToString(),
Text = $"Output record with rowkey {input} created at {DateTime.Now}"
};
}
Fungsi yang dipicu Antrean berikut memunculkan 5 entitas pertama sebagai IEnumerable<T>, dengan nilai kunci partisi yang ditetapkan sebagai pesan antrean.
[Function("TestFunction")]
public static void Run([QueueTrigger("myqueue", Connection = "AzureWebJobsStorage")] string partition,
[TableInput("inTable", "{queueTrigger}", Take = 5, Filter = "Text eq 'test'",
Connection = "AzureWebJobsStorage")] IEnumerable<MyTableData> tableInputs,
FunctionContext context)
{
var logger = context.GetLogger("TestFunction");
logger.LogInformation(partition);
foreach (MyTableData tableInput in tableInputs)
{
logger.LogInformation($"PK={tableInput.PartitionKey}, RK={tableInput.RowKey}, Text={tableInput.Text}");
}
}
Properti Filter dan Take digunakan untuk membatasi jumlah entitas yang dimunculkan.
Contoh berikut menunjukkan fungsi yang dipicu HTTP yang mengembalikan daftar objek orang yang berada dalam partisi tertentu dalam penyimpanan Table. Dalam contoh tersebut, kunci partisi diekstrak dari rute http, sementara tableName serta koneksi berasal dari pengaturan fungsi.
public class Person {
private String PartitionKey;
private String RowKey;
private String Name;
public String getPartitionKey() { return this.PartitionKey; }
public void setPartitionKey(String key) { this.PartitionKey = key; }
public String getRowKey() { return this.RowKey; }
public void setRowKey(String key) { this.RowKey = key; }
public String getName() { return this.Name; }
public void setName(String name) { this.Name = name; }
}
@FunctionName("getPersonsByPartitionKey")
public Person[] get(
@HttpTrigger(name = "getPersons", methods = {HttpMethod.GET}, authLevel = AuthorizationLevel.FUNCTION, route="persons/{partitionKey}") HttpRequestMessage<Optional<String>> request,
@BindingName("partitionKey") String partitionKey,
@TableInput(name="persons", partitionKey="{partitionKey}", tableName="%MyTableName%", connection="MyConnectionString") Person[] persons,
final ExecutionContext context) {
context.getLogger().info("Got query for person related to persons with partition key: " + partitionKey);
return persons;
}
Anotasi TableInput juga dapat mengekstrak pengikatan dari isi json permintaan, seperti yang ditunjukkan pada contoh berikut.
@FunctionName("GetPersonsByKeysFromRequest")
public HttpResponseMessage get(
@HttpTrigger(name = "getPerson", methods = {HttpMethod.GET}, authLevel = AuthorizationLevel.FUNCTION, route="query") HttpRequestMessage<Optional<String>> request,
@TableInput(name="persons", partitionKey="{partitionKey}", rowKey = "{rowKey}", tableName="%MyTableName%", connection="MyConnectionString") Person person,
final ExecutionContext context) {
if (person == null) {
return request.createResponseBuilder(HttpStatus.NOT_FOUND)
.body("Person not found.")
.build();
}
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(person)
.build();
}
Contoh berikut menggunakan filter untuk mengkueri orang dengan nama tertentu dalam Azure Table, dan membatasi jumlah kemungkinan kecocokan hingga 10 hasil.
@FunctionName("getPersonsByName")
public Person[] get(
@HttpTrigger(name = "getPersons", methods = {HttpMethod.GET}, authLevel = AuthorizationLevel.FUNCTION, route="filter/{name}") HttpRequestMessage<Optional<String>> request,
@BindingName("name") String name,
@TableInput(name="persons", filter="Name eq '{name}'", take = "10", tableName="%MyTableName%", connection="MyConnectionString") Person[] persons,
final ExecutionContext context) {
context.getLogger().info("Got query for person related to persons with name: " + name);
return persons;
}
Contoh berikut menunjukkan pengikatan input tabel yang menggunakan pemicu antrean untuk membaca satu baris tabel. Pengikatan menentukan partitionKey dan rowKey. Nilai rowKey "{queueTrigger}" menunjukkan bahwa tombol baris berasal dari string pesan antrean.
import { app, input, InvocationContext } from '@azure/functions';
const tableInput = input.table({
tableName: 'Person',
partitionKey: 'Test',
rowKey: '{queueTrigger}',
connection: 'MyStorageConnectionAppSetting',
});
interface PersonEntity {
PartitionKey: string;
RowKey: string;
Name: string;
}
export async function storageQueueTrigger1(queueItem: unknown, context: InvocationContext): Promise<void> {
context.log('Node.js queue trigger function processed work item', queueItem);
const person = <PersonEntity>context.extraInputs.get(tableInput);
context.log('Person entity name: ' + person.Name);
}
app.storageQueue('storageQueueTrigger1', {
queueName: 'myqueue-items',
connection: 'MyStorageConnectionAppSetting',
extraInputs: [tableInput],
handler: storageQueueTrigger1,
});
const { app, input } = require('@azure/functions');
const tableInput = input.table({
tableName: 'Person',
partitionKey: 'Test',
rowKey: '{queueTrigger}',
connection: 'MyStorageConnectionAppSetting',
});
app.storageQueue('storageQueueTrigger1', {
queueName: 'myqueue-items',
connection: 'MyStorageConnectionAppSetting',
extraInputs: [tableInput],
handler: (queueItem, context) => {
context.log('Node.js queue trigger function processed work item', queueItem);
const person = context.extraInputs.get(tableInput);
context.log('Person entity name: ' + person.Name);
},
});
Fungsi berikut menggunakan pemicu antrean untuk membaca satu baris tabel sebagai input ke fungsi.
Dalam contoh ini, konfigurasi pengikatan menentukan nilai eksplisit untuk partitionKey tabel dan menggunakan ekspresi untuk meneruskan ke rowKey. Ekspresi rowKey, yaitu {queueTrigger}, menunjukkan bahwa tombol baris berasal dari string pesan antrean.
Konfigurasi pengikatan di function.json:
{
"bindings": [
{
"queueName": "myqueue-items",
"connection": "MyStorageConnectionAppSetting",
"name": "MyQueueItem",
"type": "queueTrigger",
"direction": "in"
},
{
"name": "PersonEntity",
"type": "table",
"tableName": "Person",
"partitionKey": "Test",
"rowKey": "{queueTrigger}",
"connection": "MyStorageConnectionAppSetting",
"direction": "in"
}
],
"disabled": false
}
Kode PowerShell di run.ps1:
param($MyQueueItem, $PersonEntity, $TriggerMetadata)
Write-Host "PowerShell queue trigger function processed work item: $MyQueueItem"
Write-Host "Person entity name: $($PersonEntity.Name)"
Fungsi berikut menggunakan pemicu HTTP untuk membaca satu baris tabel sebagai input ke fungsi.
Dalam contoh ini, konfigurasi pengikatan menentukan nilai eksplisit untuk partitionKey tabel dan menggunakan ekspresi untuk diteruskan ke rowKey. Ekspresi rowKey, {id} menunjukkan bahwa kunci baris berasal dari bagian {id} pada rute dalam permintaan.
import json
import azure.functions as func
app = func.FunctionApp()
@app.route(route="messages/{id}")
@app.table_input(arg_name="messageJSON",
connection="AzureWebJobsStorage",
table_name="messages",
row_key='{id}',
partition_key="message")
def table_in_binding(req: func.HttpRequest, messageJSON):
message = json.loads(messageJSON)
return func.HttpResponse(f"Table row: {messageJSON}")
Dengan pengikatan sederhana ini, Anda tidak dapat menangani kasus secara terprogram ketika tidak ditemukan baris yang memiliki ID kunci baris. Untuk pemilihan data yang lebih halus, gunakan SDK penyimpanan.
Atribut
Pustaka C# proses dalam proses dan terisolasi menggunakan atribut untuk menentukan fungsi. Skrip C# sebagai gantinya menggunakan file konfigurasi function.json seperti yang dijelaskan dalam panduan pembuatan skrip C#.
Pada pustaka kelas C#, TableInputAttribute mendukung properti berikut:
| Properti atribut | Deskripsi |
|---|---|
| Nama Tabel | Nama tabel. |
| PartitionKey | Opsional. Kunci partisi entitas tabel untuk dibaca. |
| RowKey | Opsional. Tombol baris entitas tabel untuk dibaca. |
| Ambil | Opsional. Jumlah maksimum entitas yang akan dibaca ke dalam IEnumerable<T>. Tidak dapat digunakan dengan RowKey. |
| Saringan | Opsional. Ekspresi filter OData untuk entitas yang akan dibaca ke dalam IEnumerable<T>. Tidak dapat digunakan dengan RowKey. |
| Koneksi | Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara tersambung ke layanan tabel. Lihat Koneksi. |
Anotasi
Dalam pustaka runtime fungsi Java, gunakan anotasi @TableInput pada parameter yang nilainya berasal dari penyimpanan Table. Anotasi ini dapat digunakan dengan jenis Java asli, POJO, atau nilai yang dapat diubah ke null menggunakan Optional<T>. Anotasi ini mendukung elemen berikut:
| Elemen | Deskripsi |
|---|---|
| nama | Nama variabel yang mewakili tabel atau entitas dalam kode fungsi. |
| tableName | Nama tabel. |
| partitionKey | Opsional. Kunci partisi entitas tabel untuk dibaca. |
| rowKey | Opsional. Tombol baris entitas tabel untuk dibaca. |
| ambil | Opsional. Jumlah maksimum entitas yang akan dibaca. |
| saringan | Opsional. Ekspresi filter OData untuk input tabel. |
| koneksi | Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara tersambung ke layanan tabel. Lihat Koneksi. |
Konfigurasi
Tabel berikut menjelaskan properti yang bisa Anda atur pada objek yang options diteruskan ke input.table() metode .
| Properti | Deskripsi |
|---|---|
| tableName | Nama tabel. |
| partitionKey | Opsional. Kunci partisi entitas tabel untuk dibaca. |
| rowKey | Opsional. Tombol baris entitas tabel untuk dibaca. Tidak dapat digunakan dengan take atau filter. |
| ambil | Opsional. Jumlah maksimum entitas yang akan dimunculkan. Tidak dapat digunakan dengan rowKey. |
| saringan | Opsional. Ekspresi filter OData agar entitas muncul dari tabel. Tidak dapat digunakan dengan rowKey. |
| koneksi | Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara tersambung ke layanan tabel. Lihat Koneksi. |
Konfigurasi
Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.
| Properti function.json | Deskripsi |
|---|---|
| jenis | Harus diatur ke table. Properti ini diatur secara otomatis saat Anda membuat pengikatan di portal Microsoft Azure. |
| arah | Harus diatur ke in. Properti ini diatur secara otomatis saat Anda membuat pengikatan di portal Microsoft Azure. |
| nama | Nama variabel yang mewakili tabel atau entitas dalam kode fungsi. |
| tableName | Nama tabel. |
| partitionKey | Opsional. Kunci partisi entitas tabel untuk dibaca. |
| rowKey | Opsional. Tombol baris entitas tabel untuk dibaca. Tidak dapat digunakan dengan take atau filter. |
| ambil | Opsional. Jumlah maksimum entitas yang akan dimunculkan. Tidak dapat digunakan dengan rowKey. |
| saringan | Opsional. Ekspresi filter OData agar entitas muncul dari tabel. Tidak dapat digunakan dengan rowKey. |
| koneksi | Nama pengaturan aplikasi atau koleksi pengaturan yang menentukan cara tersambung ke layanan tabel. Lihat Koneksi. |
Ketika Anda mengembangkan secara lokal, tambahkan pengaturan aplikasi di file local.settings.json dalam koleksi Values.
Koneksi
Properti diatur connection ke kunci dalam pengaturan aplikasi yang mengembalikan nilai yang digunakan oleh runtime Functions untuk terhubung ke akun penyimpanan yang digunakan oleh ekstensi. Nilai pengaturan properti koneksi bergantung pada jenis koneksi:
-
Koneksi identitas terkelola: Properti ini
connectiondibagikan<CONNECTION_NAME_PREFIX>oleh sekelompok pengaturan yang bersama-sama menentukan koneksi berbasis identitas ke akun penyimpanan. Untuk informasi selengkapnya, lihat Menentukan koneksi identitas. -
Referensi Key Vault: Pengaturan
connectionproperti mengembalikan referensi Azure Key Vault ke lokasi tempat string koneksi dipelihara secara terpusat. Untuk informasi selengkapnya, lihat Menentukan koneksi Key Vault. -
Referensi Konfigurasi Aplikasi: Pengaturan
connectionproperti mengembalikan referensi Azure App Configuration yang mengembalikan string koneksi atau referensi Key Vault. Untuk informasi selengkapnya, lihat Azure App Configuration di artikel koneksi. -
Connection string: Pengaturan
connectionproperti mengembalikan string koneksi akun penyimpanan aktual. Karena string koneksi berisi kunci rahasia bersama, Anda harus mempertimbangkan untuk menggunakan koneksi identitas terkelola, jika memungkinkan. Untuk informasi selengkapnya, lihat Menentukan koneksi.
Untuk mempelajari selengkapnya tentang koneksi pengikatan, lihat Mengelola koneksi di Azure Functions. Untuk mendapatkan string koneksi, ikuti langkah-langkah yang ditampilkan di Kelola kunci akses akun penyimpanan.
Saat Anda mengatur connection ke kunci atau awalan kunci bernama AzureWebJobsStorage atau ke string kosong, ekstensi pengikatan menggunakan akun penyimpanan host default. Untuk informasi selengkapnya, lihat Mengoptimalkan performa penyimpanan.
Penggunaan
Penggunaan pengikatan tergantung pada versi paket ekstensi, dan modalitas C# yang digunakan dalam aplikasi fungsi Anda, yang dapat berupa salah satu hal berikut:
Pustaka kelas proses pekerja terisolasi yang dikompilasi fungsi C# berjalan dalam proses yang diisolasi dari runtime.
Pilih versi guna melihat detail penggunaan untuk mode dan versi.
Saat bekerja dengan entitas tabel tunggal, pengikatan input Tabel Azure dapat mengikat ke jenis berikut:
| Tipe | Deskripsi |
|---|---|
| Jenis JSON yang dapat diserialisasi yang mengimplementasikan ITableEntity | Fungsi mencoba untuk mendeserialisasi entitas ke dalam jenis objek CLR (POCO) biasa-lama. Jenis harus mengimplementasikan ITableEntity atau memiliki properti string RowKey dan properti string PartitionKey . |
| TableEntity1 | Entitas sebagai jenis seperti kamus. |
Saat bekerja dengan beberapa entitas dari kueri, pengikatan input Tabel Azure dapat mengikat ke jenis berikut:
| Tipe | Deskripsi |
|---|---|
IEnumerable<T> di mana T mengimplementasikan ITableEntity |
Enumerasi entitas yang dikembalikan oleh kueri. Setiap entri mewakili satu entitas. Jenis harus mengimplementasikan T atau memiliki properti string dan properti stringRowKey.PartitionKey |
| TableClient1 | Klien yang tersambung ke tabel. Ini menawarkan kontrol terbanyak untuk memproses tabel dan dapat digunakan untuk menulis ke tabel jika koneksi memiliki izin yang memadai. |
1 Untuk menggunakan jenis ini, Anda perlu mereferensikan Microsoft.Azure.Functions.Worker.Extensions.Tables 1.2.0 atau yang lebih baru dan dependensi umum untuk pengikatan jenis SDK.
Atribut TableInput memberi Anda akses ke baris tabel yang memicu fungsi.
Data diteruskan ke parameter input seperti yang ditentukan oleh kunci name dalam file function.json. Menentukan partitionKey dan rowKey memungkinkan Anda memfilter ke baris tertentu.
Data tabel diteruskan ke fungsi sebagai string JSON. Batalkan serialisasi pesan dengan memanggil json.loads seperti yang ditunjukkan dalam contoh input.
Untuk detail penggunaan tertentu, lihat Contoh.