Recently I had the requirement of retreiving the newest entry in an Azure Table Storage table. While there’s of course the Timestamp column that could be used to indetify the desired row, we would need to query the whole table to find the youngest date. This could be narrowed down by for example knowing on which day a record was added and filtering accordingly, but we’d probably still get multiple rows to check manually for the newest one.
However, we can use the fact that all rows in the Azure Table Storage are sorted by PartitionKey + RowKey to our advantage. By making sure this combination comes first in alphabetical order for every new entry makes it easy to just ask for the very first row.
One way to ensure this is by converting the current DateTime to a ever-decreasing number of ticks by subtracting it from the DateTime.Max value. Before using it as a PrimaryKey or RowKey we do need to convert this to a string while making sure all future values have the same length with leading zeroes when necessary.
These two helper methods show how to do this and how to convert the ticks string back to DateTimeOffset. You can copy the code or use my NuGet library.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
After we have our Table Storage structure in place we can efficiently query the very first row by limiting the items per page of our query to just one element. Again, this is written as an extension method to the Azure.Data.Tables SDK to make it clean & easy to reuse the code.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters