Friday, August 15, 2014

Azure Storage Explorer Preview 3 Now Available: Queue Support, Blob and Table Enhancements

I'm pleased to announce that the next installment of Azure Storage Explorer 6, Preview 3, is now available. Preview 3 adds Queue support along with expanded blob and table features. We've already posted a detailed walk-through of Preview 1 and Preview 2; now let's take a tour of what's new in Preview 3.

Queue Support

Preview 1 provided Blob support and Preview 2 added Table support. Now in Preview 3 you also have Queue support. Similar to how blob and table support work, you have a list of queues in your outline at left. When you select a queue, the top messages in the queue are listed in the main pane at right.

Message List

Actions you can take on queues include creating a queue, deleting the selected queue, or refreshing the queue list. Actions you can take on queue messages include refreshing the message list, creating a new message, creating a copy of an existing message, or popping the top message off of the queue (deleting it). When creating or copying a message, you enter or edit the message text that is to be inserted into the queue.

Creating a New Message

Enhanced Blob Support

We've made several enhancements to blob support. The earlier previews did not include the $logs container, which will exist if you have turned on logging and monitoring for your blob storage. This container is now listed if present.

Earlier previews did not show all blobs in the selected container, such as blobs with virtual directory paths in their name. The blob list is now exhaustive, showing you everything in the selected container.


Content Types

You can now configure a table of content types, which is used to set the Content Type property for a blob that you upload. This matters if blobs are read from public storage by a web browser, as the ContentType header helps the browser figure out how to handle the resource. The Content Type table is a simple table of file extensions and MIME types: if the file you upload ends with an extension listed in your table, its content type is set to the corresponding MIME type. You can view or edit the Content Types list from the top right settings menu ("Edit Content Types").

Editing Content Types for Uploaded Blobs

Enhanced Table Support

Table enhancements include a reordering of columns to put PartitionKey first, and a new upload capability. 

The table support that arrived in Preview 2 provided a means to download entities to CSV, JSON, or XML format - but had no matching upload capability. In Preview 3, you can also upload to tables.

When viewing a table, click the Upload button. On the dialog that appears, select the file containing data to upload and review the format selections and options.

CSV Upload

A CSV upload reads a comma-delimited text file for input. This is a popular simple export format that Excel can be used to edit. Azure Storage Explorer uses the CsvHelper library to parse your data file and insert entities.

When inserting entities, a partition key and row key are required to uniquely identify each entity. In the event your CSV file uses different column names for PartitionKey and RowKey, you can specify on the upload dialog the column names to use.

CSV Upload

Here is an example of valid CSV data that can be uploaded to a table:

"RowKey","PartitionKey","Timestamp","Debut","SecretIdentity"
Batman,DC Comics,8/6/2014 4:07:06 AM +00:00,5/1/1939 12:00:00 AM,Bruce Wayne
Green Lantern,DC Comics,8/6/2014 4:10:52 AM +00:00,7/1/1940 12:00:00 AM,Hal Jordan
Superman,DC Comics,8/6/2014 4:06:52 AM +00:00,4/18/1938 12:00:00 AM,Clark Kent
The Flash,DC Comics,8/6/2014 4:06:58 AM +00:00,1/1/1940 12:00:00 AM,Bart Allen
Iron Man,Marvel Comics,8/6/2014 4:07:58 AM +00:00,3/1/1963 12:00:00 AM,Tony Stark
The Human Torch,Marvel Comics,8/6/2014 4:13:02 AM +00:00,11/1/1961 12:00:00 AM,Johnny Storm
The Thing,Marvel Comics,8/6/2014 4:12:07 AM +00:00,11/1/1961 12:00:00 AM,Ben Grimm
Thor,Marvel Comics,8/6/2014 4:08:58 AM +00:00,8/1/1962 12:00:00 AM,Donald Blake

JSON Upload

A JSON upload reads a JavaScript Object Notation (JSON) format text file for input. JSON is a very popular web transfer format in wide use today. Azure Storage Explorer uses the .NET JavaScriptSerializer to parse your data file and insert entities.

As with CSV uploads, you can specify the field name to be used for RowKey and PartitionKey. In addition, you specify the enclosing object name for the JSON.

JSON Upload

Here is an example of valid JSON data that can be uploaded to a table:

{
    "Entities": [
        {
            "RowKey": "Batman",
            "PartitionKey": "DC Comics",
            "Timestamp": "8/6/2014 4:07:06 AM +00:00",
            "Debut": "5/1/1939 12:00:00 AM",
            "SecretIdentity": "Bruce Wayne"
        },
        {
            "RowKey": "Green Lantern",
            "PartitionKey": "DC Comics",
            "Timestamp": "8/6/2014 4:10:52 AM +00:00",
            "Debut": "7/1/1940 12:00:00 AM",
            "SecretIdentity": "Hal Jordan"
        },
        {
            "RowKey": "Superman",
            "PartitionKey": "DC Comics",
            "Timestamp": "8/6/2014 4:06:52 AM +00:00",
            "Debut": "4/18/1938 12:00:00 AM",
            "SecretIdentity": "Clark Kent"
        }
    ]
}



XML Upload

An XML upload reads an XML file as input, another popular exchange format. Azure Storage Explorer uses the .NET XmlDocument class to parse your data file and insert entities.

As with CSV uploads, you can specify the field name to be used for RowKey and PartitionKey. In addition, you specify the XPath path to locate entity elements in the XML.

