Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vstupní vazbu tabulek Azure slouží ke čtení tabulky ve službě Azure Cosmos DB pro tabulky nebo Azure Table Storage.
Informace o nastavení a konfiguraci najdete v přehledu.
Důležité
Tento článek používá karty pro podporu více verzí programovacího modelu Node.js. Model v4 je obecně dostupný a je navržený tak, aby měl flexibilnější a intuitivnější prostředí pro vývojáře v JavaScriptu a TypeScriptu. Další podrobnosti o tom, jak model v4 funguje, najdete v příručce pro vývojáře služby Azure Functions Node.js. Další informace o rozdílech mezi v3 a v4 najdete v průvodci migrací.
Příklad
Podpora Go pro toto vázání momentálně není dostupná.
Použití vazby závisí na verzi balíčku rozšíření a režimu jazyka C# používaném ve vaší aplikaci funkcí, což může být jedna z následujících možností:
Kompilovaná funkce C# v izolované knihovně tříd pracovních procesů běží v procesu izolovaném od modulu runtime.
Zvolte verzi, abyste viděli příklady pro režim a verzi.
Následující MyTableData třída představuje řádek dat v tabulce:
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; }
}
Následující funkce, která je spuštěna triggerem Queue Storage, čte klíč řádku z fronty, která slouží k získání řádku ze vstupní tabulky. Výraz {queueTrigger} sváže klíč řádku s metadaty zprávy, což je řetězec zprávy.
[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}"
};
}
Následující funkce aktivovaná frontou vrátí prvních 5 entit jako hodnotu IEnumerable<T>klíče oddílu nastavenou jako zprávu fronty.
[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}");
}
}
Filter Vlastnosti Take se používají k omezení počtu vrácených entit.
Následující příklad ukazuje funkci aktivovanou protokolem HTTP, která vrátí seznam objektů osob, které jsou v zadaném oddílu v Table Storage. V příkladu se klíč oddílu extrahuje ze trasy HTTP a název tabulky a připojení jsou z nastavení funkce.
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;
}
Poznámka TableInput může také extrahovat vazby z textu json požadavku, jak ukazuje následující příklad.
@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();
}
Následující příklad používá filtr k dotazování na osoby s konkrétním názvem v tabulce Azure a omezuje počet možných shod na 10 výsledků.
@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;
}
Následující příklad ukazuje vstupní vazbu tabulky, která používá trigger fronty ke čtení jednoho řádku tabulky. Vazba určuje a partitionKeyrowKey. Hodnota rowKey {queueTrigger} označuje, že klíč řádku pochází z řetězce zprávy fronty.
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);
},
});
Následující funkce používá trigger fronty ke čtení jednoho řádku tabulky jako vstupu do funkce.
V tomto příkladu konfigurace vazby určuje explicitní hodnotu tabulky partitionKey a používá výraz k předání do objektu rowKey. Výraz rowKey označuje, {queueTrigger}že klíč řádku pochází z řetězce zprávy fronty.
Konfigurace vazby v 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
}
Kód PowerShellu v souboru run.ps1:
param($MyQueueItem, $PersonEntity, $TriggerMetadata)
Write-Host "PowerShell queue trigger function processed work item: $MyQueueItem"
Write-Host "Person entity name: $($PersonEntity.Name)"
Následující funkce používá trigger HTTP ke čtení jednoho řádku tabulky jako vstupu do funkce.
V tomto příkladu konfigurace vazby určuje explicitní hodnotu tabulky partitionKey a používá výraz k předání do objektu rowKey. Výraz rowKey označuje, {id} že klíč řádku pochází z {id} části trasy v požadavku.
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}")
Pomocí této jednoduché vazby nemůžete programově zpracovat případ, ve kterém se nenajde žádný řádek s ID klíče řádku. K podrobnějšímu výběru dat použijte sadu SDK úložiště.
Atributy
Knihovny C# v procesu i izolovaného pracovního procesu používají atributy k definování funkce. Skript jazyka C# místo toho používá konfigurační soubor function.json, jak je popsáno v průvodci skriptováním jazyka C#.
V knihovnách tříd jazyka TableInputAttribute C# podporuje následující vlastnosti:
| Vlastnost atributu | Popis |
|---|---|
| Název tabulky | Název tabulky. |
| PartitionKey | Nepovinné. Klíč oddílu entity tabulky, který se má přečíst. |
| RowKey | Nepovinné. Klíč řádku entity tabulky, který se má přečíst. |
| Vzít | Nepovinné. Maximální počet entit, které se mají načíst do objektu IEnumerable<T>. Nelze použít s RowKey. |
| Filtr | Nepovinné. Výraz filtru OData pro entity, které se mají číst do objektu IEnumerable<T>. Nelze použít s RowKey. |
| Připojení | Název nastavení aplikace nebo nastavení kolekce, která určuje, jak se připojit ke službě Table Service. Viz Připojení. |
Poznámky
V knihovně modulu runtime funkcí Java použijte poznámku @TableInput k parametrům, jejichž hodnota pochází z table storage. Tuto poznámku lze použít s nativními typy Javy, POJOs nebo hodnotami null s použitím Optional<T>. Tato poznámka podporuje následující prvky:
| Element (Prvek) | Popis |
|---|---|
| Jméno | Název proměnné, která představuje tabulku nebo entitu v kódu funkce. |
| tableName | Název tabulky. |
| partitionKey | Nepovinné. Klíč oddílu entity tabulky, který se má přečíst. |
| rowKey | Nepovinné. Klíč řádku entity tabulky, který se má přečíst. |
| vzít | Nepovinné. Maximální počet entit, které se mají přečíst. |
| filtr | Nepovinné. Výraz filtru OData pro vstup tabulky. |
| připojení | Název nastavení aplikace nebo nastavení kolekce, která určuje, jak se připojit ke službě Table Service. Viz Připojení. |
Konfigurace
Následující tabulka vysvětluje vlastnosti, které můžete nastavit u objektu předaného options metodě input.table() .
| Vlastnost | Popis |
|---|---|
| tableName | Název tabulky. |
| partitionKey | Nepovinné. Klíč oddílu entity tabulky, který se má přečíst. |
| rowKey | Nepovinné. Klíč řádku entity tabulky, který se má přečíst. Nelze použít s take nebo filter. |
| vzít | Nepovinné. Maximální počet entit, které se mají vrátit. Nelze použít s rowKey. |
| filtr | Nepovinné. Výraz filtru OData pro entity, které se mají vrátit z tabulky. Nelze použít s rowKey. |
| připojení | Název nastavení aplikace nebo nastavení kolekce, která určuje, jak se připojit ke službě Table Service. Viz Připojení. |
Konfigurace
Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json .
| vlastnost function.json | Popis |
|---|---|
| typ | Musí být nastavena na tablehodnotu . Tato vlastnost se nastaví automaticky při vytváření vazby na webu Azure Portal. |
| směr | Musí být nastavena na inhodnotu . Tato vlastnost se nastaví automaticky při vytváření vazby na webu Azure Portal. |
| Jméno | Název proměnné, která představuje tabulku nebo entitu v kódu funkce. |
| tableName | Název tabulky. |
| partitionKey | Nepovinné. Klíč oddílu entity tabulky, který se má přečíst. |
| rowKey | Nepovinné. Klíč řádku entity tabulky, který se má přečíst. Nelze použít s take nebo filter. |
| vzít | Nepovinné. Maximální počet entit, které se mají vrátit. Nelze použít s rowKey. |
| filtr | Nepovinné. Výraz filtru OData pro entity, které se mají vrátit z tabulky. Nelze použít s rowKey. |
| připojení | Název nastavení aplikace nebo nastavení kolekce, která určuje, jak se připojit ke službě Table Service. Viz Připojení. |
Při místním vývoji přidejte nastavení aplikace do souboru local.settings.json v kolekci Values .
Propojení
Vlastnost connection je nastavena na klíč v nastavení aplikace, který vrací hodnotu používanou runtime Functions k připojení k úložnému účtu používanému rozšířením. Hodnota nastavení vlastnosti spojení závisí na typu spojení:
-
Spravované připojení identity: Vlastnost
connectionje sdílená<CONNECTION_NAME_PREFIX>skupinou nastavení, která společně definují připojení založené na identitě k úložnému účtu. Pro více informací viz Definujte identity connections. -
Key Vault reference: Nastavení
connectionvlastnosti vrací Azure Key Vault reference na místo, kde je připojovací řetězec centrálně udržován. Pro více informací viz Definujte spojení Key Vault. -
App Configuration reference: Nastavení
connectionvlastnosti vrací referenci Azure App Configuration, která vrací připojovací řetězec nebo Key Vault reference. Pro více informací viz Azure App Configuration v článku o připojeních. -
Connection string: Nastavení
connectionvlastnosti vrací skutečný storage account připojovací řetězec. Protože připojovací řetězec obsahuje sdílené tajné klíče, měli byste zvážit použití spravovaného identity connection, pokud je to možné. Pro více informací viz Definujte souvislosti.
Pro více informací o vazbách spojení viz Správa spojení v Azure Functions. Pokud chcete získat připojovací řetězec, postupujte podle kroků uvedených v tématu Správa klíčů k účtu úložiště.
Když nastavíte connection klíč nebo prefix klíče jménem AzureWebJobsStorage nebo prázdný řetězec, rozšíření vázání používá výchozí účet hostitelského úložiště. Pro více informací viz Optimalizace výkonu úložiště.
Využití
Použití vazby závisí na verzi balíčku rozšíření a na způsobu použití jazyka C# ve vaší aplikaci funkcí, což může být jedna z následujících možností:
Kompilovaná funkce C# v izolované knihovně tříd pracovních procesů běží v procesu izolovaném od modulu runtime.
Zvolte verzi, abyste zobrazili podrobnosti o využití pro režim a verzi.
Při práci s jednou entitou tabulky může vstupní vazba Azure Tables svázat s následujícími typy:
| Typ | Popis |
|---|---|
| Serializovatelný typ JSON, který implementuje ITableEntity | Funkce se pokusí deserializovat entitu do prostého typu objektu CLR (POCO). Typ musí implementovat ITableEntity nebo musí mít řetězcovou RowKey vlastnost a řetězcovou PartitionKey vlastnost. |
| TableEntity1 | Entita jako typ podobný slovníku. |
Při práci s více entitami z dotazu může vstupní vazba Tabulek Azure svázat s následujícími typy:
| Typ | Popis |
|---|---|
IEnumerable<T> kde T implementuje ITableEntity |
Výčet entit vrácených dotazem. Každá položka představuje jednu entitu. Typ musí implementovat T nebo musí mít řetězcovou vlastnost a řetězcovou RowKeyPartitionKey vlastnost. |
| TableClient1 | Klient připojený k tabulce. To nabízí největší kontrolu nad zpracováním tabulky a lze ji použít k zápisu, pokud má připojení dostatečná oprávnění. |
1 Pokud chcete použít tyto typy, musíte odkazovat na Microsoft.Azure.Functions.Worker.Extensions.Tables 1.2.0 nebo novější a běžné závislosti pro vazby typu sady SDK.
Atribut TableInput poskytuje přístup k řádku tabulky, který funkci aktivoval.
Data se předávají vstupnímu parametru zadanému name klíčem v souboru function.json . Určení typu The partitionKey a rowKey umožňuje filtrovat podle konkrétních záznamů.
Data tabulky se funkci předávají jako řetězec JSON. De-serializace zprávy voláním json.loads , jak je znázorněno ve vstupním příkladu.
Konkrétní podrobnosti o využití najdete v příkladu.