Azure テーブル ストレージからフラット ファイルにデータをエクスポートするツールをお探しの場合は、Cerebrata のAzure Management Studio (商用、無料ではありません) またはClumsyLeaf の TableXplorer (商用、無料ではありません) をご覧になることをお勧めします。これらのツールは両方とも、データを CSV および XML ファイル形式にエクスポートする機能を備えています。
どちらのツールも GUI ベースであるため、エクスポート プロセスを自動化できるとは思いません。自動化については、データを CSV または XML 形式にエクスポートするための PowerShell ベースのインターフェイスを提供する Cerebrata の Azure Management Cmdlets を調べることをお勧めします。
過去にセレブラータと付き合っていたので、その話しかできません。このツールはパーティションごとにエクスポートしませんが、テーブル内のすべての PartitionKey 値がわかっている場合は、パーティションごとにデータをエクスポートするクエリを指定できます。
自動化が重要な要件の 1 つである場合は、1 時間に 1 回実行され、過去 1 時間のデータを抽出するコンソール アプリケーションを簡単に作成できます。.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 + "\"";
}
}
その後、アプリケーションはテーブル ストレージを 1 時間ごとにクエリし、データをファイルに保存できます。
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.
}
このデータをリレーショナル データベースにインポートする限り、周りを見渡せば、それを実行できるユーティリティがたくさん見つかるはずです。