Liaisons de stockage Table Azure pour Azure FunctionsAzure Table storage bindings for Azure Functions

Cet article explique comment utiliser les liaisons de stockage de table Azure dans Azure Functions.This article explains how to work with Azure Table storage bindings in Azure Functions. Azure Functions prend en charge les liaisons d’entrée et de sortie pour Stockage de table Azure.Azure Functions supports input and output bindings for Azure Table storage.

Il s’agit des informations de référence pour les développeurs Azure Functions.This is reference information for Azure Functions developers. Si vous ne connaissez pas bien Azure Functions, commencez par consulter les ressources suivantes :If you're new to Azure Functions, start with the following resources:

Packages - Functions 1.xPackages - Functions 1.x

Les liaisons du Stockage Table sont fournies dans le package NuGet Microsoft.Azure.WebJobs, version 2.x.The Table storage bindings are provided in the Microsoft.Azure.WebJobs NuGet package, version 2.x. Le code source du package se trouve dans le référentiel GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

La prise en charge de cette liaison est automatique dans tous les environnements de développement.Support for this binding is automatically provided in all development environments. Vous n’avez pas besoin d’installer manuellement le package ou d’enregistrer l’extension.You don't have to manually install the package or register the extension.

Version du kit SDK Stockage Azure dans Functions 1.xAzure Storage SDK version in Functions 1.x

Dans Functions 1.x, les déclencheurs et les liaisons de stockage utilisent la version 7.2.1 du kit SDK Stockage Azure (package NuGet WindowsAzure.Storage).In Functions 1.x, the Storage triggers and bindings use version 7.2.1 of the Azure Storage SDK (WindowsAzure.Storage NuGet package). Si vous référencez une version différente du kit SDK Stockage Azure et établissez une liaison avec un type du kit SDK Stockage Azure dans votre signature de fonction, le runtime de Functions peut signaler ne pas pouvoir établir de liaison avec ce type.If you reference a different version of the Storage SDK, and you bind to a Storage SDK type in your function signature, the Functions runtime may report that it can't bind to that type. La solution consiste à s’assurer que votre projet référence WindowsAzure.Storage 7.2.1.The solution is to make sure your project references WindowsAzure.Storage 7.2.1.

Packages – Functions 2.x et versions ultérieuresPackages - Functions 2.x and higher

Les liaisons du Stockage Table sont fournies dans le package NuGet Microsoft.Azure.WebJobs.Extensions.Storage, version 3.x.The Table storage bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Storage NuGet package, version 3.x. Le code source du package se trouve dans le référentiel GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

Le tableau suivant indique comment ajouter la prise en charge de cette liaison dans chaque environnement de développement.The following table tells how to add support for this binding in each development environment.

Environnement de développementDevelopment environment Pour ajouter la prise en chargeTo add support
Développement local - Bibliothèque de classes C#Local development - C# class library Installer le package.Install the package
Développement local - Script C#, JavaScript, F#, Java et PythonLocal development - C# script, JavaScript, F#, Java and Python Enregistrer l’extensionRegister the extension
Développement sur le portailPortal development Installer lors de l’ajout d’une liaison de sortieInstall when adding output binding

Pour apprendre comment mettre à jour les extensions de liaison existantes dans le portail sans avoir à republier votre projet d'application de fonction, voir Mettre à jour vos extensions.To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

EntréeInput

La liaison d’entrée de stockage de table Azure permet de lire une table dans un compte de stockage Azure.Use the Azure Table storage input binding to read a table in an Azure Storage account.

Entrée - exempleInput - example

Consultez l’exemple propre à un langage particulier :See the language-specific example:

Entrée - Exemple C# - une seule entitéInput - C# example - one entity

L’exemple suivant illustre une fonction C# qui lit une ligne de table unique.The following example shows a C# function that reads a single table row.

La valeur de clé de ligne "{queueTrigger}" indique que la clé de ligne provient de la chaîne de message de file d’attente.The row key value "{queueTrigger}" indicates that the row key comes from the queue message string.

public class TableStorage
{
    public class MyPoco
    {
        public string PartitionKey { get; set; }
        public string RowKey { get; set; }
        public string Text { get; set; }
    }

    [FunctionName("TableInput")]
    public static void TableInput(
        [QueueTrigger("table-items")] string input, 
        [Table("MyTable", "MyPartition", "{queueTrigger}")] MyPoco poco, 
        ILogger log)
    {
        log.LogInformation($"PK={poco.PartitionKey}, RK={poco.RowKey}, Text={poco.Text}");
    }
}

