Associações de armazenamento de tabelas do Azure FunctionsAzure Table storage bindings for Azure Functions

Este artigo explica como trabalhar com associações de armazenamento de Tabela do Azure no Azure Functions.This article explains how to work with Azure Table storage bindings in Azure Functions. O Azure Functions dá suporte a associações de entrada e saída para armazenamento de Tabelas do Azure.Azure Functions supports input and output bindings for Azure Table storage.

Essas são as informações de referência para desenvolvedores do Azure Functions.This is reference information for Azure Functions developers. Se for novo no Azure Functions, comece com os seguintes recursos:If you're new to Azure Functions, start with the following resources:

Pacotes - Functions 1. xPackages - Functions 1.x

As associações de armazenamento de Tabelas são fornecidas no pacote NuGet Microsoft.Azure.WebJobs, versão 2.x.The Table storage bindings are provided in the Microsoft.Azure.WebJobs NuGet package, version 2.x. O código-fonte do pacote está no repositório GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

O suporte para essa associação é fornecido automaticamente em todos os ambientes de desenvolvimento.Support for this binding is automatically provided in all development environments. Você não precisa instalar o pacote ou registrar a extensão manualmente.You don't have to manually install the package or register the extension.

Versão do SDK de Armazenamento do Microsoft Azure em Funções 1. xAzure Storage SDK version in Functions 1.x

Em Funções de 1. x, os gatilhos de armazenamento e associações usam a versão 7.2.1 do SDK de Armazenamento do Microsoft Azure (windowsazure pacote NuGet).In Functions 1.x, the Storage triggers and bindings use version 7.2.1 of the Azure Storage SDK (WindowsAzure.Storage NuGet package). Se você referenciar uma versão diferente do SDK do armazenamento e associar a um tipo de SDK de armazenamento na sua assinatura de função, o tempo de execução de funções pode relatar se não é possível associar a esse 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. A solução é verificar as referências do projeto windowsazure 7.2.1.The solution is to make sure your project references WindowsAzure.Storage 7.2.1.

Pacotes - Functions 2. xPackages - Functions 2.x

As associações de Armazenamento de Tabelas são fornecidas no pacote NuGet Microsoft.Azure.WebJobs.Extensions.Storage, versão 3.x.The Table storage bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Storage NuGet package, version 3.x. O código-fonte do pacote está no repositório GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

A tabela a seguir informa como adicionar suporte para essa associação em cada ambiente de desenvolvimento.The following table tells how to add support for this binding in each development environment.

Ambiente de desenvolvimentoDevelopment environment Para adicionar suporteTo add support
Desenvolvimento local - biblioteca de classes do C#Local development - C# class library Instalar o pacoteInstall the package
Desenvolvimento local - script do C#, JavaScript, F#, Java e PythonLocal development - C# script, JavaScript, F#, Java and Python Registrar a extensãoRegister the extension
Desenvolvimento de portalPortal development Instalar ao adicionar uma associação de saídaInstall when adding output binding

Para saber como atualizar as extensões de associação existentes no portal sem precisar republicar o projeto de aplicativo de funções, consulte Atualizar as extensões.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 a associação de entrada de armazenamento de Tabela do Azure para ler uma tabela em uma conta de Armazenamento do Azure.Use the Azure Table storage input binding to read a table in an Azure Storage account.

Entrada - exemploInput - example

Consulte o exemplo específico a um idioma:See the language-specific example:

Entrada - exemplo de C# - uma entidadeInput - C# example - one entity

O exemplo a seguir mostra uma função C# que lê uma linha da tabela.The following example shows a C# function that reads a single table row.

O valor de chave de linha “{queueTrigger}” indica que a chave de linha foi obtida da cadeia de caracteres da mensagem da fila.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 - exemplo de C# - IQueryableInput - C# example - IQueryable

O exemplo a seguir mostra uma função C# que lê várias linhas da tabela.The following example shows a C# function that reads multiple table rows. Observe que a MyPoco classe 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 - exemplo de C# - CloudTableInput - C# example - CloudTable

