Краткое руководство. Использование Azure Cosmos DB для таблицы с пакетом SDK Azure для Go
В этом кратком руководстве описано, как развернуть базовое приложение Azure Cosmos DB для таблицы с помощью пакета SDK Azure для Go. Azure Cosmos DB для таблицы — это хранилище данных без схемы, позволяющее приложениям хранить структурированные данные таблицы в облаке. Вы узнаете, как создавать таблицы, строки и выполнять основные задачи в ресурсе Azure Cosmos DB с помощью пакета SDK Azure для Go.
Пакет исходного кода | библиотеки (Go) | Azure Developer CLI
Необходимые компоненты
- Azure Developer CLI
- Docker Desktop
Go
1.21 или более поздней версии
Если у вас нет учетной записи Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Инициализация проекта
Используйте интерфейс командной строки разработчика Azure (azd
) для создания учетной записи Azure Cosmos DB для таблицы и развертывания контейнерного примера приложения. Пример приложения использует клиентская библиотека для управления, создания, чтения и запроса примеров данных.
Откройте терминал в пустом каталоге.
Если вы еще не прошли проверку подлинности, выполните проверку подлинности в интерфейсе командной строки разработчика Azure с помощью
azd auth login
. Выполните действия, указанные средством для проверки подлинности в CLI с помощью предпочитаемых учетных данных Azure.azd auth login
Используется
azd init
для инициализации проекта.azd init --template cosmos-db-table-go-quickstart
Во время инициализации настройте уникальное имя среды.
Разверните учетную запись Azure Cosmos DB с помощью
azd up
. Шаблоны Bicep также развертывают пример веб-приложения.azd up
В процессе подготовки выберите подписку, требуемое расположение и целевую группу ресурсов. Дождитесь завершения процесса подготовки. Процесс может занять около пяти минут.
После завершения подготовки ресурсов Azure в выходные данные будет включен URL-адрес работающего веб-приложения.
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io> SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
Используйте URL-адрес консоли для перехода к веб-приложению в браузере. Просмотрите выходные данные запущенного приложения.
Установка клиентской библиотеки
Клиентская библиотека доступна через Go в качестве aztables
пакета.
Откройте терминал и перейдите в папку
/src
.cd ./src
Если пакет еще не установлен, установите
aztables
его с помощьюgo install
.go install github.com/Azure/azure-sdk-for-go/sdk/data/aztables
Откройте и просмотрите файл src/go.mod , чтобы убедиться, что запись
github.com/Azure/azure-sdk-for-go/sdk/data/aztables
существует.
Объектная модель
Имя | Описание |
---|---|
ServiceClient |
Этот тип является основным типом клиента и используется для управления метаданными или базами данных на уровне учетной записи. |
Client |
Этот тип представляет клиент для таблицы в учетной записи. |
Примеры кода
Пример кода в шаблоне использует таблицу с именем cosmicworks-products
. В cosmicworks-products
таблице содержатся такие сведения, как имя, категория, количество, цена, уникальный идентификатор и флаг продажи для каждого продукта. Контейнер использует уникальный идентификатор в качестве ключа строки и категории в качестве ключа секции.
аутентификация клиента;
В этом примере создается новый экземпляр ServiceClient
типа.
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
return err
}
client, err := aztables.NewServiceClient("<azure-cosmos-db-table-account-endpoint>", credential)
if err != nil {
log.Fatal(err)
}
Получение таблицы
В этом примере создается экземпляр Client
типа с помощью NewClient
функции ServiceClient
типа.
table, err := client.NewClient("<azure-cosmos-db-table-name>")
if err != nil {
log.Fatal(err)
}
Создание сущности
Самый простой способ создать сущность в таблице — создать экземпляр типа aztables.EDMEntity
. RowKey
Задайте и PartitionKey
свойства с помощью aztables.Entity
типа, а затем задайте дополнительные свойства с помощью строки карты.
entity := aztables.EDMEntity{
Entity: aztables.Entity{
RowKey: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
PartitionKey: "gear-surf-surfboards",
},
Properties: map[string]any{
"Name": "Yamba Surfboard",
"Quantity": 12,
"Price": 850.00,
"Clearance": false,
},
}
Объедините сущность в массив байтов, используя его, json.Marshal
а затем создайте сущность в таблице с помощью UpsertEntity
.
bytes, err := json.Marshal(entity)
if err != nil {
panic(err)
}
_, err = table.UpsertEntity(context.TODO(), bytes, nil)
if err != nil {
panic(err)
}
Получение сущности
Вы можете получить определенную сущность из таблицы с помощью GetEntity
. Затем его можно использовать json.Unmarshal
для синтаксического анализа с помощью aztables.EDMEntity
типа.
rowKey := "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
partitionKey := "gear-surf-surfboards"
response, err := table.GetEntity(context.TODO(), partitionKey, rowKey, nil)
if err != nil {
panic(err)
}
var entity aztables.EDMEntity
err = json.Unmarshal(response.Value, &entity)
if err != nil {
panic(err)
}
Запросы к сущностям
После вставки сущности можно также запустить запрос, чтобы получить все сущности, соответствующие определенному фильтру, с помощью NewListEntitiesPager
строкового фильтра.
filter := "PartitionKey eq 'gear-surf-surfboards'"
options := &aztables.ListEntitiesOptions{
Filter: &filter,
}
pager := table.NewListEntitiesPager(options)
Анализ результатов запроса с разбивкой на страницы с помощью More
функции пейджера, чтобы определить, есть ли больше страниц, а затем NextPage
функция, чтобы получить следующую страницу результатов.
for pager.More() {
response, err := pager.NextPage(context.TODO())
if err != nil {
panic(err)
}
for _, entityBytes := range response.Entities {
var entity aztables.EDMEntity
err := json.Unmarshal(entityBytes, &entity)
if err != nil {
panic(err)
}
writeOutput(fmt.Sprintf("Found entity:\t%s\t%s", entity.Properties["Name"], entity.RowKey))
}
}
Очистка ресурсов
Если вам больше не нужен пример приложения или ресурсов, удалите соответствующее развертывание и все ресурсы.
azd down