Привязки хранилища таблиц Azure для службы "Функции Azure"Azure Table storage bindings for Azure Functions

В этой статье рассматривается работа с привязками хранилища таблиц Azure в Функциях Azure.This article explains how to work with Azure Table storage bindings in Azure Functions. Функции Azure поддерживают входные и выходные привязки для хранилища таблиц Azure.Azure Functions supports input and output bindings for Azure Table storage.

Это справочные сведения для разработчиков функций Azure.This is reference information for Azure Functions developers. Если вы новичок в функциях Azure, начните со следующих ресурсов:If you're new to Azure Functions, start with the following resources:

Пакеты – Функции 1.xPackages - Functions 1.x

Привязки службы "Хранилище таблиц" доступны в пакете NuGet Microsoft.Azure.WebJobs версии 2.х.The Table storage bindings are provided in the Microsoft.Azure.WebJobs NuGet package, version 2.x. Исходный код для пакета находится в репозитории GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

Поддержка этой привязки автоматически предоставляется во всех средах разработки.Support for this binding is automatically provided in all development environments. Не нужно вручную устанавливать пакет или регистрировать расширение.You don't have to manually install the package or register the extension.

Версия пакета SDK для службы хранилища Azure в решении "Функции" 1.xAzure Storage SDK version in Functions 1.x

В решении "Функции" 1.x триггеры и привязки службы хранилища используют версию 7.2.1 пакета SDK для службы хранилища Azure (пакет 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). Если указать другую версию пакета SDK для службы хранилища и использовать привязку к типу пакета SDK для службы хранилища в сигнатуре функции, то среда выполнения "Функции" может сообщить, что выполнить привязку к этому типу невозможно.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. Чтобы избежать этого, убедитесь, в вашем проекте указан пакет WindowsAzure.Storage 7.2.1.The solution is to make sure your project references WindowsAzure.Storage 7.2.1.

Packages — функции 2. x и более поздних версийPackages - Functions 2.x and higher

Привязки хранилища таблиц доступны в пакете NuGet Microsoft.Azure.WebJobs.Extensions.Storage версии 3.х.The Table storage bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Storage NuGet package, version 3.x. Исходный код для пакета находится в репозитории GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

В следующей таблице указано как добавить поддержку для этой привязки в каждой среде разработки.The following table tells how to add support for this binding in each development environment.

Среда разработкиDevelopment environment Добавление поддержкиTo add support
Локальная разработка – библиотека классов C#Local development - C# class library Установка пакетаInstall the package
Локальная разработка — скрипт C#, JavaScript, F#, Java и PythonLocal development - C# script, JavaScript, F#, Java and Python Регистрация расширенияRegister the extension
Разработка на порталеPortal development Установка при добавлении выходной привязкиInstall when adding output binding

Дополнительные сведения об обновлении существующих расширений привязки на портале, не переиздавая проект приложения-функции, см. раздел Обновление расширений.To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

Входные данныеInput

Используйте входную привязку хранилища таблиц Azure для чтения таблицы в учетной записи хранения Azure.Use the Azure Table storage input binding to read a table in an Azure Storage account.

Пример входных данныхInput - example

Языковой пример см. в разделах:See the language-specific example:

Пример входных данных C# — одна сущностьInput - C# example - one entity

В следующем примере показана функция C#, которая считывает одну строку таблицы.The following example shows a C# function that reads a single table row.

Значение ключа строки {queueTrigger} указывает, что ключ строки получен из строки сообщения очереди.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}");
    }
}

Пример входных данных C# — IQueryableInput - C# example - IQueryable

В следующем примере показана функция C#, которая считывает несколько строк таблицы.The following example shows a C# function that reads multiple table rows. Обратите внимание, что класс MyPoco является производным от 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}");
        }
    }
}

Пример входных данных C# — CloudTableInput - C# example - CloudTable

