Class TableAsyncClient

java.lang.Object
com.azure.data.tables.TableAsyncClient

public final class TableAsyncClient extends Object
Provides an asynchronous service client for accessing a table in the Azure Tables service.

Overview

The client encapsulates the URL for the table within the Tables service endpoint, the name of the table, and the credentials for accessing the storage or CosmosDB table API account. It provides methods to create and delete the table itself, as well as methods to create, upsert, update, delete, list, and get entities within the table. These methods invoke REST API operations to make the requests and obtain the results that are returned.

Getting Started

Authenticating and building instances of this client are handled by TableClientBuilder. This sample shows how to authenticate and build a TableClient instance using the TableClientBuilder and a connection string.

 TableAsyncClient tableAsyncClient = new TableClientBuilder()
     .connectionString("connectionstring")
     .tableName("myTable")
     .buildAsyncClient();
 

For more information on building and authenticating, see the TableClientBuilder documentation.

The following code samples provide examples of common operations preformed with this client.


Create a TableEntity

The createEntity method can be used to create a table entity within a table in your Azure Storage or Azure Cosmos account.

The sample below creates a TableEntity with a partition key of "partitionKey" and a row key of "rowKey".

 TableEntity tableEntity = new TableEntity("partitionKey", "rowKey")
     .addProperty("Property", "Value");

 tableAsyncClient.createEntity(tableEntity)
     .contextWrite(Context.of("key1", "value1", "key2", "value2"))
     .subscribe(unused ->
         System.out.printf("Table entity with partition key '%s' and row key '%s' was created.", "partitionKey",
             "rowKey"));
 
Note: for a synchronous sample, refer to the synchronous client

Retrieve a TableEntity

The getEntity method can be used to retrieve a table entity within a table in your Azure Storage or Azure Cosmos account.

The sample below retrieves a TableEntity with a partition key of "partitionKey" and a row key of "rowKey".

 tableAsyncClient.getEntity("partitionKey", "rowKey")
     .contextWrite(Context.of("key1", "value1", "key2", "value2"))
     .subscribe(tableEntity ->
         System.out.printf("Retrieved entity with partition key '%s' and row key '%s'.",
             tableEntity.getPartitionKey(), tableEntity.getRowKey()));
 
Note: for a synchronous sample, refer to the synchronous client

Update a TableEntity

The updateEntity method can be used to update a table entity within a table in your Azure Storage or Azure Cosmos account.

The sample below updates a TableEntity with a partition key of "partitionKey" and a row key of "rowKey", adding a new property with a key of "Property" and a value of "Value".

 TableEntity myTableEntity = new TableEntity("partitionKey", "rowKey")
     .addProperty("Property", "Value");

 tableAsyncClient.updateEntity(myTableEntity, TableEntityUpdateMode.REPLACE)
     .contextWrite(Context.of("key1", "value1", "key2", "value2"))
     .subscribe(unused ->
         System.out.printf("Table entity with partition key '%s' and row key '%s' was updated/created.",
             "partitionKey", "rowKey"));
 
Note: for a synchronous sample, refer to the synchronous client

Listing TableEntities

The listEntities method can be used to list the entities within a table in your Azure Storage or Azure Cosmos account.

The sample below lists all TableEntities within the table without filtering out any entities.

 tableAsyncClient.listEntities()
     .subscribe(tableEntity ->
         System.out.printf("Retrieved entity with partition key '%s' and row key '%s'.%n",
             tableEntity.getPartitionKey(), tableEntity.getRowKey()));
 
List TableEntities with filtering and selecting

The sample below lists TableEntities within the table, filtering out any entities that do not have a partition key of "partitionKey" and a row key of "rowKey" and only selects the "name", "lastname", and "age" properties.

 List<String> propertiesToSelect = new ArrayList<>();
 propertiesToSelect.add("name");
 propertiesToSelect.add("lastname");
 propertiesToSelect.add("age");

 ListEntitiesOptions listEntitiesOptions = new ListEntitiesOptions()
     .setTop(15)
     .setFilter("PartitionKey eq 'MyPartitionKey' and RowKey eq 'MyRowKey'")
     .setSelect(propertiesToSelect);

 tableAsyncClient.listEntities(listEntitiesOptions)
     .subscribe(tableEntity -> {
         System.out.printf("Retrieved entity with partition key '%s', row key '%s' and properties:%n",
             tableEntity.getPartitionKey(), tableEntity.getRowKey());

         tableEntity.getProperties().forEach((key, value) ->
             System.out.printf("Name: '%s'. Value: '%s'.%n", key, value));
     });
 