Entrée - Exemple C# - IQueryableInput - C# example - IQueryable

L’exemple suivant illustre une fonction C# qui lit plusieurs lignes de table.The following example shows a C# function that reads multiple table rows. Notez que la classe MyPoco est dérivée de TableEntity.Note that the MyPoco class derives from TableEntity.

public class TableStorage
{
    public class MyPoco : TableEntity
    {
        public string Text { get; set; }
    }

    [FunctionName("TableInput")]
    public static void TableInput(
        [QueueTrigger("table-items")] string input, 
        [Table("MyTable", "MyPartition")] IQueryable<MyPoco> pocos, 
        ILogger log)
    {
        foreach (MyPoco poco in pocos)
        {
            log.LogInformation($"PK={poco.PartitionKey}, RK={poco.RowKey}, Text={poco.Text}");
        }
    }
}

Entrée - Exemple C# - CloudTableInput - C# example - CloudTable

IQueryable n’est pas pris en charge dans le runtime Functions v2.IQueryable isn't supported in the Functions v2 runtime. Une alternative consiste à utiliser un paramètre de méthode CloudTable pour lire la table en utilisant le kit SDK Stockage Azure.An alternative is to use a CloudTable method parameter to read the table by using the Azure Storage SDK. Voici un exemple d’une fonction qui interroge une table du journal Azure Functions :Here's an example of a function that queries an Azure Functions log table:

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Table;
using System;
using System.Threading.Tasks;

namespace FunctionAppCloudTable2
{
    public class LogEntity : TableEntity
    {
        public string OriginalName { get; set; }
    }
    public static class CloudTableDemo
    {
        [FunctionName("CloudTableDemo")]
        public static async Task Run(
            [TimerTrigger("0 */1 * * * *")] TimerInfo myTimer, 
            [Table("AzureWebJobsHostLogscommon")] CloudTable cloudTable,
            ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

            TableQuery<LogEntity> rangeQuery = new TableQuery<LogEntity>().Where(
                TableQuery.CombineFilters(
                    TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, 
                        "FD2"),
                    TableOperators.And,
                    TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.GreaterThan, 
                        "t")));

            // Execute the query and loop through the results
            foreach (LogEntity entity in 
                await cloudTable.ExecuteQuerySegmentedAsync(rangeQuery, null))
            {
                log.LogInformation(
                    $"{entity.PartitionKey}\t{entity.RowKey}\t{entity.Timestamp}\t{entity.OriginalName}");
            }
        }
    }
}

Pour plus d’informations sur l’utilisation de CloudTable, consultez Bien démarrer avec Stockage Table Azure.For more information about how to use CloudTable, see Get started with Azure Table storage.

Si vous essayez de lier à CloudTable et obtenez un message d’erreur, vérifiez que vous avez une référence à la bonne version du SDK Stockage.If you try to bind to CloudTable and get an error message, make sure that you have a reference to the correct Storage SDK version.

Entrée - Exemple de script C# - une seule entitéInput - C# script example - one entity

L’exemple suivant montre une liaison d’entrée de table dans un fichier function.json et un code Script C# qui utilise la liaison.The following example shows a table input binding in a function.json file and C# script code that uses the binding. La fonction utilise un déclencheur de file d’attente pour lire une seule ligne du tableau.The function uses a queue trigger to read a single table row.

Le fichier function.json spécifie une propriété partitionKey et une propriété rowKey.The function.json file specifies a partitionKey and a rowKey. La valeur rowKey "{queueTrigger}" indique que la clé de ligne provient de la chaîne de message de file d’attente.The rowKey value "{queueTrigger}" indicates that the row key comes from the queue message string.

{
  "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
}

La section configuration décrit ces propriétés.The configuration section explains these properties.

Voici le code Script C# :Here's the C# script code:

public static void Run(string myQueueItem, Person personEntity, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
    log.LogInformation($"Name in Person entity: {personEntity.Name}");
}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
}

Entrée - Exemple de script C# - IQueryableInput - C# script example - IQueryable

L’exemple suivant montre une liaison d’entrée de table dans un fichier function.json et un code Script C# qui utilise la liaison.The following example shows a table input binding in a function.json file and C# script code that uses the binding. La fonction lit les entités d’une clé de partition qui est spécifiée dans un message de file d’attente.The function reads entities for a partition key that is specified in a queue message.

Voici le fichier function.json :Here's the function.json file:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "tableBinding",
      "type": "table",
      "connection": "MyStorageConnectionAppSetting",
      "tableName": "Person",
      "direction": "in"
    }
  ],
  "disabled": false
}