IQueryable не поддерживается в среде выполнения Функций версии 2.IQueryable isn't supported in the Functions v2 runtime. Альтернативой является использование параметра метода CloudTable для чтения таблицы с помощью пакета SDK службы хранилища Azure.An alternative is to use a CloudTable method parameter to read the table by using the Azure Storage SDK. Ниже приведен пример функции, которая запрашивает таблицу журнала функций Azure: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}");
            }
        }
    }
}

Дополнительную информацию об использовании CloudTable см. в статье Начало работы с хранилищем таблиц Azure и API таблиц Azure Cosmos DB с помощью .NET.For more information about how to use CloudTable, see Get started with Azure Table storage.

Если при попытке привязать к CloudTable вы получаете сообщение об ошибке, убедитесь, что у вас есть ссылка на правильную версию пакета SDK для службы хранилища.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.

Пример входных данных скрипта C# — одна сущностьInput - C# script example - one entity

В следующем примере показана входная привязка таблицы в файле function.json и коде скрипта C#, который использует привязку.The following example shows a table input binding in a function.json file and C# script code that uses the binding. Функция использует триггер очереди для чтения одной строки таблицы.The function uses a queue trigger to read a single table row.

Файл function.json определяет partitionKey и rowKey.The function.json file specifies a partitionKey and a rowKey. Значение rowKey "{queueTrigger}" указывает, что ключ строки получен из строки сообщения очереди.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
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже приведен код скрипта 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; }
}

Пример входных данных скрипта C# — IQueryableInput - C# script example - IQueryable

В следующем примере показана входная привязка таблицы в файле function.json и коде скрипта C#, который использует привязку.The following example shows a table input binding in a function.json file and C# script code that uses the binding. Функция считывает сущности ключа раздела, который указан в очереди сообщений.The function reads entities for a partition key that is specified in a queue message.

Ниже показан файл 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
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

В коде скрипта C# добавляется ссылка на пакет SDK для службы хранилища Azure, чтобы тип сущности мог быть производным от 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; }
}

Пример входных данных скрипта C# — CloudTableInput - C# script example - CloudTable

IQueryable не поддерживается в среде выполнения функций для версий 2. x и выше.)IQueryable isn't supported in the Functions runtime for versions 2.x and higher). Альтернативой является использование параметра метода CloudTable для чтения таблицы с помощью пакета SDK службы хранилища Azure.An alternative is to use a CloudTable method parameter to read the table by using the Azure Storage SDK. Ниже приведен пример функции, которая запрашивает таблицу журнала функций Azure: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; }
}

Дополнительную информацию об использовании CloudTable см. в статье Начало работы с хранилищем таблиц Azure и API таблиц Azure Cosmos DB с помощью .NET.For more information about how to use CloudTable, see Get started with Azure Table storage.

Если при попытке привязать к CloudTable вы получаете сообщение об ошибке, убедитесь, что у вас есть ссылка на правильную версию пакета SDK для службы хранилища.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.

Пример входных данных F#Input - F# example

В следующем примере показана входная привязка таблицы в файле function.json и коде скрипта F#, который использует привязку.The following example shows a table input binding in a function.json file and F# script code that uses the binding. Функция использует триггер очереди для чтения одной строки таблицы.The function uses a queue trigger to read a single table row.

Файл function.json определяет partitionKey и rowKey.The function.json file specifies a partitionKey and a rowKey. Значение rowKey "{queueTrigger}" указывает, что ключ строки получен из строки сообщения очереди.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
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже показан код 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)

Пример входных данных JavaScriptInput - JavaScript example

В следующем примере показана входная привязка таблицы в файле function.json и код JavaScript, который использует привязку.The following example shows a table input binding in a function.json file and JavaScript code that uses the binding. Функция использует триггер очереди для чтения одной строки таблицы.The function uses a queue trigger to read a single table row.

Файл function.json определяет partitionKey и rowKey.The function.json file specifies a partitionKey and a rowKey. Значение rowKey "{queueTrigger}" указывает, что ключ строки получен из строки сообщения очереди.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
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже показан код 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();
};

