Azure Docs

Upsert Entities in Azure Storage Tables

In Azure Storage Tables, the term "upsert" refers to an operation that either inserts a new entity or updates an existing entity if it already exists. This is a common pattern for managing data efficiently, allowing you to avoid separate query-then-insert/update operations.

Understanding Upsert

An upsert operation typically requires you to provide the entity's unique identifier (PartitionKey and RowKey). The Azure Storage Table service will then:

Implementing Upsert with Azure SDKs

Most Azure Storage SDKs provide convenient methods for performing upsert operations. The exact method name might vary slightly depending on the SDK and programming language you are using.

Example using Azure SDK for .NET

In the .NET SDK, you can use the UpsertEntity method of the TableClient class.


using Azure;
using Azure.Data.Tables;

// Assuming you have a TableClient instance named 'tableClient'
// and an entity object named 'myEntity' with PartitionKey and RowKey set.

// Example entity:
// var myEntity = new MyEntity("partition1", "row1")
// {
//     PropertyName = "New Value"
// };

// Upsert the entity
Response response = await tableClient.UpsertEntityAsync(myEntity, TableUpdateMode.Replace);

// TableUpdateMode.Replace: Replaces the entire entity if it exists, otherwise inserts.
// TableUpdateMode.Merge: Merges properties into the existing entity, only updating specified properties.
            

Example using Azure SDK for Python

In the Python SDK, you can use the upsert_entity method of the TableServiceClient or TableClient.


from azure.data.tables import TableClient

# Assuming you have a TableClient instance named 'table_client'
# and an entity dictionary named 'entity' with 'PartitionKey' and 'RowKey' keys.

# Example entity:
# entity = {
#     "PartitionKey": "partition1",
#     "RowKey": "row1",
#     "property_name": "new_value"
# }

# Upsert the entity
table_client.upsert_entity(entity, mode="Replace")

# mode="Replace": Replaces the entire entity if it exists, otherwise inserts.
# mode="Merge": Merges properties into the existing entity, only updating specified properties.
            
Performance Tip: Upsert operations are more efficient than performing a separate query to check for existence followed by an insert or update, as they reduce the number of network round trips.

Choosing the Right Update Mode

When performing an upsert, you often have the option to choose between replacing or merging the entity.

Choose the mode that best suits your application's logic. Replace is simpler if you always want to ensure the entity has exactly the data you provide. Merge is useful if you only want to update a subset of properties.