IQueryable não tem suporte no runtime do Functions v2.IQueryable isn't supported in the Functions v2 runtime. Uma alternativa é usar um CloudTable parâmetro do método para ler a tabela usando o SDK de Armazenamento do Azure.An alternative is to use a CloudTable method parameter to read the table by using the Azure Storage SDK. Veja um exemplo de uma função 2.x que consulta uma tabela de log do 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 obter mais informações sobre como usar o CloudTable, consulte Introdução ao Armazenamento de Tabelas do Azure.For more information about how to use CloudTable, see Get started with Azure Table storage.

Se você tentar associar CloudTable e receber uma mensagem de erro, certifique-se de ter uma referência para a versão correta do SDK do Armazenamento.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 - exemplo de script de C# - uma entidadeInput - C# script example - one entity

O exemplo a seguir mostra uma associação de entrada de tabela em um arquivo function.json e código script C# que usa a associação.The following example shows a table input binding in a function.json file and C# script code that uses the binding. A função usa um gatilho de fila para ler uma linha da tabela.The function uses a queue trigger to read a single table row.

O arquivo function.json especifica um partitionKey e um rowKey.The function.json file specifies a partitionKey and a rowKey. O rowKey valor “{queueTrigger}” indica que a chave de linha foi obtida da cadeia de caracteres da mensagem da fila.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
}

A seção configuração explica essas propriedades.The configuration section explains these properties.

Aqui está o código de script do 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 - exemplo de script de C# - IQueryableInput - C# script example - IQueryable

O exemplo a seguir mostra uma associação de entrada de tabela em um arquivo function.json e código script C# que usa a associação.The following example shows a table input binding in a function.json file and C# script code that uses the binding. A função lê entidades para uma chave de partição especificada em uma mensagem da fila.The function reads entities for a partition key that is specified in a queue message.

Aqui está o arquivo 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
}

A seção configuração explica essas propriedades.The configuration section explains these properties.

O código script C# adiciona uma referência ao SDK de Armazenamento do Azure para que o tipo de entidade possa 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 - exemplo de script de C# - CloudTableInput - C# script example - CloudTable

IQueryable não tem suporte no runtime do Functions v2.IQueryable isn't supported in the Functions v2 runtime. Uma alternativa é usar um CloudTable parâmetro do método para ler a tabela usando o SDK de Armazenamento do Azure.An alternative is to use a CloudTable method parameter to read the table by using the Azure Storage SDK. Veja um exemplo de uma função 2.x que consulta uma tabela de log do 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 obter mais informações sobre como usar o CloudTable, consulte Introdução ao Armazenamento de Tabelas do Azure.For more information about how to use CloudTable, see Get started with Azure Table storage.

Se você tentar associar CloudTable e receber uma mensagem de erro, certifique-se de ter uma referência para a versão correta do SDK do Armazenamento.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 - exemplo #FInput - F# example

O exemplo a seguir mostra uma associação de entrada de tabela em um arquivo function.json e código script F# que usa a associação.The following example shows a table input binding in a function.json file and F# script code that uses the binding. A função usa um gatilho de fila para ler uma linha da tabela.The function uses a queue trigger to read a single table row.

O arquivo function.json especifica um partitionKey e um rowKey.The function.json file specifies a partitionKey and a rowKey. O rowKey valor “{queueTrigger}” indica que a chave de linha foi obtida da cadeia de caracteres da mensagem da fila.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
}

A seção configuração explica essas propriedades.The configuration section explains these properties.

O código F# é o seguinte: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 - exemplo de JavaScriptInput - JavaScript example

O exemplo a seguir mostra uma associação de entrada de tabela em um arquivofunction.json e o código JavaScript que usa a associação.The following example shows a table input binding in a function.json file and JavaScript code that uses the binding. A função usa um gatilho de fila para ler uma linha da tabela.The function uses a queue trigger to read a single table row.

O arquivo function.json especifica um partitionKey e um rowKey.The function.json file specifies a partitionKey and a rowKey. O rowKey valor “{queueTrigger}” indica que a chave de linha foi obtida da cadeia de caracteres da mensagem da fila.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
}

