25

null値についてAzureテーブルストレージを照会する適切な方法を知っている人はいますか? 私が読んだことから、それは可能です(ただし、開発ストレージではそれを妨げるバグがあります)。ただし、ライブ クラウド ストレージでこれを行うと、次のエラーが発生し続けます。

要求入力の 1 つが無効です。

これは、私がまとめた 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 をチェックせずにクエリを実行すると、問題なく動作します。考えられる解決策は、このクエリが返すコレクションに対して 2 番目のクエリを実行することです。必要に応じてそれを行ってもかまいませんが、このアプローチを最初に機能させることができるかどうかを知りたいです。

私が間違っていることが明らかな人はいますか?

4

5 に答える 5

48

問題は、azure テーブル ストレージにはスキーマがないため、null 列が実際には存在しないことです。これが、クエリが有効でない理由です。テーブル ストレージに null 列などというものはありません。本当に必要な場合は、空の文字列を保存するようなことができます。ただし、ここでの根本的な問題は、Azure テーブル ストレージが実際には、パーティション キーと行キー以外の列によってクエリされるように構築されていないことです。これらの非標準の列の 1 つに対してクエリを実行するたびに、テーブル スキャンが実行されます。大量のデータを取得し始めると、クエリのタイムアウト率が非常に高くなります。これらのタイプのクエリには手動インデックスを設定することをお勧めします。たとえば、同じテーブルに同じデータを格納できますが、Row キーの値は異なります。最終的に、

更新: Azure には、テーブル ストレージの設計に関する優れたガイドがあり、読むことをお勧めします。http://azure.microsoft.com/en-us/documentation/articles/storage-table-design-guide/

于 2010-11-24T02:58:47.380 に答える
3

MyColumn という文字列列の場合、次のように入力できました。not(MyColumn gt '')

上記のMike Sの回答は、私を正しい道に導きました。

于 2021-06-25T15:21:28.050 に答える
1

文字列の場合、空の文字列と比較できます。

IsNotBlank(value) 

次のことができます。

(Value gt '') 
于 2021-03-14T19:24:57.117 に答える