Query on freshly inserted Table Entities on Azure storage do not return all entities

Patrick Wellink 20 Reputation points
2024-10-04T21:02:14.9933333+00:00

After inserting a 1000 table entities, the first read gives Less entities. I have a very simple program

        public static async Task RunTest(TableClient client)
        {
            List<TableEntity> tableEntities = new List<TableEntity>();

            // Create 1000 table entities 
            for (int i = 0; i < 1000; i++)
            {
                TableEntity entity = new TableEntity();
                entity.PartitionKey = $"{new Random().Next(1, 10)}";
                entity.RowKey = $"{Guid.NewGuid()}";
                tableEntities.Add(entity);
            }

            Parallel.ForEach(tableEntities, async entity =>
            {
                await client.UpsertEntityAsync(entity);
            });

            for (int i = 0; i < 10; i++)
            {
                List<TableEntity> results = new();
                var asyncdata = client.QueryAsync<TableEntity>(maxPerPage: 200).ConfigureAwait(false);
                await foreach (TableEntity page in asyncdata)
                {
                    results.Add(page);
                }
                Console.WriteLine($"Read entities :{results.Count}");    
            }
        }

I would expect 1000 table entities when reading them. But i get less entities than i inserted. Below is some output from the program.

Read entities :999
Read entities :1000
Read entities :1000
Read entities :1000
Read entities :1000
Read entities :1000
Read entities :1000
Read entities :1000
Read entities :1000
Read entities :1000

The behaviour is pretty consistent, when i run it for a second time:

Read entities :1999
Read entities :2000
Read entities :2000
Read entities :2000
Read entities :2000
Read entities :2000
Read entities :2000
Read entities :2000
Read entities :2000
Read entities :2000

This time there are 1000 new entities added but again not all are read. Sometimes i miss 1 record, or 4, the number differs from time to time.

Azure Table Storage
Azure Table Storage

An Azure service that stores structured NoSQL data in the cloud.


Answer accepted by question author
TP 163.5K Reputation points Volunteer Moderator
2024-10-20T08:54:55.7166667+00:00

Hi Patrick,

You are seeing incorrect results because you are querying the table before your code has finished inserting all of the entities. Please test using modified code below:

public static async Task RunTest(TableClient client)
{
    List<TableEntity> tableEntities = new List<TableEntity>();

    // Create 1000 table entities 
    for (int i = 0; i < 1000; i++)
    {
        TableEntity entity = new TableEntity();
        entity.PartitionKey = $"{new Random().Next(1, 10)}";
        entity.RowKey = $"{Guid.NewGuid()}";
        tableEntities.Add(entity);
    }

    await Parallel.ForEachAsync(tableEntities, async (entity, token) =>
        {
            await client.UpsertEntityAsync(entity);
        });

    for (int i = 0; i < 10; i++)
    {
        List<TableEntity> results = new();
        var asyncdata = client.QueryAsync<TableEntity>(maxPerPage: 200).ConfigureAwait(false);
        await foreach (TableEntity page in asyncdata)
        {
            results.Add(page);
        }
        Console.WriteLine($"Read entities :{results.Count}");
    }
}

Please click Accept Answer and upvote if the above was helpful.

Thanks.

-TP

Was this answer helpful?

1 person found this answer helpful.

0 additional answers

Sort by: Oldest

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.