2010-11-19 72 views
12

有誰知道查詢天空表存儲空值的正確方法。從我讀過的,這是可能的(雖然有一個錯誤,防止它在開發存儲)。但是,當我在活動雲存儲上這樣做時,我仍然收到以下錯誤:查詢天空表存儲空值

其中一個請求輸入無效。

這是我放在一起的LINQ查詢的簡化版本。

var query = from fooBar in fooBarSVC.CreateQuery<FooBar>("FooBars") 
     where fooBar.PartitionKey == kPartitionID 
      && fooBar.Code == kfooBarCode 
      && fooBar.Effective_Date <= kFooBarDate.ToUniversalTime() 
      && (fooBar.Termination_Date > kFooBarDate.ToUniversalTime() || fooBar.Termination_Date == null) 
     select fooBar; 

如果我運行查詢而不檢查null,它工作正常。我知道一個可能的解決方案是對該查詢帶回的集合運行第二個查詢。如果需要,我不介意這樣做,但想知道我是否可以先採取這種方法。

任何人看到任何明顯的我做錯了?

回答

27

問題是,因爲azure表存儲沒有模式,所以空列實際上不存在。這就是您的查詢無效的原因。表存儲中不存在空列。如果你真的需要,你可以做一些事情來存儲一個空字符串。真的,雖然這裏的根本問題是Azure表存儲實際上不是由分區鍵和行鍵以外的任何列構建的。每當您對其中一個非標準列進行查詢時,您都在進行表掃描。如果你開始獲取大量數據,你將會有很高的查詢超時率。我建議爲這些類型的查詢設置一個手動索引。例如,您可以在同一個表中存儲相同的數據,但Row鍵的值不同。最終,如果你的應用沒有變得瘋狂的高使用率,我只會使用SQL Azure,因爲它對於你正在進行的查詢類型會更加靈活。

更新:Azure對桌面存儲設計有很好的指導,我建議您閱讀。 http://azure.microsoft.com/en-us/documentation/articles/storage-table-design-guide/

+0

Nathan,謝謝你的迴應。這很有幫助。 – Brosto 2010-12-09 16:13:33

+0

@Nathan Totten:很好的回答! – 2011-11-23 15:15:58