2016-02-16 2 views
1

Я создал облачную службу, которая берет данные из таблицы WadWindowsEventLogs Azure Storage и возвращает из нее файл csv. Но когда я создаю условие фильтра для запроса таблицы для даты, он возвращает пустой файл csv без каких-либо строк. Моя функция возвращает строку вGenerateFilterConditionOnDate не работает

public string retrieveWADWindowsEventLogsTable() 
    { 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
     CloudConfigurationManager.GetSetting("DefaultConnectionString")); 

     CsvExport myExport = new CsvExport(); 
     //Creating a table client 
     CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); 

     //getting reference to the desired table 
     CloudTable table = tableClient.GetTableReference("WADWindowsEventLogsTable"); 

     TableQuery<WADWindowsEventLogsTableEntity> query = new TableQuery<WADWindowsEventLogsTableEntity>().Where(TableQuery.GenerateFilterConditionForDate("TimeStamp", QueryComparisons.GreaterThanOrEqual, new DateTime(2016,02,01))); 

     //For each row in table, creating the corresponding entry in CSV file 
     foreach (WADWindowsEventLogsTableEntity entity in table.ExecuteQuery(query)) 
     { 
      //some code 

     } 

     var exp = myExport.Export(); 
     return exp; 
    }  

После этого у меня есть еще одна функция, чтобы преобразовать эту строку в файл CSV, который необходим в контексте этого вопроса я не думаю. Тогда мой класс сущности является

public class WADWindowsEventLogsTableEntity : TableEntity 
{ 
    public WADWindowsEventLogsTableEntity() 
    { 

    } 
    //public string PartitionKey { get; set; } 
    //public string RowKey { get; set; } 
    public DateTime TimeStamp { get; set; } 

    public string Channel { get; set; } 
    public string DeploymentId { get; set; } 
    public string Description { get; set; } 
    public Int32 EventId { get; set; } 
    public Int64 EventTickCount { get; set; } 
    public Int32 Level { get; set; } 
    public Int32 Opcode { get; set; } 
    public Int32 Pid { get; set; } 
    public DateTime PreciseTimeStamp { get; set; } 
    public string ProviderGuid { get; set; } 
    public string ProviderName { get; set; } 
    public string RawXml { get; set; } 
    public string Role { get; set; } 
    public string RoleInstance { get; set; } 
    public string RowIndex { get; set; } 
    public DateTime TIMESTAMP { get; set; } 
    public Int32 Task { get; set; } 
    public Int32 Tid { get; set; } 

} 

Любая помощь приветствуется

+0

Почему вы запрашиваете свойство 'Timestamp'? Как упоминалось в моем комментарии в вашем другом вопросе (http://stackoverflow.com/questions/35316006/getting-latest-logs-from-azure-diagnostics), просмотрите мой пост в блоге. Используйте 'PartitionKey' для запроса. –

+0

@GauravMantri требование таково, что я должен получить журналы после определенного времени. И теперь ваш сайт заблокирован прокси-сервером компании, поэтому я больше не могу его открывать. –

ответ

2

Как уже упоминалось в моем blog значение PartitionKey в этих таблицах, на самом деле представляют собой время, когда был создан журнал. По существу, это свойство Ticks значения DateTime, прилагаемого к 0. Что вам нужно сделать, так это взять дату/время, которое вас интересует, рассчитать его значение Ticks и добавить к нему 0. Затем используйте это значение в своем запросе. Что-то, как показано ниже:

 var dateTime = new DateTime(2016, 02, 01, 0, 0, 0, DateTimeKind.Utc); 
     var partitionKeyValue = "0" + dateTime.Ticks; 
     TableQuery<WADWindowsEventLogsTableEntity> query = new TableQuery<WADWindowsEventLogsTableEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.GreaterThanOrEqual, partitionKeyValue)); 

Причина ваш код не работает, потому что вы вы запрашиваете таблицу на Timestamp атрибут, который не индексируется таблице услуг. Следовательно, ваш запрос выполняет полное сканирование таблицы. Если ваша таблица большая, то она не вернет никакого результата, кроме токена продолжения. Вы можете использовать этот токен продолжения, чтобы выбрать следующий набор записей.

+0

Спасибо, сэр. Работала отлично. –