A seção configuração explica essas propriedades.The configuration section explains these properties.

Aqui está o código 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 - exemplo de JavaInput - Java example

O exemplo a seguir mostra uma função disparada por HTTP que retorna a contagem total de itens em uma partição especificada no Armazenamento de Tabelas.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

Em bibliotecas de classes C#, use os seguintes atributos para configurar uma associação de entrada da tabela:In C# class libraries, use the following attributes to configure a table input binding:

  • TableAttributeTableAttribute

    O construtor do atributo usa o nome da tabela, a chave de partição e a chave de linha.The attribute's constructor takes the table name, partition key, and row key. Ele pode ser usado em um parâmetro de saída ou no valor de retorno da função, conforme mostrado no exemplo a seguir: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)
    {
        ...
    }
    

    Você pode definir a Connection propriedade para especificar a conta de armazenamento para usar, conforme mostrado no exemplo a seguir: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 ver um exemplo completo, confira Entrada - exemplo de C#.For a complete example, see Input - C# example.

  • StorageAccountAttributeStorageAccountAttribute

    Oferece uma maneira de especificar a conta de armazenamento para usar.Provides another way to specify the storage account to use. O construtor toma o nome de uma configuração de aplicativo que contenha uma cadeia de conexão de armazenamento.The constructor takes the name of an app setting that contains a storage connection string. O atributo pode ser aplicado no nível de classe, método ou parâmetro.The attribute can be applied at the parameter, method, or class level. O exemplo a seguir mostra o nível de classe e 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( //...
    {
        ...
    }
    

A conta de armazenamento a ser usada é determinada na seguinte ordem:The storage account to use is determined in the following order:

  • A propriedade Table do atributoConnection.The Table attribute's Connection property.
  • O StorageAccount atributo aplicado ao mesmo parâmetro do Table atributo.The StorageAccount attribute applied to the same parameter as the Table attribute.
  • O StorageAccount atributo aplicado à função.The StorageAccount attribute applied to the function.
  • O StorageAccount atributo aplicado à classe.The StorageAccount attribute applied to the class.
  • A conta de armazenamento padrão para a função de aplicativo (configuração de aplicativo "AzureWebJobsStorage").The default storage account for the function app ("AzureWebJobsStorage" app setting).

Entrada - anotações de JavaInput - Java annotations

Na biblioteca de runtime de funções Java, use a anotação @TableInput nos parâmetros cujo valor possa ser proveniente do Armazenamento de Tabelas.In the Java functions runtime library, use the @TableInput annotation on parameters whose value would come from Table storage. Esta anotação pode ser usada com tipos Java nativos, POJOs ou valores anuláveis usando > opcional<T.This annotation can be used with native Java types, POJOs, or nullable values using Optional<T>.

Entrada - configuraçãoInput - configuration

A tabela a seguir explica as propriedades de configuração de associação que você definir no arquivo function.json e o Table atributo.The following table explains the binding configuration properties that you set in the function.json file and the Table attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DESCRIÇÃODescription
tipotype n/dn/a Deve ser definido como table.Must be set to table. Esse parâmetro é definido automaticamente quando você cria a associação no portal do Azure.This property is set automatically when you create the binding in the Azure portal.
directiondirection n/dn/a Deve ser definido como in.Must be set to in. Esse parâmetro é definido automaticamente quando você cria a associação no portal do Azure.This property is set automatically when you create the binding in the Azure portal.
namename n/dn/a O nome da variável que representa a tabela ou entidade no código de função.The name of the variable that represents the table or entity in function code.
tableNametableName TableNameTableName O nome da tabela.The name of the table.
partitionKeypartitionKey PartitionKeyPartitionKey Opcional.Optional. Chave de partição da entidade de tabela para leitura.The partition key of the table entity to read. Consulte a seção de uso para obter orientação sobre como usar essa propriedade.See the usage section for guidance on how to use this property.
rowKeyrowKey RowKeyRowKey Opcional.Optional. Chave de linha da entidade de tabela para leitura.The row key of the table entity to read. Consulte a seção de uso para obter orientação sobre como usar essa propriedade.See the usage section for guidance on how to use this property.
taketake TakeTake Opcional.Optional. O número máximo de entidades para ler em JavaScript.The maximum number of entities to read in JavaScript. Consulte a seção de uso para obter orientação sobre como usar essa propriedade.See the usage section for guidance on how to use this property.
filterfilter FilterFilter Opcional.Optional. Uma expressão de filtro OData para a entrada de tabela em JavaScript.An OData filter expression for table input in JavaScript. Consulte a seção de uso para obter orientação sobre como usar essa propriedade.See the usage section for guidance on how to use this property.
conexãoconnection ConexãoConnection O nome de uma configuração de aplicativo que contém uma cadeia de conexão de Armazenamento para usar para essa associação.The name of an app setting that contains the Storage connection string to use for this binding. Se o nome de configuração do aplicativo começar com "AzureWebJobs", você pode especificar apenas o resto do nome aqui.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Por exemplo, se você configurar connection para “MyStorage”, o runtime do Functions procura por uma configuração de aplicativo que esteja nomeada “AzureWebJobsMyStorage."For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Se você deixar connection vazio, o runtime de Functions usa a cadeia de caracteres de conexão de Armazenamento padrão na configuração de aplicativo chamada AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

Quando você estiver desenvolvendo localmente, as configurações de aplicativo serão adicionadas ao arquivo local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Entrada - usoInput - usage

A associação de entrada da Tabela de Armazenamento dá suporte aos seguintes cenários:The Table storage input binding supports the following scenarios:

  • Ler uma linha em C# ou o script do C#Read one row in C# or C# script

    Definir partitionKey e rowKey.Set partitionKey and rowKey. Acessar os dados da tabela usando um parâmetro de método T <paramName>.Access the table data by using a method parameter T <paramName>. No script do C#, paramName é o valor especificado na propriedade name de function.json.In C# script, paramName is the value specified in the name property of function.json. T geralmente é um tipo que implementa ITableEntity ou deriva de TableEntity.T is typically a type that implements ITableEntity or derives from TableEntity. As propriedades filter e take não são usadas neste cenário.The filter and take properties are not used in this scenario.

  • Ler uma ou mais linhas em C# ou o script do C#Read one or more rows in C# or C# script

    Acessar os dados da tabela usando um parâmetro de método IQueryable<T> <paramName>.Access the table data by using a method parameter IQueryable<T> <paramName>. No script do C#, paramName é o valor especificado na propriedade name de function.json.In C# script, paramName is the value specified in the name property of function.json. T geralmente é um tipo que implementa ITableEntity ou deriva de TableEntity.T must be a type that implements ITableEntity or derives from TableEntity. Você pode usar IQueryable métodos para fazer a filtragem necessária.You can use IQueryable methods to do any filtering required. As propriedades partitionKey, rowKey, filter e take não são usadas neste cenário.The partitionKey, rowKey, filter, and take properties are not used in this scenario.

    Observação

    IQueryable não tem suporte no runtime do Functions v2.IQueryable isn't supported in the Functions v2 runtime. Uma alternativa é usar um parâmetro do método paramName de CloudTable para ler a tabela usando o SDK de Armazenamento do Azure.An alternative is to use a CloudTable paramName method parameter to read the table by using the Azure Storage SDK. Se você tentar associar CloudTable e receber uma mensagem de erro, certifique-se de ter uma referência para a versão correta do SDK do Armazenamento.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.

  • Ler uma ou mais linhas em JavaScriptRead one or more rows in JavaScript

    Definir as propriedades filter e take.Set the filter and take properties. Não definir partitionKey ou rowKey.Don't set partitionKey or rowKey. Acesse a entidade (ou entidades) de tabela de entrada usando context.bindings.<BINDING_NAME>.Access the input table entity (or entities) using context.bindings.<BINDING_NAME>. Os objetos desserializados têm propriedades RowKey e PartitionKey.The deserialized objects have RowKey and PartitionKey properties.

SaídaOutput

Use uma associação de saída de armazenamento de Tabela do Azure para gravar entidades para uma tabela em uma conta de Armazenamento do Azure.Use an Azure Table storage output binding to write entities to a table in an Azure Storage account.

Observação

Essa associação de saída não dá suporte para atualização de entidades existentes.This output binding does not support updating existing entities. Use a TableOperation.Replace operação do SDK do Armazenamento do Microsoft Azure para atualizar uma entidade existente.Use the TableOperation.Replace operation from the Azure Storage SDK to update an existing entity.

Saída - exemploOutput - example

Consulte o exemplo específico a um idioma:See the language-specific example:

Saída - exemplo C#Output - C# example

O exemplo a seguir mostra uma função C# que usa um gatilho HTTP para gravar uma única linha de tabela.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 };
    }
}