XML Upload

Here is an example of valid XML data that can be uploaded to a table:

<?xml version="1.0" ?>
<Entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Entity>
    <RowKey>Batman</RowKey>
    <PartitionKey>DC Comics</PartitionKey>
    <Timestamp>8/6/2014 4:07:06 AM +00:00</Timestamp>
    <Debut>5/1/1939 12:00:00 AM</Debut>
    <SecretIdentity>Bruce Wayne</SecretIdentity>
  </Entity>
  <Entity>
    <RowKey>Green Lantern</RowKey>
    <PartitionKey>DC Comics</PartitionKey>
    <Timestamp>8/6/2014 4:10:52 AM +00:00</Timestamp>
    <Debut>7/1/1940 12:00:00 AM</Debut>
    <SecretIdentity>Hal Jordan</SecretIdentity>
  </Entity>
  <Entity>
    <RowKey>Superman</RowKey>
    <PartitionKey>DC Comics</PartitionKey>
    <Timestamp>8/6/2014 4:06:52 AM +00:00</Timestamp>
    <Debut>4/18/1938 12:00:00 AM</Debut>
    <SecretIdentity>Clark Kent</SecretIdentity>
  </Entity>
</Entities>

The default option for error handling is to stop on the first error. The alternative option is to continue past errors and continue uploading.

Summary

Azure Storage Explorer 6 continues to move rapidly toward completion. There are now sufficient features in place that we've made it the default version for download on CodePlex. I hope you find it useful and productive to use.

Tuesday, August 5, 2014

Azure Storage Explorer 6 Preview 2 Now Available, with Table Support

I'm pleased to announce that the next installment of Azure Storage Explorer, Preview 2, is now available. The big feature in Preview 2 is table support, allowing you to create, delete, and work with with tables and entity records. In addition, we've made some UI improvements and extended our blob support. We've already posted a detailed walk-through of Preview 1, now let's take a tour of what's new in Preview 2.

User Interface Changes

Blob List and Table List Styling
The main pane list view (showing blobs or table entities) now shows alternating rows in contrasting shades of grey. Selections are highlighted in the color associated with the artifact (yellow for blobs, blue for table entities).

Updated Styling of Blob List

Blob List Filters
One thing we've been thinking about is how to limit the display when you have a large number of blobs or table entities in a container; if you have thousands of items, you likely don't want them all listed every time you click on a container or table. In version 5 we implemented results paging, but in version 6 we wanted to do something more versatile. You can limit what is displayed with the new Filter toolbar button. For blobs, this lets  you specify filters such as max records to display, blob type, search text to match, or min and max sizes. You have a similar facility for table entities.

Filter Dialog for Blob List

When filters are active, the Filter toolbar button is highlighted so you're aware you're not seeing all results.

Filtered Blob List

Error Messages
Instead of pop-up dialogs for error reporting, error messages now smoothly stack on the bottom of the main pane, just as background tasks do.

Stacking Error Messages

Table Storage Support
Preview 2 introduces table storage support. When you navigate to a table in the left pane outline, you'll now get a list of entity records and toolbars for acting on the table and its entities.You can click on a column to sort by that property; click a second time to change ascending/descending direction.

Table Entity List

Table Entity Queries
Instead of retrieving all entities from the table, you can specify a query. The Query toolbar button allows to select up to three sets of columns, conditions (equals, not equal to, contains, starts with, ends with), and values. LINQ is then used to retrieve matching entities and the list is refreshed.

Table Query Dialog

Table Entity Filters
You can further restrict your entity list by specifying filters. These include a maximum entity count to display and search text. You can also control which columns should be displayed or hidden in the result list. You can click the check box to save these filter settings as a default.


Table Filter Dialog


Filtered Entity List

Creating, Copying, Editing, and Deleting Entities

You can use the toolbar buttons to create, modify, and remove individual entities.

Creating a New Entity
To enter a new entity, click the New Entity toolbar button and complete the record definition in the dialog that appears. You can add one or more records from here. You can enter binary (01 02 03...), boolean values (True/1/Yes/On, False/0/No/Off), DateTime values, numerics (double, Int32, Int64), GUIDs, or Strings. To not store a field, either set the type to Null or remove the field from the list.

Insert Entity Record Dialog

Updating an Entity
To update an entity, either double-click it or select it and click the View toolbar button. You can modify and update the record.

Copying an Entity
To copy an entity, select it and click the Copy toolbar button. Update the record (minimally changing RowKey/PartitionKey).

Deleting Entities
To delete entities, select one or more entities and click the Delete toolbar button. Confirm the dialog to perform the delete.

Delete Entities Confirmation Dialog

Table Entity Downloads
When viewing a table, you can download selected entities, or all entities, using the Download toolbar button. On the download dialog, select a file format and an output file. You can download to CSV, JSON, or XML format.

Entity Download Dialog

CSV Download
The comma-separated values (CSV) format can be opened in Microsoft Excel.

Result of CSV Download 

JSON Download
The JSON download is one of the more popular web data exchange formats today.

Result of JSON Download

XML Download
The XML download provides another commonly-used data exchange format.

Result of XML Download

Summary
With Preview 2, we've added a significant amount of table functionality to the blob functionality from Preview 1. We hope you find Azure Storage Explorer 6 useful and productive as we continue to move it forward. Do keep in mind the software is still very new and only in preview - please exercise appropriate caution as you use it.

Next: Azure Storage Explorer Preview 3