Корпорация Майкрософт предоставляет инфраструктуру SemanticLogging, которая имеет конкретную раковину до log to Azure Table.
Если вы посмотрите на исходный код библиотеки, он генерирует ключ раздела (в обратном порядке), основанный на DATETIME:
static string GeneratePartitionKeyReversed(DateTime dateTime)
{
dateTime = dateTime.AddMinutes(-1.0);
return GetTicksReversed(
new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, 0));
}
static string GetTicksReversed(DateTime dateTime)
{
return (DateTime.MaxValue - dateTime.ToUniversalTime())
.Ticks.ToString("d19", (IFormatProvider)CultureInfo.InvariantCulture);
}
Таким образом, вы можете реализовать ту же логику в вашем приложении, чтобы построить свой PartitionKey.
Если вы хотите, чтобы получить журналы для определенного диапазона дат, вы можете написать запрос, который выглядит так:
var minDate = GeneratePartitionKeyReversed(DateTime.UtcNow.AddHours(-2));
var maxDate = GeneratePartitionKeyReversed(DateTime.UtcNow.AddHours(-1));
// Get the cloud table
var cloudTable = GetCloudTable();
// Build the query
IQueryable<DynamicTableEntity> query = cloudTable.CreateQuery<DynamicTableEntity>();
// condition for max date
query = query.Where(a => string.Compare(a.PartitionKey, maxDate,
StringComparison.Ordinal) >= 0);
// condition for min date
query = query.Where(a => string.Compare(a.PartitionKey, minDate,
StringComparison.Ordinal) <= 0);3
Как бы вы определили PartitionKey и значения RowKey в этой таблице? –
@GauravMantri, да, действительно, у меня есть. – Sam
Извините, в моем вопросе не было ясно. Я хотел спросить о логике, которую вы использовали для определения ключей. Например, если вы посмотрите на данные диагностики, собранные облачными службами, они используют DateTime.Ticks (в формате UTC) с точностью до минут для PartitionKey. –