Saída - exemplo de script C#Output - C# script example

O exemplo a seguir mostra uma associação de saída de tabela em um arquivo function.json e código script C# que usa a associação.The following example shows a table output binding in a function.json file and C# script code that uses the binding. A função escreve múltiplas entidades de tabela.The function writes multiple table entities.

Aqui está o arquivo 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
}

A seção configuração explica essas propriedades.The configuration section explains these properties.

Aqui está o código de script do 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; }
}

Saída - Exemplo #FOutput - F# example

O exemplo a seguir mostra uma associação de saída de tabela em um arquivo function.json e código script C# que usa a associação.The following example shows a table output binding in a function.json file and F# script code that uses the binding. A função escreve múltiplas entidades de tabela.The function writes multiple table entities.

Aqui está o arquivo 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
}

A seção configuração explica essas propriedades.The configuration section explains these properties.

O código F# é o seguinte: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() })

Saída - exemplo JavaScriptOutput - JavaScript example

O exemplo a seguir mostra uma associação de saída de tabela em um arquivo function.json e código script C# que usa a associação.The following example shows a table output binding in a function.json file and a JavaScript function that uses the binding. A função escreve múltiplas entidades de tabela.The function writes multiple table entities.

Aqui está o arquivo 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
}

A seção configuração explica essas propriedades.The configuration section explains these properties.

