我正在构建并执行以下查询:
var queryDate = new Date(2013, 6, 22);
var query = azure.TableQuery
.select()
.from("WADLogsTable")
.where("Timestamp > ?", queryDate);
tableService.queryEntities(query, function(err, entities){
......
});
但是实体返回为空,如果我删除了where子句,则填充了实体集合?
对此查询有什么问题的想法?
如果我将查询对象转储到控制台,它看起来像 - {_fields:[], _from:'WADLogsTable', _where:['Timestamp gt datetime \'2013-07-21T23:00:00.000Z \''], _top:null, _partitionKey:null, _nextPartitionKey:null, _rowKey:null, _nextRowKey:null}
答案 0 :(得分:0)
由于您的查询不包含PartitionKey
,因此您的查询会导致全表扫描。对于表服务的每个查询请求,最多可以返回1000个匹配实体。如果未找到匹配且有更多实体可用,则表服务返回一个继续令牌,该令牌应用于获取下一组实体。因此,在您的情况下发生的事情是表服务从顶部(第一个分区)开始,并尝试查找符合您的查询条件的实体。由于它没有找到任何东西,因此它不返回任何值。但是,如果您检查回复标题,则会看到x-ms-continuation-NextPartitionKey
和x-ms-continuation-NextRowKey
等标题。
为获得最佳效果,您的查询应始终包含PartitionKey 。请看一下这篇关于有效获取我之前写的诊断数据的博客文章:http://gauravmantri.com/2012/02/17/effective-way-of-fetching-diagnostics-data-from-windows-azure-diagnostics-table-hint-use-partitionkey/。