如果您正在寻找将数据从 Azure 表存储导出到平面文件的工具,我建议您看看 Cerebrata 的Azure Management Studio(商业,非免费)或ClumsyLeaf 的 TableXplorer(商业,非免费)。这两种工具都能够将数据导出为 CSV 和 XML 文件格式。
由于这两个工具都是基于 GUI 的,我认为您不能自动化导出过程。对于自动化,我建议您查看 Cerebrata 的 Azure Management Cmdlet,因为它提供了一个基于 PowerShell 的接口,可以将数据导出为 CSV 或 XML 格式。
由于我过去与 Cerebrata 有联系,我只能谈论这个。该工具不会逐个分区导出,但如果您知道表中的所有 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.
}
至于将这些数据导入关系数据库,我敢肯定,如果您环顾四周,您会发现许多实用程序都可以做到这一点。