Enlaces de Azure Table Storage para Azure FunctionsAzure Table storage bindings for Azure Functions

En este artículo se explica cómo trabajar con enlaces de Azure Table Storage en Azure Functions.This article explains how to work with Azure Table storage bindings in Azure Functions. Azure Functions admite enlaces de entrada y salida para Table Storage de Azure.Azure Functions supports input and output bindings for Azure Table storage.

Esta es la información de referencia para desarrolladores de Azure Functions.This is reference information for Azure Functions developers. Si está familiarizado con Azure Functions, comience con los siguientes recursos:If you're new to Azure Functions, start with the following resources:

Paquetes: Functions 1.xPackages - Functions 1.x

Los enlaces de Table Storage se proporcionan en el paquete NuGet Microsoft.Azure.WebJobs, versión 2.x.The Table storage bindings are provided in the Microsoft.Azure.WebJobs NuGet package, version 2.x. El código fuente del paquete se encuentra en el repositorio azure-webjobs-sdk de GitHub.Source code for the package is in the azure-webjobs-sdk GitHub repository.

En todos los entornos de desarrollo, se proporciona automáticamente compatibilidad para este enlace.Support for this binding is automatically provided in all development environments. No tiene que instalar el paquete manualmente ni que registrar la extensión.You don't have to manually install the package or register the extension.

Versión de SDK de Azure Storage en Functions 1.xAzure Storage SDK version in Functions 1.x

En Functions 1.x, los desencadenadores y enlaces de Storage usan la versión 7.2.1 del SDK de Azure Storage (paquete 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 hace referencia a una versión diferente del SDK de Storage y enlaza a un tipo de SDK de Storage en la signatura de función, el runtime de Functions puede notificar que no se puede enlazar con ese tipo.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 solución es asegurarse de que el proyecto hace referencia a WindowsAzure.Storage 7.2.1.The solution is to make sure your project references WindowsAzure.Storage 7.2.1.

Paquetes: Functions 2.xPackages - Functions 2.x

Los enlaces de almacenamiento de Table se proporcionan en el paquete NuGet Microsoft.Azure.WebJobs.Extensions.Storage, versión 3.x.The Table storage bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Storage NuGet package, version 3.x. El código fuente del paquete se encuentra en el repositorio azure-webjobs-sdk de GitHub.Source code for the package is in the azure-webjobs-sdk GitHub repository.

En la siguiente tabla se explica cómo agregar compatibilidad para este enlace en cada entorno de desarrollo.The following table tells how to add support for this binding in each development environment.

Entorno de desarrolloDevelopment environment Para agregar compatibilidad enTo add support in
Functions 2.xFunctions 2.x
Desarrollo local: biblioteca de clases C#Local development - C# class library Instalación del paqueteInstall the package
Desarrollo local: script de C#, JavaScript, F#, Java y PythonLocal development - C# script, JavaScript, F#, Java and Python Registro de la extensiónRegister the extension
Desarrollo con PortalPortal development Instalación al agregar el enlace de salidaInstall when adding output binding

Para saber cómo actualizar las extensiones de enlace existentes en el portal sin tener que volver a publicar su proyecto de aplicación de función, consulte Actualización de las extensiones.To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

EntradaInput

Use el enlace de entrada de Azure Table Storage para leer una tabla de una cuenta de Azure Storage.Use the Azure Table storage input binding to read a table in an Azure Storage account.

Ejemplo de entradaInput - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Entrada - ejemplo de C# - una entidadInput - C# example - one entity

En el ejemplo siguiente se muestra una función de C# que lee una única fila de la tabla.The following example shows a C# function that reads a single table row.

El valor "{queueTrigger}" de clave de fila indica que la clave de fila procede de la cadena del mensaje en la cola.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}");
    }
}

Entrada - ejemplo de C# - IQueryableInput - C# example - IQueryable

En el ejemplo siguiente se muestra una función de C# que lee varias filas de la tabla.The following example shows a C# function that reads multiple table rows. Tenga en cuenta que la clase MyPoco deriva 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}");
        }
    }
}

Entrada - ejemplo de C# - CloudTableInput - C# example - CloudTable