Aqui está o código 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();
};

Saída - atributosOutput - attributes

Em bibliotecas de classes do C#, use o TableAttribute.In C# class libraries, use the TableAttribute.

O construtor do atributo usa o nome da tabela.The attribute's constructor takes the table name. Ele pode ser usado em um out parâmetro ou no valor de retorno da função, conforme mostrado no exemplo a seguir: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)
{
    ...
}

Você pode definir a Connection propriedade para especificar a conta de armazenamento para usar, conforme mostrado no exemplo a seguir: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 ver um exemplo completo, consulte Saída – exemplo de C#.For a complete example, see Output - C# example.

Você pode usar o StorageAccount atributo para especificar a conta de armazenamento no nível de classe, método ou parâmetro.You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. Para obter mais informações, consulte Entrada - atributos.For more information, see Input - attributes.

Saída - configuraçãoOutput - configuration

A tabela a seguir explica as propriedades de configuração de associação que você definir no arquivo function.json e o Table atributo.The following table explains the binding configuration properties that you set in the function.json file and the Table attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DESCRIÇÃODescription
tipotype n/dn/a Deve ser definido como table.Must be set to table. Esse parâmetro é definido automaticamente quando você cria a associação no portal do Azure.This property is set automatically when you create the binding in the Azure portal.
directiondirection n/dn/a Deve ser definido como out.Must be set to out. Esse parâmetro é definido automaticamente quando você cria a associação no portal do Azure.This property is set automatically when you create the binding in the Azure portal.
namename n/dn/a O nome da variável usada no código da função que representa a tabela ou entidade.The variable name used in function code that represents the table or entity. Definido como $return para referenciar o valor de retorno da função.Set to $return to reference the function return value.
tableNametableName TableNameTableName O nome da tabela.The name of the table.
partitionKeypartitionKey PartitionKeyPartitionKey Chave de partição da entidade de tabela para gravar.The partition key of the table entity to write. Consulte a seção de uso para obter orientação sobre como usar essa propriedade.See the usage section for guidance on how to use this property.
rowKeyrowKey RowKeyRowKey A chave de linha da entidade de tabela para gravar.The row key of the table entity to write. Consulte a seção de uso para obter orientação sobre como usar essa propriedade.See the usage section for guidance on how to use this property.
conexãoconnection ConexãoConnection O nome de uma configuração de aplicativo que contém uma cadeia de conexão de Armazenamento para usar para essa associação.The name of an app setting that contains the Storage connection string to use for this binding. Se o nome de configuração do aplicativo começar com "AzureWebJobs", você pode especificar apenas o resto do nome aqui.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Por exemplo, se você configurar connection para “MyStorage”, o runtime do Functions procura por uma configuração de aplicativo que esteja nomeada “AzureWebJobsMyStorage."For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Se você deixar connection vazio, o runtime de Functions usa a cadeia de caracteres de conexão de Armazenamento padrão na configuração de aplicativo chamada AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