La section configuration décrit ces propriétés.The configuration section explains these properties.

Le code Script C# ajoute une référence au kit SDK Stockage Azure afin que le type d’entité puisse dériver de TableEntity :The C# script code adds a reference to the Azure Storage SDK so that the entity type can derive from TableEntity:

#r "Microsoft.WindowsAzure.Storage"
using Microsoft.WindowsAzure.Storage.Table;
using Microsoft.Extensions.Logging;

public static void Run(string myQueueItem, IQueryable<Person> tableBinding, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
    foreach (Person person in tableBinding.Where(p => p.PartitionKey == myQueueItem).ToList())
    {
        log.LogInformation($"Name: {person.Name}");
    }
}

public class Person : TableEntity
{
    public string Name { get; set; }
}

Entrée - Exemple de script C# - CloudTableInput - C# script example - CloudTable

IQueryable n’est pas pris en charge dans le runtime Functions pour les versions 2.x et ultérieures.IQueryable isn't supported in the Functions runtime for versions 2.x and higher). Une alternative consiste à utiliser un paramètre de méthode CloudTable pour lire la table en utilisant le kit SDK Stockage Azure.An alternative is to use a CloudTable method parameter to read the table by using the Azure Storage SDK. Voici un exemple d’une fonction qui interroge une table du journal Azure Functions :Here's an example of a function that queries an Azure Functions log table:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 */1 * * * *"
    },
    {
      "name": "cloudTable",
      "type": "table",
      "connection": "AzureWebJobsStorage",
      "tableName": "AzureWebJobsHostLogscommon",
      "direction": "in"
    }
  ],
  "disabled": false
}
#r "Microsoft.WindowsAzure.Storage"
using Microsoft.WindowsAzure.Storage.Table;
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;

public static async Task Run(TimerInfo myTimer, CloudTable cloudTable, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

    TableQuery<LogEntity> rangeQuery = new TableQuery<LogEntity>().Where(
    TableQuery.CombineFilters(
        TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, 
            "FD2"),
        TableOperators.And,
        TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.GreaterThan, 
            "a")));

    // Execute the query and loop through the results
    foreach (LogEntity entity in 
    await cloudTable.ExecuteQuerySegmentedAsync(rangeQuery, null))
    {
        log.LogInformation(
            $"{entity.PartitionKey}\t{entity.RowKey}\t{entity.Timestamp}\t{entity.OriginalName}");
    }
}

public class LogEntity : TableEntity
{
    public string OriginalName { get; set; }
}

Pour plus d’informations sur l’utilisation de CloudTable, consultez Bien démarrer avec Stockage Table Azure.For more information about how to use CloudTable, see Get started with Azure Table storage.

Si vous essayez de lier à CloudTable et obtenez un message d’erreur, vérifiez que vous avez une référence à la bonne version du SDK Stockage.If you try to bind to CloudTable and get an error message, make sure that you have a reference to the correct Storage SDK version.

Entrée - exemple F#Input - F# example

L’exemple suivant montre une liaison d’entrée de table dans un fichier function.json et du code Script F# qui utilise la liaison.The following example shows a table input binding in a function.json file and F# script code that uses the binding. La fonction utilise un déclencheur de file d’attente pour lire une seule ligne du tableau.The function uses a queue trigger to read a single table row.

Le fichier function.json spécifie une propriété partitionKey et une propriété rowKey.The function.json file specifies a partitionKey and a rowKey. La valeur rowKey "{queueTrigger}" indique que la clé de ligne provient de la chaîne de message de file d’attente.The rowKey value "{queueTrigger}" indicates that the row key comes from the queue message string.

{
  "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
}

La section configuration décrit ces propriétés.The configuration section explains these properties.

Voici le code F# :Here's the F# code:

[<CLIMutable>]
type Person = {
  PartitionKey: string
  RowKey: string
  Name: string
}

let Run(myQueueItem: string, personEntity: Person) =
    log.LogInformation(sprintf "F# Queue trigger function processed: %s" myQueueItem)
    log.LogInformation(sprintf "Name in Person entity: %s" personEntity.Name)

Entrée - exemple JavaScriptInput - JavaScript example

L’exemple suivant montre une liaison d’entrée de table dans un fichier function.json et un code JavaScript qui utilise la liaison.The following example shows a table input binding in a function.json file and JavaScript code that uses the binding. La fonction utilise un déclencheur de file d’attente pour lire une seule ligne du tableau.The function uses a queue trigger to read a single table row.

