2013-06-09 2 views
3

Я ищу возможность экспортировать данные из SQL Azure Настольное хранилище Azure для некоторых файлов Flat или XML, чтобы мы могли импортировать их на SQL/MYSQL Server и выполнить анализ данных.azure table storage Экспорт данных в Flat или XML-файл для SQL

Что происходит, мы получаем много транзакций из наших text API в час, (Стратегия разделов ежечасно), поскольку хранилище таблиц Azure не поддерживает счет и сумму. Поэтому для анализа данных puropose мы хотим экспортировать данные в Flat Files и импортировать в SQL Server/MySQL для его анализа.

Вопрос:

  1. Любой Util или учебник, как экспортировать данные из хранилища таблиц Azure в плоский файл? Разделение по принципу «Пациент» и быстро? Любой пример кода или утилиты? Любой проверенный пример/учебник?

  2. MS SQL и Azure Table - любой инструмент или утилита, которая может автоматически извлекать и загружать данные в SQL каждый час? Любое такое предложение или инструмент экспорта на дорожной карте от Microsoft?

Любая поддержка будет высоко оценена.

ответ

5

Если вы ищете инструмент для экспорта данных из хранилища таблиц 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. 
    } 

Что касается импорта этих данных в реляционную базу данных, я Если вы посмотрите вокруг, вы найдете множество утилит, которые смогут это сделать.

1

Возможно, вы захотите попробовать Enzo Cloud Backup (http://bluesyntax.net/backup20.aspx). Он обеспечивает возможность прямого экспорта таблиц Azure в базу данных SQL (SQL Server или SQL Azure). Вы также можете вызвать хранимые процедуры для преобразования данных «на лету». И вы также можете поместить это в расписание, используя агент облака, или .NET API, который поставляется вместе с ним. Это коммерческий продукт, который поставляется со свободным изданием Community Edition, однако для этой конкретной функции требуется расширенная версия.

2

Чтобы обновить эту тему с новыми Azure функциями, свободный Microsoft поддерживается azcopy теперь можно экспортировать Azure Table Storage для плоских файлов в хранилище больших двоичных объектов: https://azure.microsoft.com/en-us/documentation/articles/storage-use-azcopy/#copy-entities-in-an-azure-table-with-azcopy

Смежные вопросы