There are many tools that let you query data from Azure Storage Table including
Visual Studio. But none of the tools are easy and fast as
SQL Server Management Studio which most of us are comfortable with.
Though data looks very similar to the data on
RDBMS once it’s on UI, none of the tools provide an intuitive user experience. Most of the tools I see around are either paid or if free, need lot of clicking around to get things done.
Half the world which uses
Azure Storage uses
Azure Storage Explorer, which doesn’t even let you copy text (authors of Azure Storage Explorer, if you are reading this don’t hesitate to fix it..!). Every developer I have come across is looking for a better tool, but most of them were asked to use this tool by a senior dev in the project and the lineage continued. Even I was handed over a copy of this tool and probably I used it for six months.
And one day I decided to write up my own tool out of the frustration of using this tool. For the readers who want to dive in to the code right away, here it is: Azure Table Browser. Executable Binaries here.
This is the first part of a tool which does CRUD operations on
Azure Storage and supports read only operations on table as of now. If the tool gets some traction, I plan to open source more code… :)
In this post, I will explain about two important sections of this tool which make it useful and possible.
Converting table result received as DynamicTableEntity to a flat structure.
If you look through the class, all the properties of the entity (other than the default properties like PartitionKey) are exposed as
EntityProperty class exposes the value as set of properties, for example here is the code for
There are many other such properties such as
Int32Value etc. While pulling data through
DynamicTableEntity we would not be knowing the types of each of the properties and this makes us go through a set of type comparisons before we can extract the value of the property.
I wrote a method ToDynamicList which does all these comparisons, extracts values for all the properties along with default properties (such as
PartitionKey) and converts them to an ExpandoObject. Now this becomes a flat structure instead of being a two level structure.
ToDynamicList returns resulting list as a
List<dynamic> which can be bound to grid on the UI. The result could be passed through a
Json serializer in case of a web application.
This method should have been made available on the
Storage Library itself instead of making developers write this method, as
dynamic type has been around for long time and libraries like dapper-dot-net have shown it to be pretty powerful. May be they would consider it if many request come in.. :)
Supporting client-side LINQ queries
Azure Storage supports OData query format which comes with a limited set of query operators. Though this works well for filtering data over
HTTP, we can’t leverage on the advanced capabilities of LINQ to filter and aggregate the data. So I wrote a wrapper around this to perform
LINQ operations on the data received from server. Here is the original project TextToLINQ I created, with some example usage. And the code if you want to look at the core of it right away.
The idea behind this class is simple and is reusable. given a compile-able c#
it will enclose it in a program
compiles an assembly
instantiates an object of the assembly
passes the collection to the assembly
collects the result (result can be projection of the current collection enabling aggregation)
Now on to Azure Table Browser..! Use it, Fork it and let me know how you feel.