#c# #azure #azure-sql-database #azure-service-fabric
#c# #azure #azure-sql-database #azure-service-fabric
Вопрос:
Я пытаюсь сделать запрос к моей облачной таблице. То, что я делал до этого, получало все элементы определенной таблицы, но это занимает много времени.
public static List<CollectItem> GetCollectItems(string connectionString, string tableName, DateTime dateTime)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
// Create the CloudTable object that represents the "people" table.
CloudTable table = tableClient.GetTableReference(tableName);
TableContinuationToken token = null;
List<CollectItem> entities = new List<CollectItem>();
do
{
var queryResult = table.ExecuteQuerySegmented(new TableQuery<CollectItem>(), token);
entities.AddRange(queryResult.Results);
token = queryResult.ContinuationToken;
} while (token != null);
entities = entities.Where(x => x.Timestamp.DateTime.Year == dateTime.Year amp;amp;
x.Timestamp.DateTime.Month == dateTime.Month amp;amp;
x.Timestamp.DateTime.Day == dateTime.Day).ToList();
return entities;
}
Затем я попытался создать некоторые условия запроса
do
{
TableQuery<CollectItem> itemStockQuery = new TableQuery<CollectItem>().Where(
TableQuery.GenerateFilterConditionForInt("Timestamp", QueryComparisons.Equal, dateTime)
);
var queryResult = table.ExecuteQuerySegmented(itemStockQuery, token);
entities.AddRange(queryResult.Results);
token = queryResult.ContinuationToken;
} while (token != null);
Но теперь то, что он делает, — это сопоставление года, месяца, дня, часа, минуты…. И мне нужно сопоставить только год, месяц и день.
А затем я попытался создать это, но он сказал, что это плохой запрос.
TableQuery<CollectItem> itemStockQuery = new TableQuery<CollectItem>().Where(
TableQuery.GenerateFilterConditionForInt("Timestamp.DateTime.Day", QueryComparisons.Equal, dateTime.Day)
);
Мой вопрос в том, как я могу создать запрос запроса по метке времени, но только для свойства Year, Month и Day?
Ответ №1:
Вы должны создать столбец и создать для него индекс. Ваш текущий столбец datetime-column не проиндексирован и не должен быть, и именно по этой причине ваш запрос занимает много времени.
Вы можете создать столбец даты без информации о времени и создать индекс для этого столбца, или вы можете указать свой собственный формат, например. 20200928 в качестве столбца int для вашей даты.
Комментарии:
1. Мне нравится идея создания столбца, в котором будет храниться дата в формате int или string. Но я считаю, что невозможно поместить индекс в этот столбец. CloudTable имеет только индексированный столбец PartitionKey и RowKey, и невозможно добавить больше индексированных столбцов. Если я ошибаюсь, пожалуйста, скажите мне, как это сделать. Кроме того, если я не добавлю к нему индекс и не выполню поиск, потребуется ли значительно больше времени для возврата объектов?
2. вы правы! Это зависит от вашего дизайна модели. Вы можете создать несколько таблиц с требуемыми указанными ключами строк, которые возвращают выбранные вами объекты. learn.microsoft.com/de-de/azure/cosmos-db /…