Входные данные в примере JavaInput - Java example

В следующем примере показана функция, активируемая HTTP, которая возвращает общее количество элементов в указанном разделе в Хранилище таблиц.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;
}

Входные атрибутыInput - attributes

В библиотеках класса C# используйте следующие атрибуты для настройки входной привязки таблицы:In C# class libraries, use the following attributes to configure a table input binding:

  • TableAttributeTableAttribute

    Конструктор атрибута принимает имя таблицы, ключ раздела и строки.The attribute's constructor takes the table name, partition key, and row key. Его можно использовать с параметром вывода или возвращаемым значением функции, как показано в следующем примере.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)
    {
        ...
    }
    

    Чтобы указать учетную запись хранения, которую нужно использовать, можно задать свойство Connection, как показано в следующем примере.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)
    {
        ...
    }
    

    Полный пример см. в разделе примеров входных данных C#.For a complete example, see Input - C# example.

  • StorageAccountAttributeStorageAccountAttribute

    Предоставляет еще один способ указать используемую учетную запись хранения.Provides another way to specify the storage account to use. Конструктор принимает имя параметра приложения, содержащего строку подключения к службе хранилища.The constructor takes the name of an app setting that contains a storage connection string. Атрибут может применяться на уровне класса, метода или параметра.The attribute can be applied at the parameter, method, or class level. Ниже показан пример уровня класса и метода.The following example shows class level and method level:

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

Используемая учетная запись хранения определяется в следующем порядке:The storage account to use is determined in the following order:

  • Свойство Table атрибута Connection.The Table attribute's Connection property.
  • Атрибут StorageAccount, примененный к тому же параметру, что и Table.The StorageAccount attribute applied to the same parameter as the Table attribute.
  • Атрибут StorageAccount, примененный к функции.The StorageAccount attribute applied to the function.
  • Атрибут StorageAccount, примененный к классу.The StorageAccount attribute applied to the class.
  • Учетная запись хранения по умолчанию для приложения-функции (параметр приложения AzureWebJobsStorage).The default storage account for the function app ("AzureWebJobsStorage" app setting).

Входные данные в заметках JavaInput - Java annotations

В библиотеке среды выполнения функций Java используйте заметку @TableInput для параметров, значения которых будут поступать из Хранилища таблиц.In the Java functions runtime library, use the @TableInput annotation on parameters whose value would come from Table storage. Эту аннотацию можно использовать с собственными типами Java, POJO или значениями, допускающими значение null, с помощью необязательного<T >.This annotation can be used with native Java types, POJOs, or nullable values using Optional<T>.

Входная конфигурацияInput - configuration

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json и атрибуте Table.The following table explains the binding configuration properties that you set in the function.json file and the Table attribute.

