Если вы ищете инструмент для экспорта данных из хранилища таблиц Azure в плоский файл, возможно, я предлагаю вам взглянуть на Cerebrata в Azure Management Studio (Commercial, несвободные) или ClumsyLeaf's TableXplorer (Commercial, не бесплатно). Оба этих инструмента имеют возможность экспортировать данные в формат CSV и XML.
Поскольку оба инструмента основаны на графическом интерфейсе, я не думаю, что вы можете автоматизировать процесс экспорта. Для автоматизации я предлагаю вам ознакомиться с командами управления Azure от Cerebrata, поскольку он предоставляет интерфейс на основе PowerShell для экспорта данных в формат CSV или XML.
Поскольку в прошлом я был связан с Церебратой, я могу только говорить об этом. Инструмент не будет экспортироваться по разметке, но если вы знаете все значения PartitionKey в своей таблице, вы можете указать запрос на экспорт данных для каждого раздела.
Если автоматизация является одним из ключевых требований, вы можете просто написать консольное приложение, которое выполняется один раз в час и извлекает данные за последний час. Для получения данных вы можете использовать библиотеку .Net Storage Client. Для этого сначала определите класс, который имеет класс TableEntity. Что-то, как показано ниже:
public class CustomEntity : TableEntity
{
public string Attribute1
{
get;
set;
}
public string Attribute2
{
get;
set;
}
public string AttributeN
{
get;
set;
}
public static string GetHeaders(string delimiter)
{
return "\"Attribute1\"" + delimiter + "\"Attribute2\"" + delimiter + "\"AttributeN\"";
}
public string ToDelimited(string delimiter)
{
return "\"" + Attribute1 + "\"" + delimiter + "\"" + Attribute2 + "\"" + delimiter + "\"" + AttributeN + "\"";
}
}
Вашего приложение может запросить хранение таблицы на почасовой основе и сохранить данные в файл:
DateTime currentDateTime = DateTime.UtcNow;
//Assuming the PartitionKey follows the following strategy for naming: YYYYMMDDHH0000
var fromPartitionKey = currentDateTime.AddHours(-1).ToString("YYYYmmDDHH0000");
var toPartitionKey = currentDateTime.ToString("YYYYmmDDHH0000");
var filterExpression = string.Format("PartitionKey ge '{0}' and PartitionKey lt '{1}'", fromPartitionKey, toPartitionKey);
var tableName = "<your table name>";
var cloudStorageAccount = new CloudStorageAccount(new StorageCredentials("<account name>", "<account key>"), true);
var cloudTableClient = cloudStorageAccount.CreateCloudTableClient();
var table = cloudTableClient.GetTableReference(tableName);
TableQuery<CustomEntity> query = new TableQuery<CustomEntity>()
{
FilterString = filterExpression,
};
var entities = table.ExecuteQuery<CustomEntity>(query).ToList();
if (entities.Count > 0)
{
StringBuilder sb = new StringBuilder();
sb.Append(CustomEntity.GetHeaders(",") + "\n");
foreach (var entity in entities)
{
sb.Append(entity.ToDelimited(",") + "\n");
}
var fileContents = sb.ToString();
//Now write this string to a file.
}
Что касается импорта этих данных в реляционную базу данных, я Если вы посмотрите вокруг, вы найдете множество утилит, которые смогут это сделать.