Biblioteca de clientes das Tabelas do Azure para Java – versão 12.3.16
As Tabelas do Azure são um serviço que armazena dados NoSQL estruturados na nuvem, fornecendo um repositório de chaves/atributos com um design sem esquema. As Tabelas do Azure oferecem aos desenvolvedores flexibilidade e escalabilidade com todas as melhores partes da nuvem do Azure.
Código-fonte | Pacote (Maven) | Documentação | de referência da APIDocumentação do produto | Amostras
Introdução
Incluir o pacote
Incluir o arquivo da BOM
Inclua o azure-sdk-bom em seu projeto para assumir a dependência da versão ga (disponibilidade geral) da biblioteca. No trecho a seguir, substitua o espaço reservado {bom_version_to_target} pelo número de versão. Para saber mais sobre o BOM, consulte o BOM README do SDK do AZURE.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
e inclua a dependência direta na seção dependências sem a marca de versão, conforme mostrado abaixo.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-data-tables</artifactId>
</dependency>
</dependencies>
Incluir dependência direta
Se você quiser assumir a dependência de uma versão específica da biblioteca que não está presente no BOM, adicione a dependência direta ao seu projeto da seguinte maneira.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-data-tables</artifactId>
<version>12.3.16</version>
</dependency>
Pré-requisitos
- JDK (Java Development Kit) com a versão 8 ou superior
- Assinatura do Azure
- Uma conta de armazenamento do Azure existente ou uma conta da API de Tabela do Azure Cosmos DB
Criar uma conta de armazenamento
Para criar uma Conta de Armazenamento, você pode usar o Portal do Azure ou a CLI do Azure.
az storage account create \
--resource-group <resource-group-name> \
--name <storage-account-name> \
--location <location>
A URL da conta de armazenamento, posteriormente identificada como <your-table-account-url>
, seria formatada da seguinte maneira http(s)://<storage-account-name>.table.core.windows.net
.
Criar uma conta da API de Tabela do Cosmos DB
Para criar uma conta da API de Tabela do Cosmos DB, você pode usar o Portal do Azure ou a CLI do Azure.
az cosmosdb create \
--resource-group <resource-group-name> \
--name <cosmosdb-account-name> \
--capabilities EnableTable
A URL da conta da API de Tabela, posteriormente identificada como <your-table-account-url>
, seria formatada da seguinte maneira http(s)://<cosmosdb-account-name>.table.cosmosdb.azure.com
.
Autenticar o cliente
Cada solicitação feita ao serviço Tabelas deve ser autorizada usando uma cadeia de conexão, credencial de chave nomeada, Assinatura de Acesso Compartilhado ou credenciais de token. Os exemplos abaixo demonstram o uso desses métodos.
Observação: somente os pontos de extremidade da API de Armazenamento do Azure atualmente dão suporte à autorização do AAD por meio de credenciais de token.
Cadeia de conexão
Um cadeia de conexão inclui as informações de autenticação necessárias para que seu aplicativo acesse dados em uma tabela do Azure em runtime usando a autorização de Chave Compartilhada. Consulte Autenticar com uma cadeia de conexão para obter um exemplo de como usar um cadeia de conexão com um TableServiceClient
.
Você pode obter sua cadeia de conexão no Portal do Azure (clique em Chaves de acesso em Configurações na folha Conta de Armazenamento do Portal ou Cadeia de Conexão em Configurações na folha da conta do Portal Cosmos DB) ou usando a CLI do Azure:
# Storage account
az storage account show-connection-string \
--resource-group <resource-group-name> \
--name <storage-account-name>
# Cosmos DB Table API account
az cosmosdb list-connection-strings \
--resource-group <resource-group-name> \
--name <cosmosdb-account-name>
Credencial de chave compartilhada
A autorização com chave compartilhada usa as chaves de acesso de sua conta e outros parâmetros para produzir uma cadeia de caracteres de assinatura criptografada que é passada na solicitação no cabeçalho de autorização. Consulte Autenticar com uma credencial de Chave Compartilhada para obter um exemplo de como usar a autorização de chave nomeada com um TableServiceClient
.
Para usar a autorização de Chave Nomeada, você precisará do nome da conta e da URL, bem como de uma chave de acesso da conta. Você pode obter sua chave de acesso primária no Portal do Azure (clique em Chaves de acesso em Configurações na folha Conta de Armazenamento do Portal ou Cadeia de Conexão em Configurações na folha da conta do Portal Cosmos DB) ou usando a CLI do Azure:
# Storage account
az storage account keys list \
--resource-group <resource-group-name> \
--account-name <storage-account-name>
# Cosmos DB Table API account
az cosmosdb list-keys \
--resource-group <resource-group-name> \
--name <cosmosdb-account-name>
SAS (Assinatura de Acesso Compartilhado)
Uma Assinatura de Acesso Compartilhado permite que os administradores delegam acesso granular a uma tabela do Azure sem compartilhar a chave de acesso diretamente. Você pode controlar quais recursos o cliente pode acessar, quais permissões ele tem nesses recursos e por quanto tempo a SAS é válida, entre outros parâmetros. Ele depende das chaves de acesso da conta e de outros parâmetros para produzir uma cadeia de caracteres de assinatura criptografada que é passada na solicitação na cadeia de caracteres de consulta. Consulte Autenticar com uma SAS (Assinatura de Acesso Compartilhado) para obter um exemplo de como usar assinaturas de acesso compartilhado com um TableServiceClient
.
Para usar a autorização de token SAS, você precisará do nome da conta e da URL, bem como da SAS. Você pode obter sua SAS no Portal do Azure (clique em Assinatura de acesso compartilhado em Configurações na folha Conta de Armazenamento do Portal) ou usando a CLI do Azure:
# Account-level SAS
az storage account generate-sas \
--account-name <storage-or-cosmosdb-account-name> \
--services t \
--resource-types <resource-types> \
--permissions <permissions> \
--expiry <expiry-date>
# Table-level SAS
az storage table generate-sas \
--name <table-name>
TokenCredential
As Tabelas do Azure fornecem integração com o AAD (Azure Active Directory) para autenticação baseada em identidade de solicitações para o serviço Tabela ao direcionar um ponto de extremidade de Armazenamento. Com o AAD, você pode usar o RBAC (controle de acesso baseado em função) para conceder acesso aos recursos da Tabela do Azure a usuários, grupos ou aplicativos.
Para acessar um recurso de tabela com um TokenCredential
, a identidade autenticada deve ter a função "Colaborador de Dados da Tabela de Armazenamento" ou "Leitor de Dados da Tabela de Armazenamento".
Com o azure-identity
pacote, você pode autorizar diretamente solicitações em ambientes de desenvolvimento e produção.
Para saber mais sobre Azure AD integração no Armazenamento do Azure, consulte o LEIAME de Identidade do Azure.
Principais conceitos
- TableServiceClient – Um
TableServiceClient
é um objeto cliente que permite interagir com o Serviço de Tabela para criar, listar e excluir tabelas. - TableClient – Um
TableClient
é um objeto cliente que permite que você interaja com uma tabela específica para criar, upsert, atualizar, obter, listar e excluir entidades dentro dela. - Tabela – uma tabela é uma coleção de entidades. As tabelas não impõem um esquema nas entidades, o que significa que uma única tabela pode conter entidades com diferentes conjuntos de propriedades.
- Entidade – uma entidade é um conjunto de propriedades, semelhante a uma linha de banco de dados. Uma entidade no Armazenamento do Azure pode ser de até 1MB de tamanho. Uma entidade no Azure Cosmos DB pode ser de até 2MB de tamanho. Uma entidade tem uma chave de partição e uma chave de linha que juntas identificam exclusivamente a entidade dentro da tabela.
- Propriedades – uma propriedade é um par nome-valor. Cada entidade pode incluir até 252 propriedades para armazenar dados. Cada entidade possui também três propriedades do sistema que especificam uma chave de partição, uma chave de linha e um carimbo de hora.
- Chave de Partição – a chave de partição de uma entidade identifica a partição dentro da tabela à qual a entidade pertence. As entidades com a mesma chave de partição podem ser consultadas mais rapidamente e inseridas/atualizadas em operações atômicas.
- Chave de Linha – a chave de linha de uma entidade é seu identificador exclusivo dentro de uma partição.
Os usos comuns do serviço Tabelas incluem:
- Armazenamento de TBs de dados estruturados capazes de atender a aplicativos de dimensionamento da Web
- Armazenar conjuntos de dados que não exigem junções complexas, chaves estrangeiras ou procedimentos armazenados e podem ser des normalizados para acesso rápido
- Consulta rápida de dados usando um índice clusterizado
- Acessando dados usando o protocolo OData
Exemplos
- Autenticar um cliente
- Criar, listar e excluir tabelas do Azure
- Criar, listar e excluir entidades de tabela
Autenticar um cliente
Autenticar com um cadeia de conexão
Para usar um cadeia de conexão para autorizar seu cliente, chame o método do connectionString
construtor com seu cadeia de conexão.
TableServiceClient tableServiceClient = new TableServiceClientBuilder()
.connectionString("<your-connection-string>")
.buildClient();
Autenticar com uma chave compartilhada
Para usar uma Chave Compartilhada para autorizar seu cliente, crie uma instância do com o nome da sua conta e a chave de AzureNamedKeyCredential
acesso. Chame o método do construtor com a URL da endpoint
conta e o credential
método com o AzureNamedKeyCredential
objeto que você criou.
AzureNamedKeyCredential credential = new AzureNamedKeyCredential("<your-account-name>", "<account-access-key>");
TableServiceClient tableServiceClient = new TableServiceClientBuilder()
.endpoint("<your-table-account-url>")
.credential(credential)
.buildClient();
Autenticar com uma SAS (Assinatura de Acesso Compartilhado)
Para usar uma SAS para autorizar seu cliente, chame o método do construtor com a URL da endpoint
conta e o sasToken
método com sua SAS.
TableServiceClient tableServiceClient = new TableServiceClientBuilder()
.endpoint("<your-table-account-url>")
.sasToken("<sas-token-string>")
.buildClient();
Autenticar com credenciais de token
Para autorizar seu cliente por meio do AAD, crie uma instância de uma classe de credenciais que implementa TokenCredential
. Chame o método do construtor com a URL da endpoint
conta e o credential
método com o TokenCredential
objeto que você criou.
TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
TableServiceClient tableServiceClient = new TableServiceClientBuilder()
.endpoint("<your-table-account-url>")
.credential(tokenCredential)
.buildClient();
Criar, listar e excluir tabelas do Azure
Construir um TableServiceClient
Construa um TableServiceClient
criando uma instância de TableServiceClientBuilder
e, em seguida, chamando os métodos ou buildAsyncClient
do buildClient
construtor.
TableServiceClient tableServiceClient = new TableServiceClientBuilder()
.connectionString("<your-connection-string>") // or use any of the other authentication methods
.buildClient();
Criar uma tabela
Crie uma tabela chamando o TableServiceClient
método do .createTable
Um TableClient
será retornado, esse cliente permite executar operações na tabela. Uma exceção será gerada se houver uma tabela com o nome fornecido.
TableClient tableClient = tableServiceClient.createTable(tableName);
Como alternativa, você pode chamar o createTableIfNotExists
método que criará a tabela somente se essa tabela não existir e não gerar uma exceção. Um TableClient
também será retornado.
TableClient tableClient = tableServiceClient.createTableIfNotExists(tableName);
Listar tabelas
Liste ou consulte o conjunto de tabelas existentes chamando o TableServiceClient
método do listTables
, opcionalmente passando uma ListTablesOptions
instância para filtrar ou limitar os resultados da consulta. Consulte Opções de consulta com suporte para obter detalhes sobre as opções de consulta com suporte.
ListTablesOptions options = new ListTablesOptions()
.setFilter(String.format("TableName eq '%s'", tableName));
for (TableItem tableItem : tableServiceClient.listTables(options, null, null)) {
System.out.println(tableItem.getName());
}
Excluir uma tabela
Exclua uma tabela chamando o TableServiceClient
método do .deleteTable
tableServiceClient.deleteTable(tableName);
Criar, listar e excluir entidades de tabela
Construir um TableClient
Construa um TableClient
criando uma instância de TableClientBuilder
, chamando o método do tableName
construtor com o nome da tabela e chamando seus buildClient
métodos ou buildAsyncClient
.
TableClient tableClient = new TableClientBuilder()
.connectionString("<your-connection-string>") // or use any of the other authentication methods
.tableName(tableName)
.buildClient();
Como alternativa, um TableClient
pode ser recuperado de um existente TableServiceClient
chamando seu getTableClient
método.
TableClient tableClient = tableServiceClient.getTableClient(tableName);
Criar uma entidade
Crie uma nova TableEntity
instância, fornecendo a chave de partição e a chave de linha da entidade a ser criada, opcionalmente adicionando propriedades ao objeto criado. Em seguida, passe o objeto para o TableClient
método do .createEntity
Uma exceção será gerada se uma entidade com a chave de partição fornecida e a chave de linha existirem dentro da tabela.
TableEntity entity = new TableEntity(partitionKey, rowKey)
.addProperty("Product", "Marker Set")
.addProperty("Price", 5.00)
.addProperty("Quantity", 21);
tableClient.createEntity(entity);
Listar entidades
Liste ou consulte o conjunto de entidades dentro da tabela chamando o TableClient
método 's listEntities
, opcionalmente passando uma ListEntitiesOptions
instância para filtrar, selecionar ou limitar os resultados da consulta. Consulte Opções de consulta com suporte para obter detalhes sobre as opções de consulta com suporte.
List<String> propertiesToSelect = new ArrayList<>();
propertiesToSelect.add("Product");
propertiesToSelect.add("Price");
ListEntitiesOptions options = new ListEntitiesOptions()
.setFilter(String.format("PartitionKey eq '%s'", partitionKey))
.setSelect(propertiesToSelect);
for (TableEntity entity : tableClient.listEntities(options, null, null)) {
Map<String, Object> properties = entity.getProperties();
System.out.printf("%s: %.2f%n", properties.get("Product"), properties.get("Price"));
}
Excluir uma entidade
Exclua uma entidade chamando o TableClient
método do .deleteEntity
tableClient.deleteEntity(partitionKey, rowKey);
Solução de problemas
Geral
Quando você interage com o serviço Tabelas usando a biblioteca tabelas do Azure para Java, os erros retornados pelo serviço correspondem aos mesmos códigos http status retornados para solicitações de API REST.
Por exemplo, se você tentar criar uma tabela que já existe, um 409
erro será retornado, indicando "Conflito".
// Create the table if it doesn't already exist.
tableServiceClient.createTableIfNotExists(tableName);
// Now attempt to create the same table unconditionally.
try {
tableServiceClient.createTable(tableName);
} catch (TableServiceException e) {
System.out.println(e.getResponse().getStatusCode()); // 409
}
Registro em log
A habilitação do log pode ajudar a descobrir informações úteis sobre falhas. Para ver um log de solicitações e respostas HTTP, defina a AZURE_LOG_LEVEL
variável de ambiente como a verbosidade desejada. Consulte LogLevel para obter uma descrição dos níveis de log disponíveis.
Próximas etapas
Introdução aos nossos exemplos de Tabela.
Contribuição
Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder e de fato concede, os direitos de usar sua contribuição.
Quando você envia uma solicitação de pull, um bot do CLA determina automaticamente se você precisa fornecer um CLA e preencher a PR corretamente (por exemplo, rótulo, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que usam nosso CLA.
Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para obter mais informações, confira as Perguntas frequentes sobre o Código de Conduta ou contate opencode@microsoft.com para enviar outras perguntas ou comentários.