Можно ли запросить какой-либо атрибут в строке табличного хранилища 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, поэтому я хотел бы взглянуть на то, выглядят ли ваши данные так, как вы ожидаете.

Другие вопросы по тегам