azure table storage将数据导出为Flat或XML文件以进行SQL

Mar*_*ark 3 database azure azure-storage azure-table-storage

我正在寻找从中导出数据的能力 SQL Azure Azure表存储到某些平面文件或XML文件,以便我们可以将其导入SQL/MYSQL Server并进行数据分析.

发生的事情是我们每小时从文本API获得大量事务(分区策略是每小时),因为Azure表存储不支持count和Sum.因此,对于数据分析,我们希望将数据导出到Flat Files并导入到SQL Server/MySQL进行分析.

题:

  1. 任何util或Tutorial如何将数据从Azure表存储导出到Flat文件?按照Patition分区并快速分区?任何示例代码或实用程序?任何经验证的示例/教程?

  2. MS SQL和Azure Table,任何可以每小时自动提取和加载数据到SQL服务器的工具或实用程序?Microsoft在路线图上提供的任何此类产品或出口工具?

任何支持将受到高度赞赏.

小智 6

您可以使用Azure 存储资源管理器。它是免费的,并由 Microsoft 提供支持。浏览到适当的存储帐户,单击要导出的表存储并在资源管理器中查找导出选项。 表存储导出


Gau*_*tri 5

如果您正在寻找将数据从Azure表存储导出到平面文件的工具,我建议您查看Cerebrata的Azure Management Studio(商业版,非免费版)或ClumsyLeaf的TableXplorer(商业版,非免费版).这两个工具都能够将数据导出为CSV和XML文件格式.

由于这两个工具都是基于GUI的,我认为您不能自动化导出过程.对于自动化,我建议您查看Cerebrata的Azure管理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 + "\"";
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您的应用程序可以每小时查询一次表存储并将数据保存到文件中:

    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.
    }
Run Code Online (Sandbox Code Playgroud)

至于将这些数据导入关系数据库,我很确定如果你环顾四周你会找到许多能够做到这一点的实用工具.