IQueryable no es compatible con el entorno de tiempo de ejecución de Functions v2.IQueryable isn't supported in the Functions v2 runtime. Una alternativa consiste en usar un parámetro del método CloudTable para leer la tabla mediante Azure Storage SDK.An alternative is to use a CloudTable method parameter to read the table by using the Azure Storage SDK. Este es un ejemplo de una función 2.x que consulta una tabla de registros de Azure Functions:Here's an example of a 2.x 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}");
            }
        }
    }
}

Para más información sobre cómo usar CloudTable, Consulte Introducción a Azure Table Storage.For more information about how to use CloudTable, see Get started with Azure Table storage.

Si intenta enlazar a CloudTable y obtiene un mensaje de error, asegúrese de que tiene una referencia a la versión correcta del SDK de Storage.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.

Entrada - ejemplo de script de C# - una entidadInput - C# script example - one entity

En el ejemplo siguiente se muestra un enlace de entrada de la tabla en un archivo function.json y código de script de C# que usa el enlace.The following example shows a table input binding in a function.json file and C# script code that uses the binding. La función usa un desencadenador de cola para leer una fila de tabla única.The function uses a queue trigger to read a single table row.

El archivo function.json especifica un valor partitionKey y un valor rowKey.The function.json file specifies a partitionKey and a rowKey. El valor rowKey "{queueTrigger}" de clave de fila indica que la clave de fila procede de la cadena del mensaje en la cola.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
}

En la sección de configuración se explican estas propiedades.The configuration section explains these properties.

Este es el código de script de 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; }
}

Entrada - ejemplo de script de C# - IQueryableInput - C# script example - IQueryable

En el ejemplo siguiente se muestra un enlace de entrada de la tabla en un archivo function.json y código de script de C# que usa el enlace.The following example shows a table input binding in a function.json file and C# script code that uses the binding. La función lee las entidades de una clave de partición que se especifica en un mensaje en la cola.The function reads entities for a partition key that is specified in a queue message.

Este es el archivo 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
}

En la sección de configuración se explican estas propiedades.The configuration section explains these properties.

El código de script de C# agrega una referencia al SDK de Azure Storage con el fin de que el tipo de entidad pueda derivar 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; }
}

Entrada - ejemplo de script de C# - CloudTableInput - C# script example - CloudTable

IQueryable no es compatible con el entorno de tiempo de ejecución de Functions v2.IQueryable isn't supported in the Functions v2 runtime. Una alternativa consiste en usar un parámetro del método CloudTable para leer la tabla mediante Azure Storage SDK.An alternative is to use a CloudTable method parameter to read the table by using the Azure Storage SDK. Este es un ejemplo de una función 2.x que consulta una tabla de registros de Azure Functions:Here's an example of a 2.x 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; }
}

Para más información sobre cómo usar CloudTable, Consulte Introducción a Azure Table Storage.For more information about how to use CloudTable, see Get started with Azure Table storage.

Si intenta enlazar a CloudTable y obtiene un mensaje de error, asegúrese de que tiene una referencia a la versión correcta del SDK de Storage.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.

Entrada: ejemplo de F#Input - F# example

En el ejemplo siguiente se muestra un enlace de entrada de la tabla en un archivo function.json y código de script de F# que usa el enlace.The following example shows a table input binding in a function.json file and F# script code that uses the binding. La función usa un desencadenador de cola para leer una fila de tabla única.The function uses a queue trigger to read a single table row.

El archivo function.json especifica un valor partitionKey y un valor rowKey.The function.json file specifies a partitionKey and a rowKey. El valor rowKey "{queueTrigger}" de clave de fila indica que la clave de fila procede de la cadena del mensaje en la cola.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
}

En la sección de configuración se explican estas propiedades.The configuration section explains these properties.

Este es el código de 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)

Entrada: ejemplo de JavaScriptInput - JavaScript example

En el ejemplo siguiente se muestra un enlace de entrada de la tabla en un archivo function.json y el código de JavaScript que usa el enlace.The following example shows a table input binding in a function.json file and JavaScript code that uses the binding. La función usa un desencadenador de cola para leer una fila de tabla única.The function uses a queue trigger to read a single table row.