Le fichier function.json spécifie une propriété partitionKey et une propriété rowKey.The function.json file specifies a partitionKey and a rowKey. La valeur rowKey "{queueTrigger}" indique que la clé de ligne provient de la chaîne de message de file d’attente.The rowKey value "{queueTrigger}" indicates that the row key comes from the queue message string.

{
  "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
}

La section configuration décrit ces propriétés.The configuration section explains these properties.

Voici le code JavaScript :Here's the JavaScript code:

module.exports = function (context, myQueueItem) {
    context.log('Node.js queue trigger function processed work item', myQueueItem);
    context.log('Person entity name: ' + context.bindings.personEntity.Name);
    context.done();
};

Entrée - exemple JavaInput - Java example

L’exemple suivant illustre une fonction déclenchée par HTTP, qui retourne le nombre total d’éléments dans une partition spécifiée dans le Stockage Table.The following example shows an HTTP triggered function which returns the total count of the items in a specified partition in Table storage.

@FunctionName("getallcount")
public int run(
   @HttpTrigger(name = "req",
                 methods = {HttpMethod.GET},
                 authLevel = AuthorizationLevel.ANONYMOUS) Object dummyShouldNotBeUsed,
   @TableInput(name = "items",
                tableName = "mytablename",  partitionKey = "myparkey",
                connection = "myconnvarname") MyItem[] items
) {
    return items.length;
}

Entrée - attributsInput - attributes