свойство function.jsonfunction.json property Свойство атрибутаAttribute property DescriptionDescription
typetype Н/Дn/a Нужно задать значение table.Must be set to table. Это свойство задается автоматически при создании привязки на портале Azure.This property is set automatically when you create the binding in the Azure portal.
directiondirection Н/Дn/a Нужно задать значение in.Must be set to in. Это свойство задается автоматически при создании привязки на портале Azure.This property is set automatically when you create the binding in the Azure portal.
namename Н/Дn/a Имя переменной, представляющей таблицу или сущность в коде функции.The name of the variable that represents the table or entity in function code.
tableNametableName TableNameTableName Имя таблицы.The name of the table.
partitionKeypartitionKey PartitionKeyPartitionKey Необязательный параметр.Optional. Ключ раздела сущности таблицы, которую нужно считать.The partition key of the table entity to read. Дополнительные сведения о том, как использовать это свойство, см. в этом разделе.See the usage section for guidance on how to use this property.
rowKeyrowKey RowKeyRowKey Необязательный параметр.Optional. Ключ строки сущности таблицы, которую нужно считать.The row key of the table entity to read. Дополнительные сведения о том, как использовать это свойство, см. в этом разделе.See the usage section for guidance on how to use this property.
taketake TakeTake Необязательный параметр.Optional. Максимальное количество считываемых сущностей в JavaScript.The maximum number of entities to read in JavaScript. Дополнительные сведения о том, как использовать это свойство, см. в этом разделе.See the usage section for guidance on how to use this property.
filterfilter FilterFilter Необязательный параметр.Optional. Выражение фильтра OData для входных данных таблицы в JavaScript.An OData filter expression for table input in JavaScript. Дополнительные сведения о том, как использовать это свойство, см. в этом разделе.See the usage section for guidance on how to use this property.
connectionconnection СоединениеConnection Имя параметра приложения, содержащего строку подключения к службе хранилища, используемой для этой привязки.The name of an app setting that contains the Storage connection string to use for this binding. Если имя параметра приложения начинается с AzureWebJobs, можно указать только остальную часть имени.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Например, если для connection задано значение "MyStorage", среда выполнения функций ищет параметр приложения с именем "MyStorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "MyStorage." Если оставить строку connection пустой, среда выполнения службы "Функции" будет использовать строку подключения к службе хранилища по умолчанию для параметра приложения с именем AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

При локальной разработке параметры приложения перейдут в файл local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Использование входной привязкиInput - usage

Входная привязка хранилища таблиц применима в следующих сценариях:The Table storage input binding supports the following scenarios:

  • Чтение одной строки в коде или скрипте C#Read one row in C# or C# script

    Задайте значения для partitionKey и rowKey.Set partitionKey and rowKey. Получите доступ к данным таблицы с помощью параметра метода T <paramName>.Access the table data by using a method parameter T <paramName>. В скрипте C# paramName — это значение, заданное в свойстве name файла function.json.In C# script, paramName is the value specified in the name property of function.json. T обычно представляет собой тип, реализующий ITableEntity, или является производным от TableEntity.T is typically a type that implements ITableEntity or derives from TableEntity. Свойства filter и take не используются в этом сценарии.The filter and take properties are not used in this scenario.

  • Чтение одной или нескольких строк в коде или скрипте C#Read one or more rows in C# or C# script

    Получите доступ к данным таблицы с помощью параметра метода IQueryable<T> <paramName>.Access the table data by using a method parameter IQueryable<T> <paramName>. В скрипте C# paramName — это значение, заданное в свойстве name файла function.json.In C# script, paramName is the value specified in the name property of function.json. T должен представлять собой тип, реализующий ITableEntity, или быть производным от TableEntity.T must be a type that implements ITableEntity or derives from TableEntity. Для выполнения фильтрации можно использовать методы IQueryable.You can use IQueryable methods to do any filtering required. Свойства partitionKey, rowKey, filter и take не используются в этом сценарии.The partitionKey, rowKey, filter, and take properties are not used in this scenario.

    Примечание

    IQueryable не поддерживается в среде выполнения Функций версии 2.IQueryable isn't supported in the Functions v2 runtime. Альтернативой является использование параметра метода CloudTable paramName для чтения таблицы с помощью пакета SDK службы хранилища Azure.An alternative is to use a CloudTable paramName method parameter to read the table by using the Azure Storage SDK. Если при попытке привязать к CloudTable вы получаете сообщение об ошибке, убедитесь, что у вас есть ссылка на правильную версию пакета SDK для службы хранилища.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.

  • Чтение одной или нескольких строк в JavaScriptRead one or more rows in JavaScript

    Укажите свойства filter и take.Set the filter and take properties. Не определяйте свойства partitionKey и rowKey.Don't set partitionKey or rowKey. Получите доступ к сущности (или сущностям) входной таблицы, используя context.bindings.<BINDING_NAME>.Access the input table entity (or entities) using context.bindings.<BINDING_NAME>. Десериализированный объект имеет свойства RowKey и PartitionKey.The deserialized objects have RowKey and PartitionKey properties.

Выходные данныеOutput

