我想在Azure表中显示100个项目,我已经知道PartitionKey和Rowkey,所以对于$ filter,看起来像这样:
((PartitionKey eq 'js32') and (RowKey eq '18371378441826619420')) or ((PartitionKey eq 'js53') and (RowKey eq '18371389407961060290')) or ((PartitionKey eq 'js37') and (RowKey eq '18371565010300884950')) or ((PartitionKey eq 'js64') and (RowKey eq '18371570522532718663')) or ((PartitionKey eq 'js78') and (RowKey eq '18371571234060779934')) or ((PartitionKey eq 'js18') and (RowKey eq '18371620015195251645')) or ((PartitionKey eq 'js59') and (RowKey eq '18371642621740783008')) or ((PartitionKey eq 'js27') and (RowKey eq '18371653219702884172')) or ((PartitionKey eq 'js79') and (RowKey eq '18371686842261536342')) or ((PartitionKey eq 'js25') and (RowKey eq '18371703202567992223')) or ((PartitionKey eq 'js25') and (RowKey eq '18371721921192859595')) or ((PartitionKey eq 'js40') and (RowKey eq '18371723165056625088')) or ((PartitionKey eq 'js58') and (RowKey eq '18371742515754080322')) or ((PartitionKey eq 'js59') and (RowKey eq '18371742690277511383')) or ((PartitionKey eq 'js27') and (RowKey eq '18371754349415311569')) or ((PartitionKey eq 'js41') and (RowKey eq '18371755036440371353')) or ((PartitionKey eq 'js70') and (RowKey eq '18371790002968340255'))......
Total 100 items (so 100 PartitionKey and 100 RowKey)
但后来我收到了错误:HTTP Error 414. The request URL is too long.
您是否遇到此错误,您是如何解决的?
答案 0 :(得分:2)
HTTP响应414并非特定于Windows Azure表存储:它只是意味着您的请求URI太长。我从来没有碰到这个,因为我通常不会构建以这种方式调出多个单独行的查询。我不确定最大URI长度是多少。
话虽如此:这个查询看起来不会非常有效,因为你正在跨越分区,这意味着你将获得带有延续令牌的部分结果(至少这是基于$的我的猜测)你提出的过滤器片段)。有关延续令牌和回复的更多信息here。
答案 1 :(得分:2)
我同意David Makogon的说法 - 你最好不要写多个查询。如果你这样做,你也可以使用并行线程来加快速度。如果你走这条路线,在分区键上分组(每个线程/连接点击一个特定的键/一组键)。
就长URI而言,IE将支持大约2k。我不知道这是否是IE特定的限制,或者此限制是否也适用于.NET WebClient。另外,请注意,即使它使用非常长的查询字符串,也可能存在无法使用Uri长度的代理。
另一个建议是转换为范围查询(大于和小于),并使用其他查询片段排除您不需要的某些元素。这仅在您的密钥结构使得范围查询有意义时才有效。
埃里克
答案 2 :(得分:1)
您是通过REST还是StorageClientLibrary进行此操作?该库确实为您提供了一些很好的抽象。