El archivo function.json especifica un valor partitionKey y un valor rowKey.The function.json file specifies a partitionKey and a rowKey. El valor rowKey "{queueTrigger}" de clave de fila indica que la clave de fila procede de la cadena del mensaje en la cola.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
}

En la sección de configuración se explican estas propiedades.The configuration section explains these properties.

Este es el código de 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();
};

Entrada: ejemplo de JavaInput - Java example

En el ejemplo siguiente se muestra una función desencadenada por HTTP que devuelve el recuento total de elementos de una partición especificada en el almacenamiento de la tabla.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;
}

Entrada: atributosInput - attributes

Para bibliotecas de clases de C#, utilice los siguientes atributos para configurar un enlace de entrada de la tabla:In C# class libraries, use the following attributes to configure a table input binding:

  • TableAttributeTableAttribute

    El constructor del atributo toma el nombre de la tabla, la clave de partición y la clave de fila.The attribute's constructor takes the table name, partition key, and row key. Se puede usar en un parámetro de salida o en el valor devuelto de la función, como se muestra en el ejemplo siguiente: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)
    {
        ...
    }
    

    Puede establecer la propiedad Connection para especificar la cuenta de almacenamiento que se usará, tal como se muestra en el ejemplo siguiente: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)
    {
        ...
    }
    

    Para obtener un ejemplo completo, consulte Entrada: ejemplo de C#.For a complete example, see Input - C# example.

  • StorageAccountAttributeStorageAccountAttribute

    Proporciona otra manera de especificar la cuenta de almacenamiento que se debe usar.Provides another way to specify the storage account to use. El constructor toma el nombre de una configuración de aplicación que contiene una cadena de conexión de almacenamiento.The constructor takes the name of an app setting that contains a storage connection string. El atributo se puede aplicar en el nivel de clase, método o parámetro.The attribute can be applied at the parameter, method, or class level. En el ejemplo siguiente se muestran el nivel de clase y de método:The following example shows class level and method level:

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

La cuenta de almacenamiento que se debe usar se determina en el orden siguiente:The storage account to use is determined in the following order:

  • La propiedad Connection del atributo Table.The Table attribute's Connection property.
  • El atributo StorageAccount aplicado al mismo parámetro que el atributo Table.The StorageAccount attribute applied to the same parameter as the Table attribute.
  • El atributo StorageAccount aplicado a la función.The StorageAccount attribute applied to the function.
  • El atributo StorageAccount aplicado a la clase.The StorageAccount attribute applied to the class.
  • La cuenta de almacenamiento predeterminada de la aplicación de función (configuración de aplicación "AzureWebJobsStorage").The default storage account for the function app ("AzureWebJobsStorage" app setting).

Entrada: anotaciones de JavaInput - Java annotations

En la biblioteca en tiempo de ejecución de funciones de Java, utilice la anotación @TableInput en los parámetros cuyo valor provendría del almacenamiento de la tabla.In the Java functions runtime library, use the @TableInput annotation on parameters whose value would come from Table storage. Esta anotación se puede usar con tipos nativos de Java, POJO o valores que aceptan valores NULL mediante Optional.This annotation can be used with native Java types, POJOs, or nullable values using Optional.