Используйте выходную привязку хранилища таблиц Azure для записи сущностей в таблицу в учетной записи хранения Azure.Use an Azure Table storage output binding to write entities to a table in an Azure Storage account.

Примечание

Выходная привязка не поддерживает обновление существующих сущностей.This output binding does not support updating existing entities. Используйте соответствующий TableOperation из пакета SDK службы хранилища Azure , чтобы обновить имеющуюся сущность по мере необходимости.Use the appropriate TableOperation from the Azure Storage SDK to update an existing entity as required.

Пример выходных данныхOutput - example

Языковой пример см. в разделах:See the language-specific example:

Пример выходных данных C#Output - C# example

В следующем примере показана функция C#, которая использует триггер HTTP для записи одной строки таблицы.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 };
    }
}

Пример выходных данных скрипта C#Output - C# script example

В следующем примере показана выходная привязка таблицы в файле function.json и коде скрипта C#, который использует привязку.The following example shows a table output binding in a function.json file and C# script code that uses the binding. Эта функция записывает несколько сущностей в таблице.The function writes multiple table entities.

Ниже показан файл 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
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже приведен код скрипта 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; }
}

Пример выходных данных F#Output - F# example

В следующем примере показана выходная привязка таблицы в файле function.json и коде скрипта F#, который использует привязку.The following example shows a table output binding in a function.json file and F# script code that uses the binding. Эта функция записывает несколько сущностей в таблице.The function writes multiple table entities.

Ниже показан файл 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
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже показан код 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() })

Пример выходных данных JavaScriptOutput - JavaScript example

В следующем примере показана выходная привязка таблицы в файле function.json и функции JavaScript, которая использует привязку.The following example shows a table output binding in a function.json file and a JavaScript function that uses the binding. Эта функция записывает несколько сущностей в таблице.The function writes multiple table entities.

Ниже показан файл 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
}

В разделе Конфигурация описываются эти свойства.The configuration section explains these properties.

Ниже показан код 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();
};

Выходные атрибутыOutput - attributes

В библиотеках классов C# используйте TableAttribute.In C# class libraries, use the TableAttribute.

Конструктор атрибута использует имя таблицы.The attribute's constructor takes the table name. Его можно использовать с параметром out или возвращаемым значением функции, как показано в следующем примере.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)
{
    ...
}

Чтобы указать учетную запись хранения, которую нужно использовать, можно задать свойство Connection, как показано в следующем примере.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)
{
    ...
}

Полный пример см. в разделе Пример выходных данных C#.For a complete example, see Output - C# example.

Чтобы указать учетную запись хранения на уровне класса, метода или параметра, можно использовать атрибут StorageAccount.You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. Дополнительные сведения см. в разделе Входные атрибуты.For more information, see Input - attributes.

Выходная конфигурацияOutput - configuration

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json и атрибуте Table.The following table explains the binding configuration properties that you set in the function.json file and the Table attribute.

свойство function.jsonfunction.json property Свойство атрибутаAttribute property DescriptionDescription
typetype Н/Дn/a Нужно задать значение table.Must be set to table. Это свойство задается автоматически при создании привязки на портале Azure.This property is set automatically when you create the binding in the Azure portal.
directiondirection Н/Дn/a Нужно задать значение out.Must be set to out. Это свойство задается автоматически при создании привязки на портале Azure.This property is set automatically when you create the binding in the Azure portal.
namename Н/Дn/a Имя переменной, используемое в функции кода, которая представляет таблицу или сущность.The variable name used in function code that represents the table or entity. Задайте значение $return, ссылающееся на возвращаемое значение функции.Set to $return to reference the function return value.
tableNametableName TableNameTableName Имя таблицы.The name of the table.
partitionKeypartitionKey PartitionKeyPartitionKey Ключ раздела сущности таблицы, которую нужно записать.The partition key of the table entity to write. Дополнительные сведения о том, как использовать это свойство, см. в этом разделе.See the usage section for guidance on how to use this property.
rowKeyrowKey RowKeyRowKey Ключ строки сущности таблицы, которую нужно записать.The row key of the table entity to write. Дополнительные сведения о том, как использовать это свойство, см. в этом разделе.See the usage section for guidance on how to use this property.
connectionconnection СоединениеConnection Имя параметра приложения, содержащего строку подключения к службе хранилища, используемой для этой привязки.The name of an app setting that contains the Storage connection string to use for this binding. Если имя параметра приложения начинается с AzureWebJobs, можно указать только остальную часть имени.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Например, если для connection задано значение "MyStorage", среда выполнения функций ищет параметр приложения с именем "MyStorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "MyStorage." Если оставить строку connection пустой, среда выполнения службы "Функции" будет использовать строку подключения к службе хранилища по умолчанию для параметра приложения с именем AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

