Azure Documentation

Updating Entities in Azure Table Storage

This document explains how to update existing entities in Azure Table Storage. Updates can be performed using various methods, including replacing an existing entity, merging properties, or performing conditional updates.

Understanding Update Operations

When you update an entity in Azure Table Storage, you are modifying its properties. There are two primary ways to handle updates:

Replacing an Entity

The replace entity operation will overwrite the entire existing entity if it exists. If the entity does not exist, it will be inserted.

Using the Azure SDK (e.g., .NET)

You can use the Azure Table Storage client library to replace an entity. You'll need to provide the partition key and row key of the entity to be updated, along with the new entity object.

// Assume 'tableClient' is an initialized TableClient object
TableEntity entityToUpdate = new TableEntity("partitionKey", "rowKey");
entityToUpdate["NewPropertyName"] = "NewValue";
entityToUpdate["AnotherProperty"] = 123;

try
{
    tableClient.UpdateEntity(entityToUpdate, ETag.All, TableUpdateMode.Replace);
    Console.WriteLine("Entity replaced successfully.");
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"Error replacing entity: {ex.Message}");
}

Merging an Entity

The merge entity operation merges the properties of the new entity with the existing entity. Properties present in the new entity overwrite existing properties, and properties not present in the new entity are left unchanged. If the entity does not exist, it will be inserted.

Using the Azure SDK (e.g., .NET)

Similar to replacing, you can use the client library to merge an entity. Ensure you specify the correct partition key and row key.

// Assume 'tableClient' is an initialized TableClient object
TableEntity entityToMerge = new TableEntity("partitionKey", "rowKey");
entityToMerge["ExistingPropertyToUpdate"] = "UpdatedValue";
entityToMerge["NewOptionalProperty"] = true;

try
{
    tableClient.UpdateEntity(entityToMerge, ETag.All, TableUpdateMode.Merge);
    Console.WriteLine("Entity merged successfully.");
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"Error merging entity: {ex.Message}");
}

Conditional Updates

You can perform conditional updates to ensure that you only update an entity if it meets specific criteria. This is achieved by using ETags. An ETag represents the current version of an entity.

Tip

When you retrieve an entity, its ETag is included in the response. You can use this ETag to perform conditional operations. If the ETag on the server does not match the ETag you provide, the operation will fail, preventing you from overwriting changes made by another client.

Using ETags for Optimistic Concurrency

To implement optimistic concurrency control, retrieve the entity first, modify it, and then update it using its original ETag.

Using the Azure SDK (e.g., .NET)

// Assume 'tableClient' is an initialized TableClient object
string partitionKey = "partitionKey";
string rowKey = "rowKey";

try
{
    // Retrieve the entity with its ETag
    Response<TableEntity> response = tableClient.GetEntity<TableEntity>(partitionKey, rowKey);
    TableEntity entity = response.Value;
    ETag originalETag = response.GetETag();

    // Modify the entity
    entity["SomeProperty"] = "ModifiedValue";

    // Update the entity with the original ETag
    tableClient.UpdateEntity(entity, originalETag, TableUpdateMode.Merge);
    Console.WriteLine("Entity updated conditionally successfully.");
}
catch (RequestFailedException ex)
{
    if (ex.Status == 412) // Precondition Failed
    {
        Console.WriteLine("Entity has been modified by another user. Please re-fetch and try again.");
    }
    else
    {
        Console.WriteLine($"Error performing conditional update: {ex.Message}");
    }
}

Batch Operations for Updates

For performance, you can update multiple entities within a single batch operation. Note that batch operations cannot span across different tables or contain operations that would require a different ETag matching strategy (e.g., inserting and deleting in the same batch).

Important

Batch operations have a size limit of 100 entities and a size limit of 4MB. Transactional batch operations require all entities to be in the same partition.

Considerations for Updates