Можно ли запросить какой-либо атрибут в строке табличного хранилища Windows Azure?
Извините, если это звучит как довольно глупый вопрос, но я хотел бы сделать "выбор" для данных из таблицы Windows Azure. Я попробовал следующее, и это сработало:
from question in _statusTable.GetAll()
where status.RowKey.StartsWith(name)
Я тогда попробовал
from question in _statusTable.GetAll()
where status.Description.StartsWith(name)
Этот не дал мне ничего. Может ли кто-нибудь объяснить мне, если или как я могу запросить строки, которые не являются частью RowKey или PartitionKey.
2 ответа
Вы можете запросить любое свойство, но типы поддерживаемых запросов ограничены - например, StartsWith
не поддерживается Кроме того, если вы не запрашиваете PartitionKey и RowKey, есть некоторые очень важные проблемы с производительностью, которые нужно понять - и вам всегда нужно знать о ContinuationToken - почти любой результат запроса может содержать их.
Вы можете увидеть поддерживаемые типы запросов, посмотрев на REST API: http://msdn.microsoft.com/en-us/library/dd894031.aspx - это довольно ограниченный (но быстрый в результате):
- равных
- Лучше чем
- GreaterThanOrEqual
- Меньше, чем
- LessThanOrEqual
- Не равный
Если вам нужно сделать больше, то:
- вы можете имитировать такие вещи, как
StartsWith("Fred")
делаяGreaterThanOrEqualTo("Fred") and LessThan("Free")
- или фильтрация на стороне клиента будет работать - но это означает, что нужно извлечь все строки из хранилища, - которые могут содержать много данных и которые могут быть дорогими в вычислительном и транзакционном отношении!
Что делает GetAll()? StartsWith не поддерживается таблицами WA, поэтому я предполагаю, что GetAll извлекает все данные локально, и поэтому ваш запрос выполняется над объектами в памяти. Если это так, то это не имеет ничего общего с Windo ws Azure, поэтому я хотел бы взглянуть на то, выглядят ли ваши данные так, как вы ожидаете.