При локальной разработке параметры приложения перейдут в файл local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Использование выходной привязкиOutput - usage

Выходная привязка хранилища таблиц применима в следующих сценариях:The Table storage output binding supports the following scenarios:

  • Запись одной строки на любом языкеWrite one row in any language

    В коде и скрипте C# получите доступ к сущности выходной таблицы с помощью параметра метода (например, out T paramName) или возвращаемого значения функции.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. В скрипте C# paramName — это значение, заданное в свойстве name файла function.json.In C# script, paramName is the value specified in the name property of function.json. T может быть любым сериализируемым типом, если ключ раздела и строки предоставляются в файле function.json или атрибуте 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. В противном случае T должен быть типом со свойствами PartitionKey и RowKey.Otherwise, T must be a type that includes PartitionKey and RowKey properties. В этом сценарии T обычно реализует ITableEntity или является производным от TableEntity (но необязательно).In this scenario, T typically implements ITableEntity or derives from TableEntity, but it doesn't have to.

  • Запись одной или нескольких строк в коде или скрипте C#Write one or more rows in C# or C# script

    В коде и скрипте C# получите доступ к сущности выходной таблицы с помощью параметра метода (например, ICollector<T> paramName или 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. В скрипте C# paramName — это значение, заданное в свойстве name файла function.json.In C# script, paramName is the value specified in the name property of function.json. В T указывается схема сущностей, которые нужно добавить.T specifies the schema of the entities you want to add. Как правило, T является производным от TableEntity или реализует ITableEntity, но это необязательно.Typically, T derives from TableEntity or implements ITableEntity, but it doesn't have to. Значения ключа раздела и строки в function.json или конструктора атрибута Table не используются в этом сценарии.The partition key and row key values in function.json or the Table attribute constructor are not used in this scenario.

    Альтернативой является использование параметра метода CloudTable для записи в таблицу с помощью пакета SDK службы хранилища Azure.An alternative is to use a CloudTable method parameter to write to the table by using the Azure Storage SDK. Если при попытке привязать к CloudTable вы получаете сообщение об ошибке, убедитесь, что у вас есть ссылка на правильную версию пакета SDK для службы хранилища.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. Пример кода, который привязывается к CloudTable, см. в примерах входной привязки для C# или скрипта C# ранее в этой статье.For an example of code that binds to CloudTable, see the input binding examples for C# or C# script earlier in this article.

  • Запись одной или нескольких строк в JavaScriptWrite one or more rows in JavaScript

    В функциях JavaScript доступ к выходным данным таблицы можно получить, используя context.bindings.<BINDING_NAME>.In JavaScript functions, access the table output using context.bindings.<BINDING_NAME>.

Исключения и коды возвратаExceptions and return codes

ПривязкаBinding Справочные материалыReference
ТаблицыTable Коды ошибок таблицыTable Error Codes
Большой двоичный объект, таблица, очередьBlob, Table, Queue Коды ошибок хранилищаStorage Error Codes
Большой двоичный объект, таблица, очередьBlob, Table, Queue Устранение неполадокTroubleshooting

Дальнейшие действияNext steps