Entrada: configuraciónInput - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que establece en el archivo function.json y el atributo Table.The following table explains the binding configuration properties that you set in the function.json file and the Table attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
typetype N/Dn/a Se debe establecer en table.Must be set to table. Esta propiedad se establece automáticamente cuando se crea el enlace en Azure Portal.This property is set automatically when you create the binding in the Azure portal.
direccióndirection N/Dn/a Se debe establecer en in.Must be set to in. Esta propiedad se establece automáticamente cuando se crea el enlace en Azure Portal.This property is set automatically when you create the binding in the Azure portal.
namename N/Dn/a Nombre de la variable que representa la tabla o la entidad en el código de la función.The name of the variable that represents the table or entity in function code.
tableNametableName TableNameTableName El nombre de la tabla.The name of the table.
partitionKeypartitionKey PartitionKeyPartitionKey Opcional.Optional. Clave de partición de la entidad de tabla que se va a leer.The partition key of the table entity to read. Consulte la sección acerca del uso para obtener información acerca de cómo usar esta propiedad.See the usage section for guidance on how to use this property.
rowKeyrowKey RowKeyRowKey Opcional.Optional. Clave de fila de la entidad de tabla que se va a leer.The row key of the table entity to read. Consulte la sección acerca del uso para obtener información acerca de cómo usar esta propiedad.See the usage section for guidance on how to use this property.
taketake TakeTake Opcional.Optional. Número máximo de entidades que se van a leer en JavaScript.The maximum number of entities to read in JavaScript. Consulte la sección acerca del uso para obtener información acerca de cómo usar esta propiedad.See the usage section for guidance on how to use this property.
filterfilter FilterFilter Opcional.Optional. Expresión de filtro de OData en la entrada de la tabla en JavaScript.An OData filter expression for table input in JavaScript. Consulte la sección acerca del uso para obtener información acerca de cómo usar esta propiedad.See the usage section for guidance on how to use this property.
conexiónconnection ConnectionConnection El nombre de una configuración de aplicación que contiene la cadena de conexión de almacenamiento que se usará para este enlace.The name of an app setting that contains the Storage connection string to use for this binding. Si el nombre de la configuración de aplicación comienza con "AzureWebJobs", puede especificar solo el resto del nombre aquí.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Por ejemplo, si establece connection en "MyStorage", el entorno en tiempo de ejecución de Functions busca una configuración de aplicación denominada "AzureWebJobsMyStorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Si deja connection vacía, el entorno en tiempo de ejecución de Functions usa la cadena de conexión de almacenamiento predeterminada en la configuración de aplicación que se denomina AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

Cuando desarrolla localmente, la configuración de aplicación pasa al archivo local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Uso de entradasInput - usage

El enlace de entrada de Table Storage admite los siguientes escenarios:The Table storage input binding supports the following scenarios:

  • Leer una fila en C# o en script de C#Read one row in C# or C# script

    Establezca partitionKey y rowKey.Set partitionKey and rowKey. Obtenga acceso a los datos de la tabla mediante un parámetro de método T <paramName>.Access the table data by using a method parameter T <paramName>. En script de C#, paramName es el valor especificado en la propiedad name de function.json.In C# script, paramName is the value specified in the name property of function.json. T suele ser un tipo que implementa ITableEntity o deriva de TableEntity.T is typically a type that implements ITableEntity or derives from TableEntity. Las propiedades filter y take no se utilizan en este escenario.The filter and take properties are not used in this scenario.

  • Leer una o varias filas en C# o en script de C#Read one or more rows in C# or C# script

    Obtenga acceso a los datos de la tabla mediante un parámetro de método IQueryable<T> <paramName>.Access the table data by using a method parameter IQueryable<T> <paramName>. En script de C#, paramName es el valor especificado en la propiedad name de function.json.In C# script, paramName is the value specified in the name property of function.json. T debe ser un tipo que implementa ITableEntity o deriva de TableEntity.T must be a type that implements ITableEntity or derives from TableEntity. Puede usar métodos IQueryable para realizar cualquier operación de filtrado necesaria.You can use IQueryable methods to do any filtering required. Las propiedades partitionKey, rowKey, filter y take no se utilizan en este escenario.The partitionKey, rowKey, filter, and take properties are not used in this scenario.

    Nota

    IQueryable no es compatible con el entorno de tiempo de ejecución de Functions v2.IQueryable isn't supported in the Functions v2 runtime. Una alternativa consiste en usar un parámetro del método CloudTable para leer la tabla mediante Azure Storage SDK.An alternative is to use a CloudTable paramName method parameter to read the table by using the Azure Storage SDK. Si intenta enlazar a CloudTable y obtiene un mensaje de error, asegúrese de que tiene una referencia a la versión correcta del SDK de Storage.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.

  • Leer una o varias filas en JavaScriptRead one or more rows in JavaScript

    Establezca las propiedades filter y take.Set the filter and take properties. No establezca partitionKey o rowKey.Don't set partitionKey or rowKey. Obtenga acceso a la entidad (o entidades) de la tabla de entradas mediante context.bindings.<name>.Access the input table entity (or entities) using context.bindings.<name>. Los objetos deserializados tienen las propiedades RowKey y PartitionKey.The deserialized objects have RowKey and PartitionKey properties.

