4

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

发生的情况是我们每小时从我们的文本 API获得大量事务(分区策略是每小时一次),因为 Azure 表存储不支持计数和总和。因此,出于数据分析的目的,我们希望将数据导出到平面文件并导入到 SQL Server/MySQL 进行分析。

问题:

  1. 任何实用程序或教程如何将数据从 Azure 表存储导出到平面文件?分区依据和快速?任何示例代码或实用程序?任何经过验证的示例/教程?

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

任何支持将不胜感激。

4

4 回答 4

8

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

于 2020-07-22T07:09:22.277 回答
5

如果您正在寻找将数据从 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.
    }

至于将这些数据导入关系数据库,我敢肯定,如果您环顾四周,您会发现许多实用程序都可以做到这一点。

于 2013-06-09T14:44:12.330 回答
2

要使用新的 Azure 功能更新此线程,免费的 Microsoft 维护的 azcopy 现在可以将 Azure 表存储导出到 blob 存储中的平面文件: https ://azure.microsoft.com/en-us/documentation/articles/storage-use-azcopy /#copy-entities-in-an-azure-table-with-azcopy

于 2015-12-11T12:16:12.400 回答
1

您可能想尝试 Enzo 云备份 ( http://bluesyntax.net/backup20.aspx )。它提供了将 Azure 表直接导出到 SQL 数据库(SQL Server 或 SQL Azure)的能力。您还可以调用存储过程来动态转换数据。您还可以使用云代理或随附的 .NET API 将其安排在计划中。它是一款商业产品,附带免费的社区版,但此特定功能需要高级版。

于 2013-06-09T22:34:50.113 回答