何万もの主キーがあり、それらに関連付けられたテーブル エンティティを取得したいと考えています。すべての行キーは空の文字列です。私が知っている最善の方法は、それらを 1 つずつ非同期でクエリすることです。高速に思えますが、理想的には、いくつかのエンティティを 1 つのトランザクションにまとめたいと考えています。新しいストレージ クライアントで遊んでいると、次のコードが失敗します。
var sample = GetSampleIds(); //10000 pks
var account = GetStorageAccount();
var tableClient = account.CreateCloudTableClient();
var table = tableClient.GetTableReference("myTable");
//I'm trying to get first and second pk in a single request.
var keyA = sample[0];
var keyB = sample[1];
var filterA = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, keyA);
var filterB = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, keyB));
//filterAB = "(PartitionKey eq 'keyA') or (PartitionKey eq 'keyB')"
var filterAB = TableQuery.CombineFilters(filterA, TableOperators.Or, filterB);
var query = new TableQuery<TweetEntity>().Where(filterAB);
//Does something weird. I thought it might be fetching a range at one point.
//Whatever it does it doesn't return. Expected the following line to get an array of 2 items.
table.ExecuteQuery(query).ToArray()
// replacing filterAB in query with either filterA or filterB works as expected
例では常に、CombineFilters が PK と RK で機能していることを示していますが、これは私には役に立ちません。これは不可能だと思います。
質問
エンティティを PK でバンドルすることはできますか? フィルターの最大長が 15 であることはわかっていますが、10,000 アイテムを取得する場合は 2 であっても改善される可能性があります。また、説明書はどこにありますか?適切なドキュメントがどこにも見つかりません。たとえば、CombineFilters の MSDN は、Intellisense が提供する情報をより少なくラップする基本的なシェルです。