Note: for a synchronous sample, refer to the synchronous client

Delete a TableEntity

The deleteEntity method can be used to delete a table entity within a table in your Azure Storage or Azure Cosmos account.

The sample below deletes a TableEntity with a partition key of "partitionKey" and a row key of "rowKey".

 tableAsyncClient.deleteEntity("partitionKey", "rowKey")
     .contextWrite(Context.of("key1", "value1", "key2", "value2"))
     .subscribe(unused ->
         System.out.printf("Table entity with partition key '%s' and row key '%s' was deleted.", "partitionKey",
             "rowKey"));
 
Note: for a synchronous sample, refer to the synchronous client

Submit a transactional batch

The submitTransaction method can be used to submit a transactional batch of actions to perform on the table in your Azure Storage or Azure Cosmos account.

The sample below shows how to prepare and submit a transactional batch with multiple actions.

 List<TableTransactionAction> transactionActions = new ArrayList<>();

 String partitionKey = "markers";
 String firstEntityRowKey = "m001";
 String secondEntityRowKey = "m002";

 TableEntity firstEntity = new TableEntity(partitionKey, firstEntityRowKey)
     .addProperty("Type", "Dry")
     .addProperty("Color", "Red");

 transactionActions.add(new TableTransactionAction(TableTransactionActionType.CREATE, firstEntity));

 System.out.printf("Added create action for entity with partition key '%s', and row key '%s'.%n", partitionKey,
     firstEntityRowKey);

 TableEntity secondEntity = new TableEntity(partitionKey, secondEntityRowKey)
     .addProperty("Type", "Wet")
     .addProperty("Color", "Blue");

 transactionActions.add(new TableTransactionAction(TableTransactionActionType.CREATE, secondEntity));

 System.out.printf("Added create action for entity with partition key '%s', and row key '%s'.%n", partitionKey,
     secondEntityRowKey);

 tableAsyncClient.submitTransaction(transactionActions)
     .contextWrite(Context.of("key1", "value1", "key2", "value2"))
     .subscribe(tableTransactionResult -> {
         System.out.print("Submitted transaction. The ordered response status codes for the actions are:");

         tableTransactionResult.getTransactionActionResponses().forEach(tableTransactionActionResponse ->
             System.out.printf("%n%d", tableTransactionActionResponse.getStatusCode()));
     });
 