SalidaOutput

Use un enlace de salida de Azure Table Storage para escribir entidades en una tabla de una cuenta de Azure Storage.Use an Azure Table storage output binding to write entities to a table in an Azure Storage account.

Nota

Este enlace de salida no permite actualizar las entidades existentes.This output binding does not support updating existing entities. Use la operación TableOperation.Replacedel SDK de Azure Storage para actualizar una entidad existente.Use the TableOperation.Replace operation from the Azure Storage SDK to update an existing entity.

Salida: ejemploOutput - example

Vea el ejemplo específico del lenguaje:See the language-specific example:

Salida: ejemplo de C#Output - C# example

En el ejemplo siguiente se muestra una función de C# que usa un desencadenador HTTP para escribir una única fila de la tabla.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 };
    }
}

Salida: ejemplo de script de C#Output - C# script example

En el ejemplo siguiente se muestra un enlace de salida de la tabla en un archivo function.json y código de script de C# que usa el enlace.The following example shows a table output binding in a function.json file and C# script code that uses the binding. La función escribe varias entidades de tabla.The function writes multiple table entities.

Este es el archivo 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
}

En la sección de configuración se explican estas propiedades.The configuration section explains these properties.

Este es el código de script de 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; }
}

Salida: ejemplo de F#Output - F# example

En el ejemplo siguiente se muestra un enlace de salida de la tabla en un archivo function.json y código de script de F# que usa el enlace.The following example shows a table output binding in a function.json file and F# script code that uses the binding. La función escribe varias entidades de tabla.The function writes multiple table entities.

Este es el archivo 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
}

En la sección de configuración se explican estas propiedades.The configuration section explains these properties.

Este es el código de 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() })

Salida: ejemplo de JavaScriptOutput - JavaScript example

En el ejemplo siguiente se muestra un enlace de salida de la tabla en un archivo function.json y una función de JavaScript que usa el enlace.The following example shows a table output binding in a function.json file and a JavaScript function that uses the binding. La función escribe varias entidades de tabla.The function writes multiple table entities.

Este es el archivo 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
}

En la sección de configuración se explican estas propiedades.The configuration section explains these properties.

Este es el código de 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();
};

Salida: atributosOutput - attributes

En las bibliotecas de clase C#, use TableAttribute.In C# class libraries, use the TableAttribute.

El constructor del atributo toma el nombre de la tabla.The attribute's constructor takes the table name. Se puede usar en un parámetro out o en el valor devuelto de la función, como se muestra en el ejemplo siguiente: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)
{
    ...
}

Puede establecer la propiedad Connection para especificar la cuenta de almacenamiento que se usará, tal como se muestra en el ejemplo siguiente: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)
{
    ...
}

Para obtener un ejemplo completo, consulte Salida: ejemplo de C#.For a complete example, see Output - C# example.

Puede usar el atributo StorageAccount para especificar la cuenta de almacenamiento en el nivel de clase, método o parámetro.You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. Para obtener más información, consulte Entrada: atributos.For more information, see Input - attributes.