Dans les bibliothèques de classes C#, utilisez les attributs suivants pour configurer un déclencheur d’entrée de table :In C# class libraries, use the following attributes to configure a table input binding:

  • TableAttributeTableAttribute

    Le constructeur de l’attribut prend le nom de la table, la clé de partition et la clé de ligne.The attribute's constructor takes the table name, partition key, and row key. Il peut être utilisé sur un paramètre out ou sur la valeur de retour de la fonction, comme indiqué dans l’exemple suivant :It can be used on an out parameter or on the return value of the function, as shown in the following example:

    [FunctionName("TableInput")]
    public static void Run(
        [QueueTrigger("table-items")] string input, 
        [Table("MyTable", "Http", "{queueTrigger}")] MyPoco poco, 
        ILogger log)
    {
        ...
    }
    

    Vous pouvez définir la propriété Connection pour spécifier le compte de stockage à utiliser, comme indiqué dans l’exemple suivant :You can set the Connection property to specify the storage account to use, as shown in the following example:

    [FunctionName("TableInput")]
    public static void Run(
        [QueueTrigger("table-items")] string input, 
        [Table("MyTable", "Http", "{queueTrigger}", Connection = "StorageConnectionAppSetting")] MyPoco poco, 
        ILogger log)
    {
        ...
    }
    

    Pour obtenir un exemple complet, consultez Entrée - exemple C#.For a complete example, see Input - C# example.

  • StorageAccountAttributeStorageAccountAttribute

    Fournit une autre manière de spécifier le compte de stockage à utiliser.Provides another way to specify the storage account to use. Le constructeur prend le nom d’un paramètre d’application comportant une chaîne de connexion de stockage.The constructor takes the name of an app setting that contains a storage connection string. L’attribut peut être appliqué au niveau du paramètre, de la méthode ou de la classe.The attribute can be applied at the parameter, method, or class level. L’exemple suivant montre le niveau de la classe et celui de la méthode :The following example shows class level and method level:

    [StorageAccount("ClassLevelStorageAppSetting")]
    public static class AzureFunctions
    {
        [FunctionName("TableInput")]
        [StorageAccount("FunctionLevelStorageAppSetting")]
        public static void Run( //...
    {
        ...
    }
    

Le compte de stockage à utiliser est déterminé dans l’ordre suivant :The storage account to use is determined in the following order:

  • La propriété Connection de l’attribut Table.The Table attribute's Connection property.
  • L’attribut StorageAccount appliqué au même paramètre que l’attribut Table.The StorageAccount attribute applied to the same parameter as the Table attribute.
  • L’attribut StorageAccount appliqué à la fonction.The StorageAccount attribute applied to the function.
  • L’attribut StorageAccount appliqué à la classe.The StorageAccount attribute applied to the class.
  • Le compte de stockage par défaut pour l’application de fonction (paramètre d’application « AzureWebJobsStorage »).The default storage account for the function app ("AzureWebJobsStorage" app setting).

Entrée - annotations JavaInput - Java annotations

Dans la bibliothèque du runtime des fonctions Java, utilisez l’annotation @TableInput sur les paramètres dont la valeur proviendrait du Stockage Table.In the Java functions runtime library, use the @TableInput annotation on parameters whose value would come from Table storage. Vous pouvez utiliser cette annotation avec des types Java natifs, des objets POJO ou des valeurs Null à l’aide de Optional<T>.This annotation can be used with native Java types, POJOs, or nullable values using Optional<T>.

Entrée - configurationInput - configuration

Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le fichier function.json et l’attribut Table.The following table explains the binding configuration properties that you set in the function.json file and the Table attribute.

Propriété function.jsonfunction.json property Propriété d’attributAttribute property DescriptionDescription
typetype n/an/a Cette propriété doit être définie sur table.Must be set to table. Cette propriété est définie automatiquement lorsque vous créez la liaison dans le portail Azure.This property is set automatically when you create the binding in the Azure portal.
directiondirection n/an/a Cette propriété doit être définie sur in.Must be set to in. Cette propriété est définie automatiquement lorsque vous créez la liaison dans le portail Azure.This property is set automatically when you create the binding in the Azure portal.
namename n/an/a Nom de la variable qui représente la table ou l’entité dans le code de la fonction.The name of the variable that represents the table or entity in function code.
tableNametableName TableNameTableName Nom de la table.The name of the table.
partitionKeypartitionKey PartitionKeyPartitionKey facultatif.Optional. Clé de partition de l’entité de table à lire.The partition key of the table entity to read. Consultez la section utilisation pour obtenir des conseils sur l’utilisation de cette propriété.See the usage section for guidance on how to use this property.
rowKeyrowKey RowKeyRowKey facultatif.Optional. Clé de ligne de l’entité de table à lire.The row key of the table entity to read. Consultez la section utilisation pour obtenir des conseils sur l’utilisation de cette propriété.See the usage section for guidance on how to use this property.
taketake TakeTake facultatif.Optional. Nombre maximal d’entités à lire en JavaScript.The maximum number of entities to read in JavaScript. Consultez la section utilisation pour obtenir des conseils sur l’utilisation de cette propriété.See the usage section for guidance on how to use this property.
filterfilter FilterFilter facultatif.Optional. Expression de filtre OData pour l’entrée de table dans JavaScript.An OData filter expression for table input in JavaScript. Consultez la section utilisation pour obtenir des conseils sur l’utilisation de cette propriété.See the usage section for guidance on how to use this property.
connectionconnection ConnectionConnection Nom d’un paramètre d’application comportant la chaîne de connexion de stockage à utiliser pour cette liaison.The name of an app setting that contains the Storage connection string to use for this binding. Si le nom du paramètre d’application commence par « AzureWebJobs », vous ne pouvez spécifier que le reste du nom ici.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Par exemple, si vous définissez connection sur « MyStorage », le runtime Functions recherche un paramètre d’application qui est nommé « AzureWebJobsMyStorage ».For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Si vous laissez connection vide, le runtime Functions utilise la chaîne de connexion de stockage par défaut dans le paramètre d’application nommé AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

Quand vous développez localement, les paramètres d’application vont dans le fichier local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Entrée - utilisationInput - usage

La liaison d’entrée de stockage de table prend en charge les scénarios suivants :The Table storage input binding supports the following scenarios:

  • Lire une ligne dans C# ou Script C#Read one row in C# or C# script

    Définissez partitionKey et rowKey.Set partitionKey and rowKey. Accédez aux données de la table à l’aide d’un paramètre de méthode T <paramName>.Access the table data by using a method parameter T <paramName>. Dans Script C#, paramName est la valeur spécifiée dans la propriété name de function.json.In C# script, paramName is the value specified in the name property of function.json. T est généralement un type qui implémente ITableEntity ou est dérivé de TableEntity.T is typically a type that implements ITableEntity or derives from TableEntity. Les propriétés filter et take ne sont pas utilisées dans ce scénario.The filter and take properties are not used in this scenario.

  • Lire une ou plusieurs lignes en C# ou en Script C#Read one or more rows in C# or C# script

    Accédez aux données de la table à l’aide d’un paramètre de méthode IQueryable<T> <paramName>.Access the table data by using a method parameter IQueryable<T> <paramName>. Dans Script C#, paramName est la valeur spécifiée dans la propriété name de function.json.In C# script, paramName is the value specified in the name property of function.json. T doit être généralement un type qui implémente ITableEntity ou est dérivé de TableEntity.T must be a type that implements ITableEntity or derives from TableEntity. Vous pouvez utiliser les méthodes IQueryable pour effectuer le filtrage voulu.You can use IQueryable methods to do any filtering required. Les propriétés partitionKey, rowKey, filter et take ne sont pas utilisées dans ce scénario.The partitionKey, rowKey, filter, and take properties are not used in this scenario.

    Notes

    IQueryable n’est pas pris en charge dans le runtime Functions v2.IQueryable isn't supported in the Functions v2 runtime. Une alternative consiste à utiliser un paramètre de méthode CloudTable paramName pour lire la table à l’aide du SDK Stockage Azure.An alternative is to use a CloudTable paramName method parameter to read the table by using the Azure Storage SDK. Si vous essayez de lier à CloudTable et obtenez un message d’erreur, vérifiez que vous avez une référence à la bonne version du SDK Stockage.If you try to bind to CloudTable and get an error message, make sure that you have a reference to the correct Storage SDK version.

  • Lire une ou plusieurs lignes en JavaScriptRead one or more rows in JavaScript

    Définissez les propriétés filter et take.Set the filter and take properties. Ne définissez pas partitionKey ni rowKey.Don't set partitionKey or rowKey. Accédez à l’entité (ou les entités) de table d’entrée à l’aide de context.bindings.<BINDING_NAME>.Access the input table entity (or entities) using context.bindings.<BINDING_NAME>. Les objets désérialisés ont des propriétés RowKey et PartitionKey.The deserialized objects have RowKey and PartitionKey properties.

OutputOutput

Utilisez une liaison de sortie de stockage de table Azure pour écrire des entités dans une table d’un compte de Stockage Azure.Use an Azure Table storage output binding to write entities to a table in an Azure Storage account.

Notes

Cette liaison de sortie ne prend pas en charge la mise à jour d’entités existantes.This output binding does not support updating existing entities. Utilisez la TableOperation nécessaire qui est disponible dans le SDK Stockage Azure afin de mettre à jour une entité existante.Use the appropriate TableOperation from the Azure Storage SDK to update an existing entity as required.

Sortie - exempleOutput - example

Consultez l’exemple propre à un langage particulier :See the language-specific example:

Sortie - exemple C#Output - C# example

L’exemple suivant illustre une fonction C# qui utilise un déclencheur HTTP pour écrire une ligne de table.The following example shows a C# function that uses an HTTP trigger to write a single table row.

public class TableStorage
{
    public class MyPoco
    {
        public string PartitionKey { get; set; }
        public string RowKey { get; set; }
        public string Text { get; set; }
    }

    [FunctionName("TableOutput")]
    [return: Table("MyTable")]
    public static MyPoco TableOutput([HttpTrigger] dynamic input, ILogger log)
    {
        log.LogInformation($"C# http trigger function processed: {input.Text}");
        return new MyPoco { PartitionKey = "Http", RowKey = Guid.NewGuid().ToString(), Text = input.Text };
    }
}

Sortie - exemple Script C#Output - C# script example

L’exemple suivant montre une liaison de sortie de table dans un fichier function.json et un code Script C# qui utilise la liaison.The following example shows a table output binding in a function.json file and C# script code that uses the binding. La fonction écrit plusieurs entités de table.The function writes multiple table entities.

Voici le fichier function.json :Here's the function.json file:

{
  "bindings": [
    {
      "name": "input",
      "type": "manualTrigger",
      "direction": "in"
    },
    {
      "tableName": "Person",
      "connection": "MyStorageConnectionAppSetting",
      "name": "tableBinding",
      "type": "table",
      "direction": "out"
    }
  ],
  "disabled": false
}

La section configuration décrit ces propriétés.The configuration section explains these properties.

Voici le code Script C# :Here's the C# script code:

public static void Run(string input, ICollector<Person> tableBinding, ILogger log)
{
    for (int i = 1; i < 10; i++)
        {
            log.LogInformation($"Adding Person entity {i}");
            tableBinding.Add(
                new Person() { 
                    PartitionKey = "Test", 
                    RowKey = i.ToString(), 
                    Name = "Name" + i.ToString() }
                );
        }

}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
}

Sortie - exemple F#Output - F# example

L’exemple suivant montre une liaison de sortie de table dans un fichier function.json et un code Script F# qui utilise la liaison.The following example shows a table output binding in a function.json file and F# script code that uses the binding. La fonction écrit plusieurs entités de table.The function writes multiple table entities.

Voici le fichier function.json :Here's the function.json file:

{
  "bindings": [
    {
      "name": "input",
      "type": "manualTrigger",
      "direction": "in"
    },
    {
      "tableName": "Person",
      "connection": "MyStorageConnectionAppSetting",
      "name": "tableBinding",
      "type": "table",
      "direction": "out"
    }
  ],
  "disabled": false
}

La section configuration décrit ces propriétés.The configuration section explains these properties.

Voici le code F# :Here's the F# code:

[<CLIMutable>]
type Person = {
  PartitionKey: string
  RowKey: string
  Name: string
}

let Run(input: string, tableBinding: ICollector<Person>, log: ILogger) =
    for i = 1 to 10 do
        log.LogInformation(sprintf "Adding Person entity %d" i)
        tableBinding.Add(
            { PartitionKey = "Test"
              RowKey = i.ToString()
              Name = "Name" + i.ToString() })

Sortie - exemple JavaScriptOutput - JavaScript example

L’exemple suivant montre une liaison de sortie de table dans un fichier function.json et une fonction JavaScript qui utilise la liaison.The following example shows a table output binding in a function.json file and a JavaScript function that uses the binding. La fonction écrit plusieurs entités de table.The function writes multiple table entities.

Voici le fichier function.json :Here's the function.json file:

{
  "bindings": [
    {
      "name": "input",
      "type": "manualTrigger",
      "direction": "in"
    },
    {
      "tableName": "Person",
      "connection": "MyStorageConnectionAppSetting",
      "name": "tableBinding",
      "type": "table",
      "direction": "out"
    }
  ],
  "disabled": false
}

La section configuration décrit ces propriétés.The configuration section explains these properties.

Voici le code JavaScript :Here's the JavaScript code:

module.exports = function (context) {

    context.bindings.tableBinding = [];

    for (var i = 1; i < 10; i++) {
        context.bindings.tableBinding.push({
            PartitionKey: "Test",
            RowKey: i.toString(),
            Name: "Name " + i
        });
    }
    
    context.done();
};

Sortie - attributsOutput - attributes

Dans les bibliothèques de classes C#, utilisez l’attribut TableAttribute.In C# class libraries, use the TableAttribute.

Le constructeur de l’attribut prend le nom de la table.The attribute's constructor takes the table name. Il peut être utilisé sur un paramètre out ou sur la valeur de retour de la fonction, comme indiqué dans l’exemple suivant :It can be used on an out parameter or on the return value of the function, as shown in the following example:

[FunctionName("TableOutput")]
[return: Table("MyTable")]
public static MyPoco TableOutput(
    [HttpTrigger] dynamic input, 
    ILogger log)
{
    ...
}

Vous pouvez définir la propriété Connection pour spécifier le compte de stockage à utiliser, comme indiqué dans l’exemple suivant :You can set the Connection property to specify the storage account to use, as shown in the following example:

[FunctionName("TableOutput")]
[return: Table("MyTable", Connection = "StorageConnectionAppSetting")]
public static MyPoco TableOutput(
    [HttpTrigger] dynamic input, 
    ILogger log)
{
    ...
}

Pour obtenir un exemple complet, consultez Sortie - exemple C#.For a complete example, see Output - C# example.

Vous pouvez utiliser l’attribut StorageAccount pour spécifier le compte de stockage au niveau de la classe, de la méthode ou du paramètre.You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. Pour plus d’informations, consultez Entrée - attributs.For more information, see Input - attributes.

Sortie - configurationOutput - configuration

Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le fichier function.json et l’attribut Table.The following table explains the binding configuration properties that you set in the function.json file and the Table attribute.

Propriété function.jsonfunction.json property Propriété d’attributAttribute property DescriptionDescription
typetype n/an/a Cette propriété doit être définie sur table.Must be set to table. Cette propriété est définie automatiquement lorsque vous créez la liaison dans le portail Azure.This property is set automatically when you create the binding in the Azure portal.
directiondirection n/an/a Cette propriété doit être définie sur out.Must be set to out. Cette propriété est définie automatiquement lorsque vous créez la liaison dans le portail Azure.This property is set automatically when you create the binding in the Azure portal.
namename n/an/a Nom de variable utilisé dans le code de la fonction qui représente la table ou l’entité.The variable name used in function code that represents the table or entity. La valeur doit être $return pour faire référence à la valeur de retour de la fonction.Set to $return to reference the function return value.
tableNametableName TableNameTableName Nom de la table.The name of the table.
partitionKeypartitionKey PartitionKeyPartitionKey Clé de partition de l’entité de table à écrire.The partition key of the table entity to write. Consultez la section utilisation pour obtenir des conseils sur l’utilisation de cette propriété.See the usage section for guidance on how to use this property.
rowKeyrowKey RowKeyRowKey Clé de ligne de l’entité de table à écrire.The row key of the table entity to write. Consultez la section utilisation pour obtenir des conseils sur l’utilisation de cette propriété.See the usage section for guidance on how to use this property.
connectionconnection ConnectionConnection Nom d’un paramètre d’application comportant la chaîne de connexion de stockage à utiliser pour cette liaison.The name of an app setting that contains the Storage connection string to use for this binding. Si le nom du paramètre d’application commence par « AzureWebJobs », vous ne pouvez spécifier que le reste du nom ici.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Par exemple, si vous définissez connection sur « MyStorage », le runtime Functions recherche un paramètre d’application qui est nommé « AzureWebJobsMyStorage ».For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Si vous laissez connection vide, le runtime Functions utilise la chaîne de connexion de stockage par défaut dans le paramètre d’application nommé AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

Quand vous développez localement, les paramètres d’application vont dans le fichier local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Sortie - utilisationOutput - usage

La liaison de sortie de stockage de table prend en charge les scénarios suivants :The Table storage output binding supports the following scenarios:

  • Écrire une ligne dans un langageWrite one row in any language

    Dans C# et Script C#, accédez à l’entité de table de sortie en utilisant un paramètre de méthode comme out T paramName ou la valeur de retour de la fonction.In C# and C# script, access the output table entity by using a method parameter such as out T paramName or the function return value. Dans Script C#, paramName est la valeur spécifiée dans la propriété name de function.json.In C# script, paramName is the value specified in the name property of function.json. T peut être n’importe quel type sérialisable si la clé de partition et la clé de ligne sont fournies par le fichier function.json ou l’attribut Table.T can be any serializable type if the partition key and row key are provided by the function.json file or the Table attribute. Sinon, T doit être un type qui inclut les propriétés PartitionKey et RowKey.Otherwise, T must be a type that includes PartitionKey and RowKey properties. Dans ce scénario, T implémente généralement ITableEntity ou est dérivé de TableEntity, mais ce n’est pas obligatoire.In this scenario, T typically implements ITableEntity or derives from TableEntity, but it doesn't have to.

  • Écrire une ou plusieurs lignes en C# ou en Script C#Write one or more rows in C# or C# script

    Dans C# et Script C#, accédez à l’entité de table de sortie en utilisant un paramètre de méthode ICollector<T> paramName ou IAsyncCollector<T> paramName.In C# and C# script, access the output table entity by using a method parameter ICollector<T> paramName or IAsyncCollector<T> paramName. Dans Script C#, paramName est la valeur spécifiée dans la propriété name de function.json.In C# script, paramName is the value specified in the name property of function.json. T spécifie le schéma des entités que vous souhaitez ajouter.T specifies the schema of the entities you want to add. En général, T est dérivé de TableEntity ou implémente ITableEntity, mais ce n’est pas obligatoire.Typically, T derives from TableEntity or implements ITableEntity, but it doesn't have to. Ni les valeurs de clé de partition et de clé de ligne dans function.json, ni le constructeur d’attribut Table ne sont utilisés dans ce scénario.The partition key and row key values in function.json or the Table attribute constructor are not used in this scenario.

    Une autre solution consiste à utiliser un paramètre de méthode CloudTable pour écrire la table en utilisant le kit SDK Stockage Azure.An alternative is to use a CloudTable method parameter to write to the table by using the Azure Storage SDK. Si vous essayez de lier à CloudTable et obtenez un message d’erreur, vérifiez que vous avez une référence à la bonne version du SDK Stockage.If you try to bind to CloudTable and get an error message, make sure that you have a reference to the correct Storage SDK version. Pour obtenir un exemple de code qui se lie à CloudTable, consultez les exemples de liaison d’entrée pour C# ou Script C# plus haut dans cet article.For an example of code that binds to CloudTable, see the input binding examples for C# or C# script earlier in this article.

  • Écrire une ou plusieurs lignes en JavaScriptWrite one or more rows in JavaScript

    Dans les fonctions JavaScript, accédez à la sortie de table avec context.bindings.<BINDING_NAME>.In JavaScript functions, access the table output using context.bindings.<BINDING_NAME>.

Exceptions et codes de retourExceptions and return codes

LiaisonBinding Informations de référenceReference
Table de charge de travailTable Codes d’erreur de tableTable Error Codes
Objet blob, Table, File d’attenteBlob, Table, Queue Codes d’erreur de stockageStorage Error Codes
Objet blob, Table, File d’attenteBlob, Table, Queue DépannageTroubleshooting

Étapes suivantesNext steps