Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Usare un'associazione di output tabelle di Azure per scrivere entità in una tabella in Azure Cosmos DB per Tabelle o Archiviazione tabelle di Azure.
Per informazioni sull'installazione e sulla configurazione, vedere la panoramica
Nota
Questa associazione di output supporta solo la creazione di nuove entità in una tabella. Se è necessario aggiornare un'entità esistente dal codice della funzione, usare invece direttamente Azure Tables SDK.
Importante
Questo articolo usa schede per supportare le versioni diverse del modello di programmazione Node.js. Il modello v4 è disponibile a livello generale ed è progettato per offrire un'esperienza più flessibile e intuitiva per gli sviluppatori JavaScript e TypeScript. Per altre informazioni sul funzionamento del modello v4, vedere la guida per gli sviluppatori di Node.js per Funzioni di Azure. Altre informazioni sulle differenze tra i modelli v3 e v4 sono disponibili nella guida alla migrazione.
Esempio
Il supporto Go non è attualmente disponibile per questo binding.
È possibile creare una funzione C# usando una delle modalità C# seguenti:
-
Modello di lavoro isolato: funzione C# compilata eseguita in un processo di lavoro isolato dal runtime. Il processo di lavoro isolato è necessario per supportare le funzioni C# in esecuzione in LTS e versioni non LTS .NET e .NET Framework. Le estensioni per le funzioni del processo di lavoro isolato usano
Microsoft.Azure.Functions.Worker.Extensions.*spazi dei nomi. -
Modello in-process: funzione C# compilata eseguita nello stesso processo del runtime di Funzioni. In una variante di questo modello, le funzioni possono essere eseguite usando script C#, che è supportato principalmente per la modifica del portale C#. Le estensioni per le funzioni in-process usano
Microsoft.Azure.WebJobs.Extensions.*spazi dei nomi.
Importante
Il supporto terminerà per il modello in-process il 10 novembre 2026. È consigliabile eseguire la migrazione delle app al modello di lavoro isolato per il supporto completo.
La classe seguente MyTableData rappresenta una riga di dati nella tabella:
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; }
}
La funzione seguente, avviata da un trigger di archiviazione code, scrive una nuova MyDataTable entità in una tabella denominata OutputTable.
[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}"
};
}
L'esempio seguente illustra una funzione Java che usa un trigger HTTP per scrivere una singola riga di tabella.
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; }
}
public class AddPerson {
@FunctionName("addPerson")
public HttpResponseMessage get(
@HttpTrigger(name = "postPerson", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION, route="persons/{partitionKey}/{rowKey}") HttpRequestMessage<Optional<Person>> request,
@BindingName("partitionKey") String partitionKey,
@BindingName("rowKey") String rowKey,
@TableOutput(name="person", partitionKey="{partitionKey}", rowKey = "{rowKey}", tableName="%MyTableName%", connection="MyConnectionString") OutputBinding<Person> person,
final ExecutionContext context) {
Person outPerson = new Person();
outPerson.setPartitionKey(partitionKey);
outPerson.setRowKey(rowKey);
outPerson.setName(request.getBody().get().getName());
person.setValue(outPerson);
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(outPerson)
.build();
}
}
L'esempio seguente illustra una funzione Java che usa un trigger HTTP per scrivere più righe di tabella.
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; }
}
public class AddPersons {
@FunctionName("addPersons")
public HttpResponseMessage get(
@HttpTrigger(name = "postPersons", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION, route="persons/") HttpRequestMessage<Optional<Person[]>> request,
@TableOutput(name="person", tableName="%MyTableName%", connection="MyConnectionString") OutputBinding<Person[]> persons,
final ExecutionContext context) {
persons.setValue(request.getBody().get());
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(request.getBody().get())
.build();
}
}
Nell'esempio seguente viene illustrata un'associazione di output di tabella che scrive più entità di tabella.
import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';
const tableOutput = output.table({
tableName: 'Person',
connection: 'MyStorageConnectionAppSetting',
});
interface PersonEntity {
PartitionKey: string;
RowKey: string;
Name: string;
}
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
const rows: PersonEntity[] = [];
for (let i = 1; i < 10; i++) {
rows.push({
PartitionKey: 'Test',
RowKey: i.toString(),
Name: `Name ${i}`,
});
}
context.extraOutputs.set(tableOutput, rows);
return { status: 201 };
}
app.http('httpTrigger1', {
methods: ['POST'],
authLevel: 'anonymous',
extraOutputs: [tableOutput],
handler: httpTrigger1,
});
const { app, output } = require('@azure/functions');
const tableOutput = output.table({
tableName: 'Person',
connection: 'MyStorageConnectionAppSetting',
});
app.http('httpTrigger1', {
methods: ['POST'],
authLevel: 'anonymous',
extraOutputs: [tableOutput],
handler: async (request, context) => {
const rows = [];
for (let i = 1; i < 10; i++) {
rows.push({
PartitionKey: 'Test',
RowKey: i.toString(),
Name: `Name ${i}`,
});
}
context.extraOutputs.set(tableOutput, rows);
return { status: 201 };
},
});
Nell'esempio seguente viene illustrato come scrivere più entità in una tabella da una funzione.
Configurazione dell'associazione in function.json:
{
"bindings": [
{
"name": "InputData",
"type": "manualTrigger",
"direction": "in"
},
{
"tableName": "Person",
"connection": "MyStorageConnectionAppSetting",
"name": "TableBinding",
"type": "table",
"direction": "out"
}
],
"disabled": false
}
Codice di PowerShell in run.ps1:
param($InputData, $TriggerMetadata)
foreach ($i in 1..10) {
Push-OutputBinding -Name TableBinding -Value @{
PartitionKey = 'Test'
RowKey = "$i"
Name = "Name $i"
}
}
Nell'esempio seguente viene illustrato come usare l'associazione di output dell'archiviazione tabelle. Configurare l'associazione nel function.json assegnando valori a table, name, e tableName:partitionKeyconnection
La funzione seguente genera un'interfaccia utente univoca per il rowKey valore e salva in modo permanente il messaggio nell'archiviazione tabelle.
import logging
import uuid
import json
import azure.functions as func
app = func.FunctionApp()
@app.route(route="table_out_binding")
@app.table_output(arg_name="message",
connection="AzureWebJobsStorage",
table_name="messages")
def table_out_binding(req: func.HttpRequest, message: func.Out[str]):
row_key = str(uuid.uuid4())
data = {
"Name": "Output binding message",
"PartitionKey": "message",
"RowKey": row_key
}
table_json = json.dumps(data)
message.set(table_json)
return table_json
Attributi
Sia le librerie C# in-process che il processo di lavoro isolato usano attributi per definire la funzione. Lo script C# usa invece un file di configurazione function.json come descritto nella guida per gli script C#.
Nelle librerie diTableInputAttribute classi C# supporta le proprietà seguenti:
| Proprietà dell'attributo | Descrizione |
|---|---|
| Nome della tabella | Nome della tabella in cui scrivere. |
| PartitionKey | Chiave di partizione dell'entità della tabella da scrivere. |
| RowKey | Chiave di riga dell'entità della tabella da scrivere. |
| Connessione | Nome di un'impostazione o di una raccolta di impostazioni dell'app che specifica come connettersi al servizio tabelle. Vedere Connessioni. |
Annotazioni
Nella libreria di runtime delle funzioni Java usare l'annotazione TableOutput sui parametri per scrivere valori nelle tabelle. L'attributo supporta gli elementi seguenti:
| Elemento | Descrizione |
|---|---|
| nome | Nome della variabile usato nel codice della funzione che rappresenta la tabella o l'entità. |
| Datatype | Definisce il modo in cui il runtime di Funzioni deve gestire il valore del parametro. Per altre informazioni, vedere dataType. |
| tableName | Nome della tabella in cui scrivere. |
| partitionKey | Chiave di partizione dell'entità della tabella da scrivere. |
| rowKey | Chiave di riga dell'entità della tabella da scrivere. |
| connessione | Nome di un'impostazione o di una raccolta di impostazioni dell'app che specifica come connettersi al servizio tabelle. Vedere Connessioni. |
Impostazione
Nella tabella seguente vengono illustrate le proprietà che è possibile impostare sull'oggetto options passato al output.table() metodo .
| Proprietà | Descrizione |
|---|---|
| tableName | Nome della tabella in cui scrivere. |
| partitionKey | Chiave di partizione dell'entità della tabella da scrivere. |
| rowKey | Chiave di riga dell'entità della tabella da scrivere. |
| connessione | Nome di un'impostazione o di una raccolta di impostazioni dell'app che specifica come connettersi al servizio tabelle. Vedere Connessioni. |
Impostazione
Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json.
| Proprietà di function.json | Descrizione |
|---|---|
| tipo | Deve essere impostato su table. Questa proprietà viene impostata automaticamente quando si crea l'associazione nel portale di Azure. |
| direzione | Deve essere impostato su out. Questa proprietà viene impostata automaticamente quando si crea l'associazione nel portale di Azure. |
| nome | Nome della variabile usato nel codice della funzione che rappresenta la tabella o l'entità. Impostare su $return per fare riferimento al valore restituito della funzione. |
| tableName | Nome della tabella in cui scrivere. |
| partitionKey | Chiave di partizione dell'entità della tabella da scrivere. |
| rowKey | Chiave di riga dell'entità della tabella da scrivere. |
| connessione | Nome di un'impostazione o di una raccolta di impostazioni dell'app che specifica come connettersi al servizio tabelle. Vedere Connessioni. |
Quando si sviluppa in locale, aggiungere le impostazioni dell'applicazione nel file local.settings.json nella Values raccolta.
Connessioni
La connection proprietà è impostata come chiave nelle impostazioni dell'applicazione che restituisce un valore usato dal runtime Functions per collegarsi all'account di archiviazione usato dall'estensione. Il valore dell'impostazione della proprietà di connessione dipende dal tipo di connessione:
-
Connessione di identità gestita: La
connectionproprietà è<CONNECTION_NAME_PREFIX>condivisa da un gruppo di impostazioni che insieme definiscono una connessione basata sull'identità con l'account di archiviazione. Per ulteriori informazioni, vedi Definire connessioni identitari. -
Riferimento Key Vault: L'impostazione
connectionproprietà restituisce un riferimento Azure Key Vault alla posizione in cui la stringa di connessione è mantenuta centralmente. Per maggiori informazioni, vedi Definire le connessioni Key Vault. -
Riferimento App Configuration: L'impostazione
connectionproprietà restituisce un riferimento Configurazione app di Azure che restituisce una stringa di connessione o un riferimento a Key Vault. Per ulteriori informazioni, consulta Configurazione app di Azure nell'articolo sulle connessioni. -
Connection string: L'impostazione
connectionproprietà restituisce la stringa di connessione effettiva dell'account di storage. Poiché la stringa di connessione contiene chiavi segrete condivise, dovresti considerare l'uso di una connessione di identità gestita, quando possibile. Per maggiori informazioni, vedi Definisci le connessioni.
Per saperne di più sulle connessioni dei binding, consulta Gestire la connessione in Funzioni di Azure. Per ottenere un stringa di connessione, seguire la procedura illustrata in Gestire le chiavi di accesso dell'account di archiviazione.
Quando imposti connection una chiave o un prefisso di chiave chiamato AzureWebJobsStorage o una stringa vuota, l'estensione di binding utilizza l'account di memoria host predefinito. Per maggiori informazioni, vedi Ottimizza le prestazioni di archiviazione.
Utilizzo
L'utilizzo dell'associazione dipende dalla versione del pacchetto di estensione e dalla modalità C# usata nell'app per le funzioni, che può essere una delle seguenti:
Una funzione C# compilata di libreria di classi di processo di lavoro viene eseguita in un processo isolato dal runtime.
Scegliere una versione per visualizzare i dettagli di utilizzo per la modalità e la versione.
Quando si vuole che la funzione scriva in una singola entità, l'associazione di output tabelle di Azure può essere associata ai tipi seguenti:
| Tipo | Descrizione |
|---|---|
| Tipo serializzabile JSON che implementa [ITableEntity] | Funzioni tenta di serializzare un tipo POCO (Plain-Old CLR Object) come entità. Il tipo deve implementare [ITableEntity] o avere una proprietà stringa RowKey e una proprietà stringa PartitionKey . |
Quando si vuole che la funzione scriva in più entità, l'associazione di output tabelle di Azure può essere associata ai tipi seguenti:
| Tipo | Descrizione |
|---|---|
T[] dove T è uno dei singoli tipi di entità |
Matrice contenente più entità. Ogni voce rappresenta un'entità. |
Per altri scenari di output, creare e usare un oggetto TableClient con altri tipi direttamente da Azure.Data.Tables . Vedere Registrare i client di Azure per un esempio di uso dell'inserimento delle dipendenze per creare un tipo di client da Azure SDK.
Sono disponibili due opzioni per l'output di una riga di archiviazione tabelle da una funzione usando l'annotazione TableStorageOutput :
| Opzioni | Descrizione |
|---|---|
| Valore restituito | Applicando l'annotazione alla funzione stessa, il valore restituito della funzione viene mantenuto come riga di archiviazione tabelle. |
| Imperativo | Per impostare in modo esplicito la riga della tabella, applicare l'annotazione a un parametro specifico del tipo OutputBinding<T>, dove T include le PartitionKey proprietà e RowKey . È possibile accompagnare queste proprietà implementando ITableEntity o ereditando TableEntity. |
Impostare i dati delle righe di output restituendo il valore o usando context.extraOutputs.set().
Per scrivere nei dati della tabella, usare il Push-OutputBinding cmdlet , impostare il parametro e -Name TableBinding il -Value parametro uguali ai dati della riga. Per altri dettagli, vedere l'esempio di PowerShell.
Sono disponibili due opzioni per l'output di un messaggio di riga di archiviazione tabelle da una funzione:
| Opzioni | Descrizione |
|---|---|
| Valore restituito | impostare la proprietà name in function.json su $return. Con questa configurazione, il valore restituito della funzione viene mantenuto come riga di archiviazione tabelle. |
| Imperativo | passare un valore al metodo set del parametro dichiarato come tipo Out. Il valore passato a set viene salvato in modo permanente come riga della tabella. |
Per informazioni dettagliate sull'utilizzo, vedere Esempio.
Eccezioni e codici restituiti
| Vincolo | Riferimento |
|---|---|
| Tabella | Codici di errore del servizio tabelle |
| BLOB, tabella, coda | Codici di errore di archiviazione |
| BLOB, tabella, coda | Risoluzione dei problemi |