Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik de Azure Tables-invoerbinding om een tabel te lezen in Azure Cosmos DB voor Table of Azure-tabelopslag.
Zie het overzicht voor informatie over het instellen en configureren van details.
Belangrijk
In dit artikel worden tabbladen gebruikt ter ondersteuning van meerdere versies van het Node.js programmeermodel. Het v4-model is algemeen beschikbaar en is ontworpen voor een flexibelere en intuïtievere ervaring voor JavaScript- en TypeScript-ontwikkelaars. Raadpleeg de ontwikkelaarshandleiding voor Azure Functions Node.js voor meer informatie over hoe het v4-model werkt. Raadpleeg de migratiehandleiding voor meer informatie over de verschillen tussen v3 en v4.
Opmerking
Go-ondersteuning is momenteel niet beschikbaar voor deze binding.
Het gebruik van de binding is afhankelijk van de versie van het extensiepakket en de C#-modaliteit die wordt gebruikt in uw functie-app. Dit kan een van de volgende zijn:
Een geïsoleerde werkprocesklassebibliotheek gecompileerde C#-functie wordt uitgevoerd in een proces dat is geïsoleerd van de runtime.
Kies een versie om voorbeelden voor de modus en versie weer te geven.
De volgende MyTableData klasse vertegenwoordigt een rij met gegevens in de 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; }
}
De volgende functie, die wordt gestart door een Queue Storage-trigger, leest een rijsleutel uit de wachtrij, die wordt gebruikt om de rij op te halen uit de invoertabel. De expressie {queueTrigger} verbindt de rijsleutel met de metagegevens van het bericht, de berichttekenreeks.
[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}"
};
}
De volgende door wachtrij geactiveerde functie retourneert de eerste vijf entiteiten als een IEnumerable<T>, waarbij de waarde van de partitiesleutel is ingesteld als het wachtrijbericht.
[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}");
}
}
De Filter en Take eigenschappen worden gebruikt om het aantal geretourneerde entiteiten te beperken.
In het volgende voorbeeld ziet u een door HTTP geactiveerde functie die een lijst met persoonsobjecten retourneert die zich in een opgegeven partitie in Table Storage bevinden. In het voorbeeld wordt de partitiesleutel uit de HTTP-route geëxtraheerd en zijn de tableName en de verbinding afkomstig van de functie-instellingen.
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;
}
De aantekening van TableInput kan ook de bindingen uit de json-hoofdtekst van de aanvraag extraheren, zoals in het volgende voorbeeld wordt weergegeven.
@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();
}
In het volgende voorbeeld wordt een filter gebruikt om een query uit te voeren op personen met een specifieke naam in een Azure-tabel en wordt het aantal mogelijke overeenkomsten beperkt tot 10 resultaten.
@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;
}
In het volgende voorbeeld ziet u een tabelinvoerbinding die gebruikmaakt van een wachtrijtrigger om één tabelrij te lezen. De binding geeft een partitionKey en een rowKey. De rowKey waarde {queueTrigger} geeft aan dat de rijsleutel afkomstig is van de tekenreeks voor wachtrijberichten.
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);
},
});
De volgende functie gebruikt een wachtrijtrigger om één tabelrij als invoer voor een functie te lezen.
In dit voorbeeld geeft de bindingsconfiguratie een expliciete waarde op voor de tabel partitionKey en gebruikt een expressie die moet worden doorgegeven aan de rowKeytabel. De rowKey expressie geeft {queueTrigger}aan dat de rijsleutel afkomstig is van de tekenreeks van het wachtrijbericht.
Bindingsconfiguratie in 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
}
PowerShell-code in run.ps1:
param($MyQueueItem, $PersonEntity, $TriggerMetadata)
Write-Host "PowerShell queue trigger function processed work item: $MyQueueItem"
Write-Host "Person entity name: $($PersonEntity.Name)"
De volgende functie gebruikt een HTTP-trigger om één tabelrij als invoer voor een functie te lezen.
In dit voorbeeld geeft de bindingsconfiguratie een expliciete waarde op voor de tabel partitionKey en wordt een expressie gebruikt die moet worden doorgegeven aan de rowKeytabel. De rowKey expressie {id} geeft aan dat de rijsleutel afkomstig is van het {id} deel van de route in de aanvraag.
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}")
Met deze eenvoudige binding kunt u niet programmatisch omgaan met een geval waarin geen rij met een rijsleutel-id wordt gevonden. Gebruik de opslag-SDK voor meer verfijnde gegevensselectie.
Kenmerken
Zowel in-processals geïsoleerde werkproces C#-bibliotheken gebruiken kenmerken om de functie te definiëren. C#-script maakt in plaats daarvan gebruik van een function.json configuratiebestand, zoals beschreven in de handleiding voor C#-scripts.
In C#-klassebibliotheken ondersteunt de TableInputAttribute volgende eigenschappen:
| Kenmerkeigenschap | Beschrijving |
|---|---|
| TableName- | De naam van de tabel. |
| PartitionKey | Optioneel. De partitiesleutel van de tabelentiteit die moet worden gelezen. |
| RowKey | Optioneel. De rijsleutel van de tabelentiteit die moet worden gelezen. |
| Nemen | Optioneel. Het maximum aantal entiteiten dat moet worden ingelezen in een IEnumerable<T>. Kan niet worden gebruikt met RowKey. |
| Filteren | Optioneel. Een OData-filterexpressie voor entiteiten die moeten worden ingelezen in een IEnumerable<T>. Kan niet worden gebruikt met RowKey. |
| Verbinding | De naam van een app-instelling of instellingsverzameling die aangeeft hoe verbinding moet worden gemaakt met de tabelservice. Zie verbindingen. |
Aantekeningen
Gebruik in de Java Functions Runtime-bibliotheek de @TableInput aantekening voor parameters waarvan de waarde afkomstig is uit Table Storage. Deze aantekening kan worden gebruikt met systeemeigen Java-typen, POJO's of nullbare waarden met Optional<T>. Deze aantekening ondersteunt de volgende elementen:
| Onderdeel | Beschrijving |
|---|---|
| naam | De naam van de variabele die de tabel of entiteit in functiecode vertegenwoordigt. |
| tableName | De naam van de tabel. |
| partitionKey | Optioneel. De partitiesleutel van de tabelentiteit die moet worden gelezen. |
| rowKey | Optioneel. De rijsleutel van de tabelentiteit die moet worden gelezen. |
| nemen | Optioneel. Het maximum aantal entiteiten dat moet worden gelezen. |
| filter | Optioneel. Een OData-filterexpressie voor tabelinvoer. |
| verbinding | De naam van een app-instelling of instellingsverzameling die aangeeft hoe verbinding moet worden gemaakt met de tabelservice. Zie verbindingen. |
Configuratie
In de volgende tabel worden de eigenschappen uitgelegd die u kunt instellen voor het options object dat aan de input.table() methode is doorgegeven.
| Eigenschappen | Beschrijving |
|---|---|
| tableName | De naam van de tabel. |
| partitionKey | Optioneel. De partitiesleutel van de tabelentiteit die moet worden gelezen. |
| rowKey | Optioneel. De rijsleutel van de tabelentiteit die moet worden gelezen. Kan niet worden gebruikt met take of filter. |
| nemen | Optioneel. Het maximum aantal entiteiten dat moet worden geretourneerd. Kan niet worden gebruikt met rowKey. |
| filter | Optioneel. Een OData-filterexpressie voor de entiteiten die moeten worden geretourneerd uit de tabel. Kan niet worden gebruikt met rowKey. |
| verbinding | De naam van een app-instelling of instellingsverzameling die aangeeft hoe verbinding moet worden gemaakt met de tabelservice. Zie verbindingen. |
Configuratie
In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.
| function.json-eigenschap | Beschrijving |
|---|---|
| soort | Moet worden ingesteld op table. Deze eigenschap wordt automatisch ingesteld wanneer u de binding maakt in Azure Portal. |
| richting | Moet worden ingesteld op in. Deze eigenschap wordt automatisch ingesteld wanneer u de binding maakt in Azure Portal. |
| naam | De naam van de variabele die de tabel of entiteit in functiecode vertegenwoordigt. |
| tableName | De naam van de tabel. |
| partitionKey | Optioneel. De partitiesleutel van de tabelentiteit die moet worden gelezen. |
| rowKey | Optioneel. De rijsleutel van de tabelentiteit die moet worden gelezen. Kan niet worden gebruikt met take of filter. |
| nemen | Optioneel. Het maximum aantal entiteiten dat moet worden geretourneerd. Kan niet worden gebruikt met rowKey. |
| filter | Optioneel. Een OData-filterexpressie voor de entiteiten die moeten worden geretourneerd uit de tabel. Kan niet worden gebruikt met rowKey. |
| verbinding | De naam van een app-instelling of instellingsverzameling die aangeeft hoe verbinding moet worden gemaakt met de tabelservice. Zie verbindingen. |
Wanneer u lokaal ontwikkelt, voegt u uw toepassingsinstellingen toe aan het local.settings.json-bestand in de Values verzameling.
Connecties
De connection eigenschap wordt ingesteld op een sleutel in applicatieinstellingen die een waarde teruggeeft die door de Functions-runtime wordt gebruikt om verbinding te maken met het opslagaccount dat door de extensie wordt gebruikt. De waarde van de connectie-eigenschapsinstelling hangt af van het type verbinding:
-
Beheerde identiteitsverbinding: De
connectioneigenschap wordt<CONNECTION_NAME_PREFIX>gedeeld door een groep instellingen die samen een identiteitsgebaseerde verbinding met het opslagaccount definiëren. Voor meer informatie, zie Definieer identiteitsverbindingen. -
Key Vault-referentie: De
connectionproperty-instelling geeft een Azure Key Vault-referentie terug naar de locatie waar de verbindingsreeks centraal wordt onderhouden. Voor meer informatie, zie Define Key Vault-verbindingen. -
App Configuration referentie: De
connectionproperty-instelling geeft een Azure App Configuration-referentie terug die een verbindingsreeks of een Key Vault-referentie teruggeeft. Voor meer informatie, zie Azure App Configuration in het artikel over verbindingen. -
Connection string: De
connectionproperty-instelling geeft de daadwerkelijke storage account verbindingsreeks terug. Omdat de verbindingsreeks gedeelde geheime sleutels bevat, zou je moeten overwegen een managed identity-verbinding te gebruiken, waar mogelijk. Voor meer informatie, zie Verbindingen definiëren.
Voor meer informatie over bindingsverbindingen, zie Verbinding beheren in Azure Functions. Als u een verbindingsreeks wilt verkrijgen, volgt u de stappen in Toegangssleutels voor opslagaccounts.
Wanneer je een sleutel of sleutelprefix met de naam connection of een lege string insteltAzureWebJobsStorage, gebruikt de binding-extensie het standaard host-opslagaccount. Voor meer informatie, zie Optimaliseer opslagprestaties.
Gebruik
Het gebruik van de binding is afhankelijk van de versie van het extensiepakket en de C#-modaliteit die wordt gebruikt in uw functie-app. Dit kan een van de volgende zijn:
Een geïsoleerde werkprocesklassebibliotheek gecompileerde C#-functie wordt uitgevoerd in een proces dat is geïsoleerd van de runtime.
Kies een versie om gebruiksgegevens voor de modus en versie te bekijken.
Wanneer u met één tabelentiteit werkt, kan de Azure Tables-invoerbinding worden gekoppeld aan de volgende typen:
| Typologie | Beschrijving |
|---|---|
| Een serialiseerbaar JSON-type dat ITableEntity implementeert | Functions probeert de entiteit te deserialiseren in een niet-oud CLR-objecttype (POCO). Het type moet ITableEntity implementeren of een tekenreekseigenschap RowKey en een tekenreekseigenschap PartitionKey hebben. |
| TableEntity1 | De entiteit als een woordenlijstachtig type. |
Wanneer u met meerdere entiteiten vanuit een query werkt, kan de Azure Tables-invoerbinding worden gekoppeld aan de volgende typen:
| Typologie | Beschrijving |
|---|---|
IEnumerable<T>waarbij T ITableEntity wordt geïmplementeerd |
Een opsomming van entiteiten die door de query worden geretourneerd. Elke vermelding vertegenwoordigt één entiteit. Het type T moet ITableEntity implementeren of een tekenreekseigenschap RowKey en een tekenreekseigenschap PartitionKey hebben. |
| TableClient1 | Een client die is verbonden met de tabel. Dit biedt het meeste beheer voor het verwerken van de tabel en kan worden gebruikt om ernaar te schrijven als de verbinding voldoende machtigingen heeft. |
1 Als u deze typen wilt gebruiken, moet u verwijzen naar Microsoft.Azure.Functions.Worker.Extensions.Tables 1.2.0 of hoger en de algemene afhankelijkheden voor SDK-typebindingen.
Het kenmerk TableInput geeft u toegang tot de tabelrij die de functie heeft geactiveerd.
Gegevens worden doorgegeven aan de invoerparameter zoals opgegeven door de name sleutel in het function.json-bestand . Hiermee geeft u De partitionKey op en rowKey kunt u filteren op specifieke records.
Tabelgegevens worden als een JSON-tekenreeks doorgegeven aan de functie. De serialiseer het bericht door aan te roepen json.loads zoals wordt weergegeven in het invoervoorbeeld.
Zie Voorbeeld voor specifieke gebruiksgegevens.