Quando você estiver desenvolvendo localmente, as configurações de aplicativo serão adicionadas ao arquivo local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Saída - usoOutput - usage

A associação de entrada de Armazenamento da Tabela dá suporte aos seguintes cenários:The Table storage output binding supports the following scenarios:

  • Gravar uma linha em qualquer idiomaWrite one row in any language

    Em C# e o script C#, acesse a entidade de tabela de saída usando um parâmetro de método como out T paramName ou valor de retorno da função.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. No script do C#, paramName é o valor especificado na propriedade name de function.json.In C# script, paramName is the value specified in the name property of function.json. Tpode ser qualquer tipo serializável, se a chave de partição e a chave de linha forem fornecidos pelo arquivo function.json ou o Table atributo.T can be any serializable type if the partition key and row key are provided by the function.json file or the Table attribute. Caso contrário, T deve ser um tipo que inclua PartitionKey e RowKey propriedades.Otherwise, T must be a type that includes PartitionKey and RowKey properties. Nesse cenário, T normalmente implementa ITableEntity ou deriva de TableEntity, mas ele não precisa.In this scenario, T typically implements ITableEntity or derives from TableEntity, but it doesn't have to.

  • Gravar uma ou mais linhas em C# ou no script do C#Write one or more rows in C# or C# script

    Em C# e o script C#, acesse a entidade de tabela de saída usando um parâmetro de método como 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. No script do C#, paramName é o valor especificado na propriedade name de function.json.In C# script, paramName is the value specified in the name property of function.json. T especifica o esquema das entidades que você deseja adicionar.T specifies the schema of the entities you want to add. Geralmente, T deriva de TableEntity ou implementa ITableEntity, mas isso não é obrigatório.Typically, T derives from TableEntity or implements ITableEntity, but it doesn't have to. A chave de partição e a linha valores de chave em function.json ou o Table construtor de atributo não são usados neste cenário.The partition key and row key values in function.json or the Table attribute constructor are not used in this scenario.

    Uma alternativa é usar um CloudTable parâmetro do método para gravar a tabela usando o SDK de Armazenamento do Azure.An alternative is to use a CloudTable method parameter to write to the table by using the Azure Storage SDK. Se você tentar associar CloudTable e receber uma mensagem de erro, certifique-se de ter uma referência para a versão correta do SDK do Armazenamento.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 um exemplo de código que associa a CloudTable, consulte os exemplos de associação de entrada para C# ou script de C# anteriormente neste artigo.For an example of code that binds to CloudTable, see the input binding examples for C# or C# script earlier in this article.

  • Gravar uma ou mais linhas em JavaScriptWrite one or more rows in JavaScript

    Em funções do JavaScript, acesse a tabela de saída usando context.bindings.<BINDING_NAME>.In JavaScript functions, access the table output using context.bindings.<BINDING_NAME>.

Exceções e códigos de retornoExceptions and return codes

AssociaçãoBinding ReferênciaReference
tabelaTable Códigos de erro de tabelasTable Error Codes
Blob, tabela, filaBlob, Table, Queue Códigos de erro de armazenamentoStorage Error Codes
Blob, tabela, filaBlob, Table, Queue Solução de problemasTroubleshooting

Próximas etapasNext steps