Note: for a synchronous sample, refer to the synchronous client
See Also:
  • Method Details

    • getTableName

      public String getTableName()
      Gets the name of the table.
      Returns:
      The name of the table.
    • getAccountName

      public String getAccountName()
      Gets the name of the account containing the table.
      Returns:
      The name of the account containing the table.
    • getTableEndpoint

      public String getTableEndpoint()
      Gets the endpoint for this table.
      Returns:
      The endpoint for this table.
    • getServiceVersion

      public TableServiceVersion getServiceVersion()
      Gets the REST API version used by this client.
      Returns:
      The REST API version used by this client.
    • generateSas

      public String generateSas(TableSasSignatureValues tableSasSignatureValues)
      Generates a service SAS for the table using the specified TableSasSignatureValues.

      Note: The client must be authenticated via AzureNamedKeyCredential.

      See TableSasSignatureValues for more information on how to construct a service SAS.

      Parameters:
      tableSasSignatureValues - TableSasSignatureValues.
      Returns:
      A String representing the SAS query parameters.
      Throws:
      IllegalStateException - If this TableAsyncClient is not authenticated with an AzureNamedKeyCredential.
    • createTable

      public Mono<TableItem> createTable()
      Creates the table within the Tables service.

      Code Samples

      Creates a table. Prints out the details of the created table.

       tableAsyncClient.createTable()
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(tableItem ->
               System.out.printf("Table with name '%s' was created.", tableItem.getName()));
       
      Returns:
      A Mono containing a TableItem that represents the table.
      Throws:
      TableServiceException - If a table with the same name already exists within the service.
    • createTableWithResponse

      public Mono<com.azure.core.http.rest.Response<TableItem>> createTableWithResponse()
      Creates the table within the Tables service.

      Code Samples

      Creates a table. Prints out the details of the HTTP response and the created table.

       tableAsyncClient.createTableWithResponse()
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(response ->
               System.out.printf("Response successful with status code: %d. Table with name '%s' was created.",
                   response.getStatusCode(), response.getValue().getName()));
       
      Returns:
      A Mono containing the HTTP response that in turn contains a TableItem that represents the table.
      Throws:
      TableServiceException - If a table with the same name already exists within the service.
    • deleteTable

      public Mono<Void> deleteTable()
      Deletes the table within the Tables service.

      Code Samples

      Deletes a table.

       tableAsyncClient.deleteTable()
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(unused -> System.out.print("Table was deleted."));
       
      Returns:
      An empty Mono.
      Throws:
      TableServiceException - If the request is rejected by the service.
    • deleteTableWithResponse

      public Mono<com.azure.core.http.rest.Response<Void>> deleteTableWithResponse()
      Deletes the table within the Tables service.

      Code Samples

      Deletes a table. Prints out the details of the HTTP response.

       tableAsyncClient.deleteTableWithResponse()
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(response ->
               System.out.printf("Table was deleted successfully with status code: %d.",
                   response.getStatusCode()));
       
      Returns:
      A Mono containing the HTTP response.
      Throws:
      TableServiceException - If the request is rejected by the service.
    • createEntity

      public Mono<Void> createEntity(TableEntity entity)
      Inserts an entity into the table.

      Code Samples

      Inserts an entity into the table. Prints out the details of the created entity.

       TableEntity tableEntity = new TableEntity("partitionKey", "rowKey")
           .addProperty("Property", "Value");
      
       tableAsyncClient.createEntity(tableEntity)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(unused ->
               System.out.printf("Table entity with partition key '%s' and row key '%s' was created.", "partitionKey",
                   "rowKey"));
       
      Parameters:
      entity - The entity to insert.
      Returns:
      An empty Mono.
      Throws:
      TableServiceException - If an entity with the same partition key and row key already exists within the table.
      IllegalArgumentException - If the provided entity is null.
    • createEntityWithResponse

      public Mono<com.azure.core.http.rest.Response<Void>> createEntityWithResponse(TableEntity entity)
      Inserts an entity into the table.

      Code Samples

      Inserts an entity into the table. Prints out the details of the HTTP response and the created entity.

       TableEntity myTableEntity = new TableEntity("partitionKey", "rowKey")
           .addProperty("Property", "Value");
      
       tableAsyncClient.createEntityWithResponse(myTableEntity)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(response ->
               System.out.printf("Response successful with status code: %d. Table entity with partition key '%s' and"
                   + " row key '%s' was created.", response.getStatusCode(), "partitionKey", "rowKey"));
       
      Parameters:
      entity - The entity to insert.
      Returns:
      A Mono containing the HTTP response.
      Throws:
      TableServiceException - If an entity with the same partition key and row key already exists within the table.
      IllegalArgumentException - If the provided entity is null.
    • upsertEntity

      public Mono<Void> upsertEntity(TableEntity entity)
      Inserts an entity into the table if it does not exist, or merges the entity with the existing entity otherwise.

      Code Samples

      Upserts an entity into the table. Prints out the details of the upserted entity.

       TableEntity tableEntity = new TableEntity("partitionKey", "rowKey")
           .addProperty("Property", "Value");
      
       tableAsyncClient.upsertEntity(tableEntity)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(unused ->
               System.out.printf("Table entity with partition key '%s' and row key '%s' was updated/created.",
                   "partitionKey", "rowKey"));
       
      Parameters:
      entity - The entity to upsert.
      Returns:
      An empty Mono.
      Throws:
      IllegalArgumentException - If the provided entity is null.
      TableServiceException - If the request is rejected by the service.
    • upsertEntityWithResponse

      public Mono<com.azure.core.http.rest.Response<Void>> upsertEntityWithResponse(TableEntity entity, TableEntityUpdateMode updateMode)
      Inserts an entity into the table if it does not exist, or updates the existing entity using the specified update mode otherwise. The default update mode is MERGE.

      When the update mode is MERGE, the provided entity's properties will be merged into the existing entity. When the update mode is REPLACE, the provided entity's properties will completely replace those in the existing entity.

      Code Samples

      Upserts an entity into the table with the specified update mode if said entity already exists. Prints out the details of the HTTP response and the upserted entity.

       TableEntity myTableEntity = new TableEntity("partitionKey", "rowKey")
           .addProperty("Property", "Value");
      
       tableAsyncClient.upsertEntityWithResponse(myTableEntity, TableEntityUpdateMode.REPLACE)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(response ->
               System.out.printf("Response successful with status code: %d. Table entity with partition key '%s' and"
                   + " row key '%s' was updated/created.", response.getStatusCode(), "partitionKey", "rowKey"));
       
      Parameters:
      entity - The entity to upsert.
      updateMode - The type of update to perform if the entity already exits.
      Returns:
      A Mono containing the HTTP response.
      Throws:
      IllegalArgumentException - If the provided entity is null.
      TableServiceException - If the request is rejected by the service.
    • updateEntity

      public Mono<Void> updateEntity(TableEntity entity)
      Updates an existing entity by merging the provided entity with the existing entity.

      Code Samples

      Updates a entity on the table. Prints out the details of the updated entity.

       TableEntity tableEntity = new TableEntity("partitionKey", "rowKey")
           .addProperty("Property", "Value");
      
       tableAsyncClient.updateEntity(tableEntity)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(unused ->
               System.out.printf("Table entity with partition key '%s' and row key '%s' was updated/created.",
                   "partitionKey", "rowKey"));
       
      Parameters:
      entity - The entity to update.
      Returns:
      An empty Mono.
      Throws:
      IllegalArgumentException - If the provided entity is null.
      TableServiceException - If no entity with the same partition key and row key exists within the table.
    • updateEntity

      public Mono<Void> updateEntity(TableEntity entity, TableEntityUpdateMode updateMode)
      Updates an existing entity using the specified update mode. The default update mode is MERGE.

      When the update mode is MERGE, the provided entity's properties will be merged into the existing entity. When the update mode is REPLACE, the provided entity's properties will completely replace those in the existing entity.

      Code Samples

      Updates a entity on the table with the specified update mode. Prints out the details of the updated entity.

       TableEntity myTableEntity = new TableEntity("partitionKey", "rowKey")
           .addProperty("Property", "Value");
      
       tableAsyncClient.updateEntity(myTableEntity, TableEntityUpdateMode.REPLACE)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(unused ->
               System.out.printf("Table entity with partition key '%s' and row key '%s' was updated/created.",
                   "partitionKey", "rowKey"));
       
      Parameters:
      entity - The entity to update.
      updateMode - The type of update to perform.
      Returns:
      An empty Mono.
      Throws:
      IllegalArgumentException - If the provided entity is null.
      TableServiceException - If no entity with the same partition key and row key exists within the table.
    • updateEntityWithResponse

      public Mono<com.azure.core.http.rest.Response<Void>> updateEntityWithResponse(TableEntity entity, TableEntityUpdateMode updateMode, boolean ifUnchanged)
      Updates an existing entity using the specified update mode. The default update mode is MERGE.

      When the update mode is MERGE, the provided entity's properties will be merged into the existing entity. When the update mode is REPLACE, the provided entity's properties will completely replace those in the existing entity.

      Code Samples

      Updates a entity on the table with the specified update mode if the ETags on both entities match. Prints out the details of the HTTP response updated entity.

       TableEntity someTableEntity = new TableEntity("partitionKey", "rowKey")
           .addProperty("Property", "Value");
      
       tableAsyncClient.updateEntityWithResponse(someTableEntity, TableEntityUpdateMode.REPLACE, true)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(response ->
               System.out.printf("Response successful with status code: %d. Table entity with partition key '%s' and"
                   + " row key '%s' was updated.", response.getStatusCode(), "partitionKey", "rowKey"));
       
      Parameters:
      entity - The entity to update.
      updateMode - The type of update to perform.
      ifUnchanged - When true, the ETag of the provided entity must match the ETag of the entity in the Table service. If the values do not match, the update will not occur and an exception will be thrown.
      Returns:
      A Mono containing the HTTP response.
      Throws:
      IllegalArgumentException - If the provided entity is null.
      TableServiceException - If no entity with the same partition key and row key exists within the table, or if ifUnchanged is true and the existing entity's ETag does not match that of the provided entity.
    • deleteEntity

      public Mono<Void> deleteEntity(String partitionKey, String rowKey)
      Deletes an entity from the table.

      Code Samples

      Deletes an entity on the table. Prints out the entity's partitionKey and rowKey.

       tableAsyncClient.deleteEntity("partitionKey", "rowKey")
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(unused ->
               System.out.printf("Table entity with partition key '%s' and row key '%s' was deleted.", "partitionKey",
                   "rowKey"));
       
      Parameters:
      partitionKey - The partition key of the entity.
      rowKey - The row key of the entity.
      Returns:
      An empty Mono.
      Throws:
      IllegalArgumentException - If the provided partitionKey or rowKey are null or empty.
      TableServiceException - If the request is rejected by the service.
    • deleteEntity

      public Mono<Void> deleteEntity(TableEntity entity)
      Deletes an entity from the table.

      Code Samples

      Deletes a entity on the table. Prints out the details of the deleted entity.

       TableEntity myTableEntity = new TableEntity("partitionKey", "rowKey")
           .addProperty("Property", "Value");
      
       tableAsyncClient.deleteEntity(myTableEntity)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(unused ->
               System.out.printf("Table entity with partition key '%s' and row key '%s' was created.", "partitionKey",
                   "rowKey"));
       
      Parameters:
      entity - The entity to delete.
      Returns:
      An empty Mono.
      Throws:
      TableServiceException - If the request is rejected by the service.
    • deleteEntityWithResponse

      public Mono<com.azure.core.http.rest.Response<Void>> deleteEntityWithResponse(TableEntity entity, boolean ifUnchanged)
      Deletes an entity from the table.

      Code Samples

      Deletes a entity on the table. Prints out the details of the HTTP response and the deleted entity.

       TableEntity someTableEntity = new TableEntity("partitionKey", "rowKey")
           .addProperty("Property", "Value");
      
       tableAsyncClient.deleteEntityWithResponse(someTableEntity, true)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(response ->
               System.out.printf("Response successful with status code: %d. Table entity with partition key '%s' and"
                   + " row key '%s' was deleted.", response.getStatusCode(), "partitionKey", "rowKey"));
       
      Parameters:
      entity - The table entity to delete.
      ifUnchanged - When true, the ETag of the provided entity must match the ETag of the entity in the Table service. If the values do not match, the update will not occur and an exception will be thrown.
      Returns:
      A Mono containing the HTTP response.
      Throws:
      TableServiceException - If the request is rejected by the service.
      IllegalArgumentException - If 'partitionKey' or 'rowKey' is null.
    • listEntities

      public com.azure.core.http.rest.PagedFlux<TableEntity> listEntities()
      Lists all entities within the table.

      Code Samples

      Lists all entities on the table. Prints out the details of the retrieved entities.

       tableAsyncClient.listEntities()
           .subscribe(tableEntity ->
               System.out.printf("Retrieved entity with partition key '%s' and row key '%s'.%n",
                   tableEntity.getPartitionKey(), tableEntity.getRowKey()));
       
      Returns:
      A PagedFlux containing all entities within the table.
      Throws:
      TableServiceException - If the request is rejected by the service.
    • listEntities

      public com.azure.core.http.rest.PagedFlux<TableEntity> listEntities(ListEntitiesOptions options)
      Lists entities using the parameters in the provided options.

      If the filter parameter in the options is set, only entities matching the filter will be returned. If the select parameter is set, only the properties included in the select parameter will be returned for each entity. If the top parameter is set, the maximum number of returned entities per page will be limited to that value.

      Code Samples

      Lists all entities on the table. Prints out the details of the HTTP response and all the retrieved entities.

       List<String> propertiesToSelect = new ArrayList<>();
       propertiesToSelect.add("name");
       propertiesToSelect.add("lastname");
       propertiesToSelect.add("age");
      
       ListEntitiesOptions listEntitiesOptions = new ListEntitiesOptions()
           .setTop(15)
           .setFilter("PartitionKey eq 'MyPartitionKey' and RowKey eq 'MyRowKey'")
           .setSelect(propertiesToSelect);
      
       tableAsyncClient.listEntities(listEntitiesOptions)
           .subscribe(tableEntity -> {
               System.out.printf("Retrieved entity with partition key '%s', row key '%s' and properties:%n",
                   tableEntity.getPartitionKey(), tableEntity.getRowKey());
      
               tableEntity.getProperties().forEach((key, value) ->
                   System.out.printf("Name: '%s'. Value: '%s'.%n", key, value));
           });
       
      Parameters:
      options - The filter, select, and top OData query options to apply to this operation.
      Returns:
      A PagedFlux containing matching entities within the table.
      Throws:
      IllegalArgumentException - If one or more of the OData query options in options is malformed.
      TableServiceException - If the request is rejected by the service.
    • getEntity

      public Mono<TableEntity> getEntity(String partitionKey, String rowKey)
      Gets a single entity from the table.

      Code Samples

      Gets an entity on the table. Prints out the details of the retrieved entity.

       tableAsyncClient.getEntity("partitionKey", "rowKey")
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(tableEntity ->
               System.out.printf("Retrieved entity with partition key '%s' and row key '%s'.",
                   tableEntity.getPartitionKey(), tableEntity.getRowKey()));
       
      Parameters:
      partitionKey - The partition key of the entity.
      rowKey - The partition key of the entity.
      Returns:
      A Mono containing the entity.
      Throws:
      IllegalArgumentException - If the provided partitionKey or rowKey are null or empty.
      TableServiceException - If no entity with the provided partitionKey and rowKey exists within the table.
    • getEntityWithResponse

      public Mono<com.azure.core.http.rest.Response<TableEntity>> getEntityWithResponse(String partitionKey, String rowKey, List<String> select)
      Gets a single entity from the table.

      Code Samples

      Gets an entity on the table. Prints out the details of the HTTP response retrieved entity.

       List<String> propertiesToSelect = new ArrayList<>();
       propertiesToSelect.add("name");
       propertiesToSelect.add("lastname");
       propertiesToSelect.add("age");
      
       tableAsyncClient.getEntityWithResponse("partitionKey", "rowKey", propertiesToSelect)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(response -> {
               TableEntity tableEntity = response.getValue();
      
               System.out.printf("Response successful with status code: %d. Retrieved entity with partition key '%s',"
                       + " row key '%s' and properties:", response.getStatusCode(), tableEntity.getPartitionKey(),
                   tableEntity.getRowKey());
      
               tableEntity.getProperties().forEach((key, value) ->
                   System.out.printf("%nName: '%s'. Value: '%s'.", key, value));
           });
       
      Parameters:
      partitionKey - The partition key of the entity.
      rowKey - The partition key of the entity.
      select - A list of properties to select on the entity.
      Returns:
      A Mono containing the HTTP response that in turn contains the entity.
      Throws:
      IllegalArgumentException - If the provided partitionKey or rowKey are null or if the select OData query option is malformed.
      TableServiceException - If no entity with the provided partitionKey and rowKey exists within the table.
    • getAccessPolicies

      public Mono<TableAccessPolicies> getAccessPolicies()
      Retrieves details about any stored access policies specified on the table that may be used with Shared Access Signatures.

      This operation is only supported on Azure Storage endpoints.

      Code Samples

      Gets a table's access policies. Prints out the details of the retrieved access policies.

       tableAsyncClient.getAccessPolicies()
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(accessPolicies ->
               accessPolicies.getIdentifiers().forEach(signedIdentifier ->
                   System.out.printf("Retrieved table access policy with id '%s'.", signedIdentifier.getId())));
       
      Returns:
      A Mono containing the table's access policies.
      Throws:
      TableServiceException - If the request is rejected by the service.
    • getAccessPoliciesWithResponse

      public Mono<com.azure.core.http.rest.Response<TableAccessPolicies>> getAccessPoliciesWithResponse()
      Retrieves details about any stored access policies specified on the table that may be used with Shared Access Signatures.

      This operation is only supported on Azure Storage endpoints.

      Code Samples

      Gets a table's access policies. Prints out the details of the HTTP response and the retrieved access policies.

       List<String> propertiesToSelect = new ArrayList<>();
       propertiesToSelect.add("name");
       propertiesToSelect.add("lastname");
       propertiesToSelect.add("age");
      
       tableAsyncClient.getAccessPoliciesWithResponse()
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(response -> {
               System.out.printf("Response successful with status code: %d. Retrieved table access policies with the"
                   + " following IDs:", response.getStatusCode());
      
               response.getValue().getIdentifiers().forEach(signedIdentifier ->
                   System.out.printf("%n%s", signedIdentifier.getId()));
           });
       
      Returns:
      A Mono containing an HTTP response that in turn contains the table's access policies.
      Throws:
      TableServiceException - If the request is rejected by the service.
    • setAccessPolicies

      public Mono<Void> setAccessPolicies(List<TableSignedIdentifier> tableSignedIdentifiers)
      Sets stored access policies for the table that may be used with Shared Access Signatures.

      This operation is only supported on Azure Storage endpoints.

      Code Samples

      Sets stored access policies on a table.

       List<TableSignedIdentifier> signedIdentifiers = new ArrayList<>();
      
       signedIdentifiers.add(new TableSignedIdentifier("id1")
           .setAccessPolicy(new TableAccessPolicy()
               .setStartsOn(OffsetDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC))
               .setExpiresOn(OffsetDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC))
               .setPermissions("r")));
       signedIdentifiers.add(new TableSignedIdentifier("id2")
           .setAccessPolicy(new TableAccessPolicy()
               .setStartsOn(OffsetDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC))
               .setExpiresOn(OffsetDateTime.of(2021, 1, 2, 0, 0, 0, 0, ZoneOffset.UTC))
               .setPermissions("raud")));
      
       tableAsyncClient.setAccessPolicies(signedIdentifiers)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(unused -> System.out.print("Set table access policies."));
       
      Parameters:
      tableSignedIdentifiers - The access policies for the table.
      Returns:
      An empty Mono.
      Throws:
      TableServiceException - If the request is rejected by the service.
    • setAccessPoliciesWithResponse

      public Mono<com.azure.core.http.rest.Response<Void>> setAccessPoliciesWithResponse(List<TableSignedIdentifier> tableSignedIdentifiers)
      Sets stored access policies for the table that may be used with Shared Access Signatures.

      This operation is only supported on Azure Storage endpoints.

      Code Samples

      Sets stored access policies on a table. Prints out details of the HTTP response.

       List<TableSignedIdentifier> mySignedIdentifiers = new ArrayList<>();
      
       mySignedIdentifiers.add(new TableSignedIdentifier("id1")
           .setAccessPolicy(new TableAccessPolicy()
               .setStartsOn(OffsetDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC))
               .setExpiresOn(OffsetDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC))
               .setPermissions("r")));
       mySignedIdentifiers.add(new TableSignedIdentifier("id2")
           .setAccessPolicy(new TableAccessPolicy()
               .setStartsOn(OffsetDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC))
               .setExpiresOn(OffsetDateTime.of(2021, 1, 2, 0, 0, 0, 0, ZoneOffset.UTC))
               .setPermissions("raud")));
      
       tableAsyncClient.setAccessPoliciesWithResponse(mySignedIdentifiers)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(response ->
               System.out.printf("Set table access policies successfully with status code: %d.",
                   response.getStatusCode()));
       
      Parameters:
      tableSignedIdentifiers - The access policies for the table.
      Returns:
      A Mono containing the HTTP response.
      Throws:
      TableServiceException - If the request is rejected by the service.
    • submitTransaction

      public Mono<TableTransactionResult> submitTransaction(List<TableTransactionAction> transactionActions)
      Executes all actions within the list inside a transaction. When the call completes, either all actions in the transaction will succeed, or if a failure occurs, all actions in the transaction will be rolled back. Each action must operate on a distinct row key. Attempting to pass multiple actions that share the same row key will cause an error.

      Code Samples

      Submits a transaction that contains multiple actions to be applied to entities on a table. Prints out details of each action's HTTP response.

       List<TableTransactionAction> transactionActions = new ArrayList<>();
      
       String partitionKey = "markers";
       String firstEntityRowKey = "m001";
       String secondEntityRowKey = "m002";
      
       TableEntity firstEntity = new TableEntity(partitionKey, firstEntityRowKey)
           .addProperty("Type", "Dry")
           .addProperty("Color", "Red");
      
       transactionActions.add(new TableTransactionAction(TableTransactionActionType.CREATE, firstEntity));
      
       System.out.printf("Added create action for entity with partition key '%s', and row key '%s'.%n", partitionKey,
           firstEntityRowKey);
      
       TableEntity secondEntity = new TableEntity(partitionKey, secondEntityRowKey)
           .addProperty("Type", "Wet")
           .addProperty("Color", "Blue");
      
       transactionActions.add(new TableTransactionAction(TableTransactionActionType.CREATE, secondEntity));
      
       System.out.printf("Added create action for entity with partition key '%s', and row key '%s'.%n", partitionKey,
           secondEntityRowKey);
      
       tableAsyncClient.submitTransaction(transactionActions)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(tableTransactionResult -> {
               System.out.print("Submitted transaction. The ordered response status codes for the actions are:");
      
               tableTransactionResult.getTransactionActionResponses().forEach(tableTransactionActionResponse ->
                   System.out.printf("%n%d", tableTransactionActionResponse.getStatusCode()));
           });
       

      Shows how to handle a transaction with a failing action via the provided exception, which contains the index of the first failing action in the transaction.

       try {
           TableTransactionResult transactionResult = tableClient.submitTransaction(transactionActions);
      
           System.out.print("Submitted transaction. The ordered response status codes for the actions are:");
      
           transactionResult.getTransactionActionResponses().forEach(tableTransactionActionResponse ->
               System.out.printf("%n%d", tableTransactionActionResponse.getStatusCode()));
       } catch (TableTransactionFailedException e) {
           // If the transaction fails, the resulting exception contains the index of the first action that failed.
           int failedActionIndex = e.getFailedTransactionActionIndex();
           // You can use this index to modify the offending action or remove it from the list of actions to send in
           // the transaction, for example.
           transactionActions.remove(failedActionIndex);
           // And then retry submitting the transaction.
       }
       
      Parameters:
      transactionActions - A List of actions to perform on entities in a table.
      Returns:
      A Mono containing a List of sub-responses that correspond to each action in the transaction.
      Throws:
      IllegalArgumentException - If no actions have been added to the list.
      TableServiceException - If the request is rejected by the service.
      TableTransactionFailedException - If any action within the transaction fails. See the documentation for the client methods in TableClient to understand the conditions that may cause a given action to fail.
    • submitTransactionWithResponse

      public Mono<com.azure.core.http.rest.Response<TableTransactionResult>> submitTransactionWithResponse(List<TableTransactionAction> transactionActions)
      Executes all actions within the list inside a transaction. When the call completes, either all actions in the transaction will succeed, or if a failure occurs, all actions in the transaction will be rolled back. Each action must operate on a distinct row key. Attempting to pass multiple actions that share the same row key will cause an error.

      Code Samples

      Submits a transaction that contains multiple actions to be applied to entities on a table. Prints out details of the HTTP response for the operation, as well as each action's corresponding HTTP response.

       List<TableTransactionAction> myTransactionActions = new ArrayList<>();
      
       String myPartitionKey = "markers";
       String myFirstEntityRowKey = "m001";
       String mySecondEntityRowKey = "m002";
      
       TableEntity myFirstEntity = new TableEntity(myPartitionKey, myFirstEntityRowKey)
           .addProperty("Type", "Dry")
           .addProperty("Color", "Red");
      
       myTransactionActions.add(new TableTransactionAction(TableTransactionActionType.CREATE, myFirstEntity));
      
       System.out.printf("Added create action for entity with partition key '%s', and row key '%s'.%n", myPartitionKey,
           myFirstEntityRowKey);
      
       TableEntity mySecondEntity = new TableEntity(myPartitionKey, mySecondEntityRowKey)
           .addProperty("Type", "Wet")
           .addProperty("Color", "Blue");
      
       myTransactionActions.add(new TableTransactionAction(TableTransactionActionType.CREATE, mySecondEntity));
      
       System.out.printf("Added create action for entity with partition key '%s', and row key '%s'.%n", myPartitionKey,
           mySecondEntityRowKey);
      
       tableAsyncClient.submitTransactionWithResponse(myTransactionActions)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .subscribe(response -> {
               System.out.printf("Response successful with status code: %d. The ordered response status codes of the"
                   + " submitted actions are:", response.getStatusCode());
      
               response.getValue().getTransactionActionResponses().forEach(tableTransactionActionResponse ->
                   System.out.printf("%n%d", tableTransactionActionResponse.getStatusCode()));
           });
       

      Shows how to handle a transaction with a failing action via the provided exception, which contains the index of the first failing action in the transaction.

       tableAsyncClient.submitTransactionWithResponse(myTransactionActions)
           .contextWrite(Context.of("key1", "value1", "key2", "value2"))
           .doOnError(TableTransactionFailedException.class, e -> {
               // If the transaction fails, the resulting exception contains the index of the first action that failed.
               int failedActionIndex = e.getFailedTransactionActionIndex();
               // You can use this index to modify the offending action or remove it from the list of actions to send
               // in the transaction, for example.
               transactionActions.remove(failedActionIndex);
               // And then retry submitting the transaction.
           })
           .subscribe(response -> {
               System.out.printf("Response successful with status code: %d. The ordered response status codes of the"
                   + " submitted actions are:", response.getStatusCode());
      
               response.getValue().getTransactionActionResponses().forEach(tableTransactionActionResponse ->
                   System.out.printf("%n%d", tableTransactionActionResponse.getStatusCode()));
           });
       
      Parameters:
      transactionActions - A List of transaction actions to perform on entities in a table.
      Returns:
      A Mono containing the HTTP response produced for the transaction itself. The response's value will contain a List of sub-responses that correspond to each action in the transaction.
      Throws:
      IllegalArgumentException - If no actions have been added to the list.
      TableServiceException - If the request is rejected by the service.
      TableTransactionFailedException - If any action within the transaction fails. See the documentation for the client methods in TableClient to understand the conditions that may cause a given action to fail.