Salida: configuraciónOutput - configuration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo Table.The following table explains the binding configuration properties that you set in the function.json file and the Table attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
typetype N/Dn/a Se debe establecer en table.Must be set to table. Esta propiedad se establece automáticamente cuando se crea el enlace en Azure Portal.This property is set automatically when you create the binding in the Azure portal.
direccióndirection N/Dn/a Se debe establecer en out.Must be set to out. Esta propiedad se establece automáticamente cuando se crea el enlace en Azure Portal.This property is set automatically when you create the binding in the Azure portal.
namename N/Dn/a Nombre de la variable que se usa en el código de la función que representa la tabla o entidad.The variable name used in function code that represents the table or entity. Se establece en $return para hacer referencia al valor devuelto de la función.Set to $return to reference the function return value.
tableNametableName TableNameTableName El nombre de la tabla.The name of the table.
partitionKeypartitionKey PartitionKeyPartitionKey Clave de partición de la entidad de tabla que se va a escribir.The partition key of the table entity to write. Consulte la sección acerca del uso para obtener información acerca de cómo usar esta propiedad.See the usage section for guidance on how to use this property.
rowKeyrowKey RowKeyRowKey Clave de fila de la entidad de tabla que se va a escribir.The row key of the table entity to write. Consulte la sección acerca del uso para obtener información acerca de cómo usar esta propiedad.See the usage section for guidance on how to use this property.
conexiónconnection ConnectionConnection El nombre de una configuración de aplicación que contiene la cadena de conexión de almacenamiento que se usará para este enlace.The name of an app setting that contains the Storage connection string to use for this binding. Si el nombre de la configuración de aplicación comienza con "AzureWebJobs", puede especificar solo el resto del nombre aquí.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Por ejemplo, si establece connection en "MyStorage", el entorno en tiempo de ejecución de Functions busca una configuración de aplicación denominada "AzureWebJobsMyStorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Si deja connection vacía, el entorno en tiempo de ejecución de Functions usa la cadena de conexión de almacenamiento predeterminada en la configuración de aplicación que se denomina AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

Cuando desarrolla localmente, la configuración de aplicación pasa al archivo local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Uso de salidasOutput - usage

El enlace de salida de Table Storage admite los siguientes escenarios:The Table storage output binding supports the following scenarios:

  • Escribir una fila en cualquier lenguajeWrite one row in any language

    En C# y script de C#, obtenga acceso a la entidad de tabla de salida con un parámetro de método como out T paramName o el valor devuelto de la función.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. En script de C#, paramName es el valor especificado en la propiedad name de function.json.In C# script, paramName is the value specified in the name property of function.json. T puede ser cualquier tipo serializable si las claves de partición y fila se proporcionan con el archivo function.json o el atributo 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. En caso contrario, T debe ser un tipo que incluya las propiedades PartitionKey y RowKey.Otherwise, T must be a type that includes PartitionKey and RowKey properties. En este escenario, T implementa normalmente ITableEntity o deriva de TableEntity, pero no es necesario.In this scenario, T typically implements ITableEntity or derives from TableEntity, but it doesn't have to.

  • Escribir una o varias filas en C# o en script de C#Write one or more rows in C# or C# script

    En C# y script de C#, obtenga acceso a la entidad de tabla de salida con un parámetro ICollector<T> paramName o 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. En script de C#, paramName es el valor especificado en la propiedad name de function.json.In C# script, paramName is the value specified in the name property of function.json. T especifica el esquema de las entidades que quiere agregar.T specifies the schema of the entities you want to add. Normalmente, T deriva de TableEntity o implementa ITableEntity, pero no tiene por qué ser así.Typically, T derives from TableEntity or implements ITableEntity, but it doesn't have to. Los valores de las claves de partición y de fila de function.json o del constructor del atributo Table no se usan en este escenario.The partition key and row key values in function.json or the Table attribute constructor are not used in this scenario.

    Una alternativa consiste en usar un parámetro del método CloudTable para escribir en la tabla mediante Azure Storage SDK.An alternative is to use a CloudTable method parameter to write to the table by using the Azure Storage SDK. Si intenta enlazar a CloudTable y obtiene un mensaje de error, asegúrese de que tiene una referencia a la versión correcta del SDK de Storage.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. Para un ejemplo de código que se enlaza a CloudTable, consulte los ejemplos de enlace de entrada para C# o script de C# que aparecieron anteriormente en este artículo.For an example of code that binds to CloudTable, see the input binding examples for C# or C# script earlier in this article.

  • Escribir una o varias filas en JavaScriptWrite one or more rows in JavaScript

    En las funciones de JavaScript, obtenga acceso a la salida de tabla mediante context.bindings.<name>.In JavaScript functions, access the table output using context.bindings.<name>.

Excepciones y códigos de retornoExceptions and return codes

EnlaceBinding ReferenciaReference
TablaTable Códigos de error de tablaTable Error Codes
Blob, tabla, colaBlob, Table, Queue Códigos de error de almacenamientoStorage Error Codes
Blob, tabla, colaBlob, Table, Queue Solución de problemasTroubleshooting

Pasos siguientesNext steps